Viewer: balance save/restores and draw offscreen to window in src mode
authorBrian Salomon <bsalomon@google.com>
Wed, 22 Feb 2017 20:21:11 +0000 (15:21 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Wed, 22 Feb 2017 21:10:07 +0000 (21:10 +0000)
Change-Id: I9a9bff1c950aaeda095ee49b4860c6fee04ea731
Reviewed-on: https://skia-review.googlesource.com/8887
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>

tools/viewer/Viewer.cpp

index 092910a..c7517cc 100644 (file)
@@ -596,7 +596,8 @@ void Viewer::setColorMode(SkColorType colorType, sk_sp<SkColorSpace> colorSpace)
 }
 
 void Viewer::drawSlide(SkCanvas* canvas) {
-    int count = canvas->save();
+    SkAutoCanvasRestore autorestore(canvas, false);
+
     if (fWindow->supportsContentRect()) {
         SkRect contentRect = fWindow->getContentRect();
         canvas->clipRect(contentRect);
@@ -617,14 +618,15 @@ void Viewer::drawSlide(SkCanvas* canvas) {
         slideCanvas = offscreenSurface->getCanvas();
     }
 
+    int count = slideCanvas->save();
     slideCanvas->clear(SK_ColorWHITE);
     slideCanvas->concat(fDefaultMatrix);
     slideCanvas->concat(computeMatrix());
-
     // Time the painting logic of the slide
     double startTime = SkTime::GetMSecs();
     fSlides[fCurrentSlide]->draw(slideCanvas);
     fPaintTimes[fCurrentMeasurement] = SkTime::GetMSecs() - startTime;
+    slideCanvas->restoreToCount(count);
 
     // Force a flush so we can time that, too
     startTime = SkTime::GetMSecs();
@@ -639,10 +641,10 @@ void Viewer::drawSlide(SkCanvas* canvas) {
         sk_sp<SkColorSpace> cs = (kRGBA_F16_SkColorType == fColorType)
             ? SkColorSpace::MakeSRGBLinear() : SkColorSpace::MakeSRGB();
         auto retaggedImage = SkImageMakeRasterCopyAndAssignColorSpace(fLastImage.get(), cs.get());
-        canvas->drawImage(retaggedImage, 0, 0);
+        SkPaint paint;
+        paint.setBlendMode(SkBlendMode::kSrc);
+        canvas->drawImage(retaggedImage, 0, 0, &paint);
     }
-
-    canvas->restoreToCount(count);
 }
 
 void Viewer::onPaint(SkCanvas* canvas) {