diff options
| author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-30 15:06:24 +0000 |
|---|---|---|
| committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-30 15:06:24 +0000 |
| commit | 9a558d495dfe305a52946cdf97e8883190e0bbcc (patch) | |
| tree | 8e3adabe8877f27fcc56b75fa295968bedb11f9f /samplecode/SampleApp.cpp | |
| parent | ee982ed52b49543909fb08c81faa31c23483e864 (diff) | |
using real tiles when simulating tiling
BUG=skia:
R=mtklein@google.com
Author: reed@google.com
Review URL: https://codereview.chromium.org/303403003
git-svn-id: http://skia.googlecode.com/svn/trunk@14993 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleApp.cpp')
| -rw-r--r-- | samplecode/SampleApp.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index 473220e794..ad03feacc8 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -16,6 +16,7 @@ #include "SkPicture.h" #include "SkPictureRecorder.h" #include "SkStream.h" +#include "SkSurface.h" #include "SkTSort.h" #include "SkTime.h" #include "SkWindow.h" @@ -1192,27 +1193,33 @@ void SampleWindow::draw(SkCanvas* canvas) { } else { SkSize tile = this->tileSize(); - for (SkScalar y = 0; y < height(); y += tile.height()) { - for (SkScalar x = 0; x < width(); x += tile.width()) { - SkAutoCanvasRestore acr(canvas, true); - canvas->clipRect(SkRect::MakeXYWH(x, y, - tile.width(), - tile.height())); - this->INHERITED::draw(canvas); + if (kNo_Tiling == fTilingMode) { + this->INHERITED::draw(canvas); // no looping or surfaces needed + } else { + const int w = SkScalarRoundToInt(tile.width()); + const int h = SkScalarRoundToInt(tile.height()); + SkImageInfo info = SkImageInfo::MakeN32Premul(w, h); + SkAutoTUnref<SkSurface> surface(canvas->newSurface(info)); + SkCanvas* tileCanvas = surface->getCanvas(); + + for (SkScalar y = 0; y < height(); y += tile.height()) { + for (SkScalar x = 0; x < width(); x += tile.width()) { + SkAutoCanvasRestore acr(tileCanvas, true); + tileCanvas->translate(-x, -y); + tileCanvas->clear(0); + this->INHERITED::draw(tileCanvas); + surface->draw(canvas, x, y, NULL); + } } - } - if (fTilingMode != kNo_Tiling) { + // for drawing the borders between tiles SkPaint paint; paint.setColor(0x60FF00FF); paint.setStyle(SkPaint::kStroke_Style); for (SkScalar y = 0; y < height(); y += tile.height()) { for (SkScalar x = 0; x < width(); x += tile.width()) { - canvas->drawRect(SkRect::MakeXYWH(x, y, - tile.width(), - tile.height()), - paint); + canvas->drawRect(SkRect::MakeXYWH(x, y, tile.width(), tile.height()), paint); } } } |
