Restore old Viewer setup order.
The backend needs to be set up before setting the current slide because
some slides require the backend resolution to set their size. We'll
check to see if a slide is set before drawing instead.
Also adds a null slide to be drawn when no slides are loaded.
Change-Id: Idb34deea80ea32762fa9e7434312e7b542c6a87e
Reviewed-on: https://skia-review.googlesource.com/c/196650
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index f71dd65..7dd4465 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -166,6 +166,16 @@
return Window::kRaster_BackendType == backendType ? Window::kNativeGL_BackendType : backendType;
}
+class NullSlide : public Slide {
+ SkISize getDimensions() const override {
+ return SkISize::Make(640, 480);
+ }
+
+ void draw(SkCanvas* canvas) override {
+ canvas->clear(0xffff11ff);
+ }
+};
+
const char* kName = "name";
const char* kValue = "value";
const char* kOptions = "options";
@@ -524,8 +534,8 @@
fImGuiGamutPaint.setColor(SK_ColorWHITE);
fImGuiGamutPaint.setFilterQuality(kLow_SkFilterQuality);
- this->setCurrentSlide(this->startupSlide());
fWindow->attach(backend_type_for_window(fBackendType));
+ this->setCurrentSlide(this->startupSlide());
}
void Viewer::initSlides() {
@@ -665,6 +675,11 @@
}
}
}
+
+ if (!fSlides.count()) {
+ sk_sp<Slide> slide(new NullSlide());
+ fSlides.push_back(std::move(slide));
+ }
}
@@ -1132,6 +1147,10 @@
};
void Viewer::drawSlide(SkCanvas* canvas) {
+ if (fCurrentSlide < 0) {
+ return;
+ }
+
SkAutoCanvasRestore autorestore(canvas, false);
// By default, we render directly into the window's surface/canvas