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();