From c7027ab03f2e8bab4c74bc1b047642622d3d682b Mon Sep 17 00:00:00 2001 From: jvanverth Date: Thu, 16 Jun 2016 09:52:35 -0700 Subject: Add samples to Viewer. This adds support with animation, assuming the sample has implemented onAnimate. Event handling has not been implemented. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2056343004 Committed: https://skia.googlesource.com/skia/+/76963e73704a42a18c29d6fbdcccb566e5c67658 Review-Url: https://codereview.chromium.org/2056343004 --- tools/viewer/ImageSlide.cpp | 2 +- tools/viewer/ImageSlide.h | 2 +- tools/viewer/SKPSlide.cpp | 2 +- tools/viewer/SKPSlide.h | 2 +- tools/viewer/SampleSlide.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++ tools/viewer/SampleSlide.h | 34 +++++++++++++++++++++++++++++++++ tools/viewer/Slide.h | 6 ++++-- tools/viewer/Viewer.cpp | 11 ++++++++++- 8 files changed, 97 insertions(+), 7 deletions(-) create mode 100755 tools/viewer/SampleSlide.cpp create mode 100755 tools/viewer/SampleSlide.h (limited to 'tools') diff --git a/tools/viewer/ImageSlide.cpp b/tools/viewer/ImageSlide.cpp index 4a03185733..de5ce4ca1e 100644 --- a/tools/viewer/ImageSlide.cpp +++ b/tools/viewer/ImageSlide.cpp @@ -35,7 +35,7 @@ void ImageSlide::draw(SkCanvas* canvas) { } } -void ImageSlide::load() { +void ImageSlide::load(SkScalar, SkScalar) { sk_sp encoded = SkData::MakeFromFileName(fPath.c_str()); fImage = SkImage::MakeFromEncoded(encoded); fImage->asLegacyBitmap(&fOriginalBitmap, SkImage::kRO_LegacyBitmapMode); diff --git a/tools/viewer/ImageSlide.h b/tools/viewer/ImageSlide.h index 88254ddc03..0dd816e878 100644 --- a/tools/viewer/ImageSlide.h +++ b/tools/viewer/ImageSlide.h @@ -21,7 +21,7 @@ public: SkISize getDimensions() const override; void draw(SkCanvas* canvas) override; - void load() override; + void load(SkScalar winWidth, SkScalar winHeight) override; void unload() override; private: diff --git a/tools/viewer/SKPSlide.cpp b/tools/viewer/SKPSlide.cpp index 6a9899b92f..9419253f0c 100644 --- a/tools/viewer/SKPSlide.cpp +++ b/tools/viewer/SKPSlide.cpp @@ -48,7 +48,7 @@ static sk_sp read_picture(const char path[]) { return pic; } -void SKPSlide::load() { +void SKPSlide::load(SkScalar, SkScalar) { fPic = read_picture(fPath.c_str()); fCullRect = fPic->cullRect().roundOut(); } diff --git a/tools/viewer/SKPSlide.h b/tools/viewer/SKPSlide.h index 42845fa30d..ff92ed1a39 100644 --- a/tools/viewer/SKPSlide.h +++ b/tools/viewer/SKPSlide.h @@ -19,7 +19,7 @@ public: SkISize getDimensions() const override { return fCullRect.size(); } void draw(SkCanvas* canvas) override; - void load() override; + void load(SkScalar winWidth, SkScalar winHeight) override; void unload() override; private: diff --git a/tools/viewer/SampleSlide.cpp b/tools/viewer/SampleSlide.cpp new file mode 100755 index 0000000000..5e02ff1da7 --- /dev/null +++ b/tools/viewer/SampleSlide.cpp @@ -0,0 +1,45 @@ +/* +* Copyright 2016 Google Inc. +* +* Use of this source code is governed by a BSD-style license that can be +* found in the LICENSE file. +*/ + +#include "SampleSlide.h" + +#include "SkCanvas.h" +#include "SkCommonFlags.h" +#include "SkOSFile.h" +#include "SkStream.h" + +SampleSlide::SampleSlide(const SkViewFactory* factory) : fViewFactory(factory) { + SkView* view = (*factory)(); + SampleCode::RequestTitle(view, &fName); + view->unref(); +} + +SampleSlide::~SampleSlide() {} + +void SampleSlide::draw(SkCanvas* canvas) { + fView->draw(canvas); +} + +void SampleSlide::load(SkScalar winWidth, SkScalar winHeight) { + fView = (*fViewFactory)(); + fView->setVisibleP(true); + fView->setClipToBounds(false); + fView->setSize(winWidth, winHeight); +} + +void SampleSlide::unload() { + fView->unref(); + fView = nullptr; +} + +#if defined(SK_BUILD_FOR_ANDROID) +// these are normally defined in SkOSWindow_unix, but we don't +// want to include that +void SkEvent::SignalNonEmptyQueue() {} + +void SkEvent::SignalQueueTimer(SkMSec delay) {} +#endif diff --git a/tools/viewer/SampleSlide.h b/tools/viewer/SampleSlide.h new file mode 100755 index 0000000000..3d772d093d --- /dev/null +++ b/tools/viewer/SampleSlide.h @@ -0,0 +1,34 @@ +/* +* Copyright 2016 Google Inc. +* +* Use of this source code is governed by a BSD-style license that can be +* found in the LICENSE file. +*/ + +#ifndef SampleSlide_DEFINED +#define SampleSlide_DEFINED + +#include "Slide.h" +#include "SampleCode.h" + +class SampleSlide : public Slide { +public: + SampleSlide(const SkViewFactory* factory); + ~SampleSlide() override; + + void draw(SkCanvas* canvas) override; + void load(SkScalar winWidth, SkScalar winHeight) override; + void unload() override; + bool animate(const SkAnimTimer& timer) override { + if (SampleView::IsSampleView(fView)) { + return ((SampleView*)fView)->animate(timer); + } + return false; + } + +private: + const SkViewFactory* fViewFactory; + SkView* fView; +}; + +#endif diff --git a/tools/viewer/Slide.h b/tools/viewer/Slide.h index cdc225b0a8..bc0ffd4016 100644 --- a/tools/viewer/Slide.h +++ b/tools/viewer/Slide.h @@ -19,11 +19,13 @@ class Slide : public SkRefCnt { public: virtual ~Slide() {} - virtual SkISize getDimensions() const = 0; + virtual SkISize getDimensions() const { + return SkISize::Make(0, 0); + } virtual void draw(SkCanvas* canvas) = 0; virtual bool animate(const SkAnimTimer&) { return false; } - virtual void load() {} + virtual void load(SkScalar winWidth, SkScalar winHeight) {} virtual void unload() {} SkString getName() { return fName; } diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp index 7052a3ac79..43697f88b8 100644 --- a/tools/viewer/Viewer.cpp +++ b/tools/viewer/Viewer.cpp @@ -9,6 +9,7 @@ #include "GMSlide.h" #include "ImageSlide.h" +#include "SampleSlide.h" #include "SKPSlide.h" #include "SkCanvas.h" @@ -205,6 +206,14 @@ void Viewer::initSlides() { fSlides[fSlides.count() - i - 1] = temp; } + // samples + const SkViewRegister* reg = SkViewRegister::Head(); + while (reg) { + sk_sp slide(new SampleSlide(reg->factory())); + fSlides.push_back(slide); + reg = reg->next(); + } + // SKPs for (int i = 0; i < FLAGS_skps.count(); i++) { if (SkStrEndsWith(FLAGS_skps[i], ".skp")) { @@ -270,7 +279,7 @@ void Viewer::setupCurrentSlide(int previousSlide) { } // prepare dimensions for image slides - fSlides[fCurrentSlide]->load(); + fSlides[fCurrentSlide]->load(SkIntToScalar(fWindow->width()), SkIntToScalar(fWindow->height())); fGesture.reset(); fDefaultMatrix.reset(); -- cgit v1.2.3