Viewer to resize Samples with window resize.

This adds onResize to sk_app::Window::Layer and uses it to resize
samples in Viewer.

Change-Id: Ia5ec5cf6dc74fbdf712291b9ba8707b076cb625d
Reviewed-on: https://skia-review.googlesource.com/146642
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/tools/sk_app/Window.cpp b/tools/sk_app/Window.cpp
index 1694bea..862ee1a 100644
--- a/tools/sk_app/Window.cpp
+++ b/tools/sk_app/Window.cpp
@@ -92,6 +92,7 @@
         return;
     }
     fWindowContext->resize(w, h);
+    this->visitLayers([=](Layer* layer) { layer->onResize(w, h); });
 }
 
 int Window::width() {
diff --git a/tools/sk_app/Window.h b/tools/sk_app/Window.h
index d207928..29d90c6 100644
--- a/tools/sk_app/Window.h
+++ b/tools/sk_app/Window.h
@@ -150,6 +150,7 @@
         virtual void onUIStateChanged(const SkString& stateName, const SkString& stateValue) {}
         virtual void onPrePaint() {}
         virtual void onPaint(SkCanvas*) {}
+        virtual void onResize(int width, int height) {}
 
     private:
         friend class Window;
diff --git a/tools/viewer/SampleSlide.h b/tools/viewer/SampleSlide.h
index ac757ea..ec5253a 100644
--- a/tools/viewer/SampleSlide.h
+++ b/tools/viewer/SampleSlide.h
@@ -18,6 +18,9 @@
 
     void draw(SkCanvas* canvas) override;
     void load(SkScalar winWidth, SkScalar winHeight) override;
+    void resize(SkScalar winWidth, SkScalar winHeight) override {
+        fSample->setSize(winWidth, winHeight);
+    }
     void unload() override;
     bool animate(const SkAnimTimer& timer) override {
         return fSample->animate(timer);
diff --git a/tools/viewer/Slide.h b/tools/viewer/Slide.h
index 127b32d..023cd6b 100644
--- a/tools/viewer/Slide.h
+++ b/tools/viewer/Slide.h
@@ -28,6 +28,7 @@
     virtual void draw(SkCanvas* canvas) = 0;
     virtual bool animate(const SkAnimTimer&) { return false;  }
     virtual void load(SkScalar winWidth, SkScalar winHeight) {}
+    virtual void resize(SkScalar winWidth, SkScalar winHeight) {}
     virtual void unload() {}
 
     virtual bool onChar(SkUnichar c) { return false; }
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 143b8f2..088f949 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -1155,6 +1155,10 @@
     this->drawImGui();
 }
 
+void Viewer::onResize(int width, int height) {
+    fSlides[fCurrentSlide]->resize(width, height);
+}
+
 SkPoint Viewer::mapEvent(float x, float y) {
     const auto m = this->computeMatrix();
     SkMatrix inv;
diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h
index e051170..02e4063 100644
--- a/tools/viewer/Viewer.h
+++ b/tools/viewer/Viewer.h
@@ -31,6 +31,7 @@
 
     void onBackendCreated() override;
     void onPaint(SkCanvas* canvas) override;
+    void onResize(int width, int height) override;
     bool onTouch(intptr_t owner, sk_app::Window::InputState state, float x, float y) override;
     bool onMouse(int x, int y, sk_app::Window::InputState state, uint32_t modifiers) override;
     void onUIStateChanged(const SkString& stateName, const SkString& stateValue) override;