Fix Viewer slide load on backend change

Currently Viewer fires unbalanced load events on backend change.

Instead of calling setupCurrentSlide() with an invalid prevSlide and
always forcing a slide load, pass a |force| argument on backend change.

Change-Id: I146b42331f5aa9721d4f407b81c13f4512d67d61
Reviewed-on: https://skia-review.googlesource.com/94960
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 59d5e50..0597237 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -609,12 +609,16 @@
     }
 }
 
-void Viewer::setupCurrentSlide(int previousSlide) {
-    if (fCurrentSlide == previousSlide) {
+void Viewer::setupCurrentSlide(int previousSlide, bool force) {
+    if (fCurrentSlide == previousSlide && !force) {
         return; // no change; do nothing
     }
+
     // prepare dimensions for image slides
-    fSlides[fCurrentSlide]->load(SkIntToScalar(fWindow->width()), SkIntToScalar(fWindow->height()));
+    if (fCurrentSlide != previousSlide) {
+        fSlides[fCurrentSlide]->load(SkIntToScalar(fWindow->width()),
+                                     SkIntToScalar(fWindow->height()));
+    }
 
     fGesture.resetTouchState();
     fDefaultMatrix.reset();
@@ -635,7 +639,7 @@
 
     this->updateTitle();
     this->updateUIState();
-    if (previousSlide >= 0) {
+    if (previousSlide >= 0 && fCurrentSlide != previousSlide) {
         fSlides[previousSlide]->unload();
     }
 
@@ -823,7 +827,8 @@
 void Viewer::onBackendCreated() {
     this->updateTitle();
     this->updateUIState();
-    this->setupCurrentSlide(-1);
+    // Force slide setup without reload.
+    this->setupCurrentSlide(fCurrentSlide, true);
     fStatsLayer.resetMeasurements();
     fWindow->show();
     fWindow->inval();
diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h
index 7d4980c..9564277 100644
--- a/tools/viewer/Viewer.h
+++ b/tools/viewer/Viewer.h
@@ -50,7 +50,7 @@
     void setBackend(sk_app::Window::BackendType);
     void setColorMode(ColorMode);
     void setStartupSlide();
-    void setupCurrentSlide(int previousSlide);
+    void setupCurrentSlide(int previousSlide, bool force = false);
     void listNames();
 
     void updateUIState();