Clip-only tiling in Viewer
Use clipping for tile isolation, instead of separate surface.
Change-Id: I8ae09ef25962fe877d54b1154ab9b5bf9a5f5a1c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/271859
Reviewed-by: Mike Klein <mtklein@google.com>
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 8ff1bee..49ae040 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -1336,19 +1336,11 @@
if (fTiled) {
int tileW = SkScalarCeilToInt(fWindow->width() * fTileScale.width());
int tileH = SkScalarCeilToInt(fWindow->height() * fTileScale.height());
- sk_sp<SkSurface> tileSurface = make_surface(tileW, tileH);
- SkCanvas* tileCanvas = tileSurface->getCanvas();
- SkMatrix m = this->computeMatrix();
for (int y = 0; y < fWindow->height(); y += tileH) {
for (int x = 0; x < fWindow->width(); x += tileW) {
- SkAutoCanvasRestore acr(tileCanvas, true);
- tileCanvas->translate(-x, -y);
- tileCanvas->clear(SK_ColorTRANSPARENT);
- tileCanvas->concat(m);
- OveridePaintFilterCanvas filterCanvas(tileCanvas, &fPaint, &fPaintOverrides,
- &fFont, &fFontOverrides);
- fSlides[fCurrentSlide]->draw(&filterCanvas);
- tileSurface->draw(slideCanvas, x, y, nullptr);
+ SkAutoCanvasRestore acr(slideCanvas, true);
+ slideCanvas->clipRect(SkRect::MakeXYWH(x, y, tileW, tileH));
+ fSlides[fCurrentSlide]->draw(slideCanvas);
}
}