diff options
Diffstat (limited to 'samplecode/SampleApp.cpp')
| -rw-r--r-- | samplecode/SampleApp.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index c485356b1f..2d0da1f71b 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -129,6 +129,8 @@ public: SampleWindow(void* hwnd); virtual ~SampleWindow(); + virtual void draw(SkCanvas* canvas); + protected: virtual void onDraw(SkCanvas* canvas); virtual bool onHandleKey(SkKey key); @@ -167,6 +169,7 @@ private: CanvasType fCanvasType; bool fUseClip; + bool fNClip; bool fRepeatDrawing; bool fAnimating; bool fRotate; @@ -210,6 +213,7 @@ SampleWindow::SampleWindow(void* hwnd) : INHERITED(hwnd) { fCanvasType = kRaster_CanvasType; fUseClip = false; + fNClip = false; fRepeatDrawing = false; fAnimating = false; fRotate = false; @@ -237,6 +241,33 @@ SampleWindow::~SampleWindow() { delete fGLCanvas; } +#define XCLIP_N 4 +#define YCLIP_N 1 + +void SampleWindow::draw(SkCanvas* canvas) { + if (fNClip) { + // this->INHERITED::draw(canvas); + // SkBitmap orig = capture_bitmap(canvas); + + const SkScalar w = this->width(); + const SkScalar h = this->height(); + const SkScalar cw = w / XCLIP_N; + const SkScalar ch = h / YCLIP_N; + for (int y = 0; y < YCLIP_N; y++) { + for (int x = 0; x < XCLIP_N; x++) { + SkAutoCanvasRestore acr(canvas, true); + SkRect r = { + x * cw, y * ch, (x + 1) * cw, (y + 1) * ch + }; + canvas->clipRect(r); + this->INHERITED::draw(canvas); + } + } + } else { + this->INHERITED::draw(canvas); + } +} + void SampleWindow::onDraw(SkCanvas* canvas) { if (fRepeatDrawing) { this->inval(NULL); @@ -511,7 +542,7 @@ bool SampleWindow::onHandleKey(SkKey key) { this->inval(NULL); return true; case kUp_SkKey: - fUseClip = !fUseClip; + fNClip = !fNClip; this->updateTitle(); this->inval(NULL); return true; @@ -604,7 +635,9 @@ void SampleWindow::updateTitle() { if (fRotate) { title.prepend("<R> "); } - + if (fNClip) { + title.prepend("<C> "); + } this->setTitle(title.c_str()); } |
