Index: tools/viewer/Viewer.cpp |
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp |
index 7052a3ac79244d7ee724ea9f23a900e675ef2b64..64e1b637eecc7b2f166dc97f747f4d1ce72c076c 100644 |
--- a/tools/viewer/Viewer.cpp |
+++ b/tools/viewer/Viewer.cpp |
@@ -11,12 +11,15 @@ |
#include "ImageSlide.h" |
#include "SKPSlide.h" |
+#include "GrRenderTarget.h" |
#include "SkCanvas.h" |
#include "SkCommonFlags.h" |
+#include "SkDashPathEffect.h" |
#include "SkMetaData.h" |
#include "SkOSFile.h" |
#include "SkRandom.h" |
#include "SkStream.h" |
+#include "SkSurface.h" |
using namespace sk_app; |
@@ -360,9 +363,26 @@ void Viewer::drawSlide(SkCanvas* canvas, bool inSplitScreen) { |
canvas->concat(fDefaultMatrix); |
canvas->concat(computeMatrix()); |
- canvas->getMetaData().setBool(kImageColorXformMetaData, inSplitScreen); |
- fSlides[fCurrentSlide]->draw(canvas); |
+ if (inSplitScreen) { |
+ sk_sp<SkSurface> offscreenSurface = fWindow->getOffscreenSurface(true); |
+ fSlides[fCurrentSlide]->draw(offscreenSurface->getCanvas()); |
+ sk_sp<SkImage> snapshot = offscreenSurface->makeImageSnapshot(); |
+ canvas->drawImage(snapshot, 0, 0); |
+ } else { |
+ fSlides[fCurrentSlide]->draw(canvas); |
+ } |
+ |
canvas->restoreToCount(count); |
+ |
+ if (inSplitScreen) { |
+ // Draw split line |
+ SkPaint paint; |
+ SkScalar intervals[] = {10.0f, 5.0f}; |
+ paint.setPathEffect(SkDashPathEffect::Make(intervals, 2, 0.0f)); |
+ SkRect contentRect = fWindow->getContentRect(); |
+ SkScalar middleX = (contentRect.fLeft + contentRect.fRight) * 0.5f; |
+ canvas->drawLine(middleX, contentRect.fTop, middleX, contentRect.fBottom, paint); |
+ } |
} |
void Viewer::onPaint(SkCanvas* canvas) { |