Index: src/utils/SkDeferredCanvas.cpp |
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp |
index b46e92a4a09690d60da94d95a634aad43b799f7d..ac78751d142dd39a9db1d8de3ee0637b9778f525 100644 |
--- a/src/utils/SkDeferredCanvas.cpp |
+++ b/src/utils/SkDeferredCanvas.cpp |
@@ -526,6 +526,8 @@ SkDeferredCanvas::SkDeferredCanvas(SkDeferredDevice* device) : SkCanvas (device) |
void SkDeferredCanvas::init() { |
fBitmapSizeThreshold = kDeferredCanvasBitmapSizeThreshold; |
fDeferredDrawing = true; // On by default |
+ fCanvasSizeChanged = true; |
reed1
2014/09/11 15:38:13
nit: often in skia we name this sort of boolean "D
yunchao
2014/09/12 10:13:28
Done.
|
+ fCanvasSize.setEmpty(); |
reed1
2014/09/11 15:38:13
nit: may be clear to name this fCachedCanvasSize,
yunchao
2014/09/12 10:13:28
Done.
|
} |
void SkDeferredCanvas::setMaxRecordingStorage(size_t maxStorage) { |
@@ -589,6 +591,14 @@ bool SkDeferredCanvas::isFreshFrame() const { |
return this->getDeferredDevice()->isFreshFrame(); |
} |
+SkISize SkDeferredCanvas::getCanvasSize() { |
+ if (fCanvasSizeChanged) { |
+ fCanvasSize = this->getBaseLayerSize(); |
+ fCanvasSizeChanged = false; |
+ } |
+ return fCanvasSize; |
+} |
+ |
bool SkDeferredCanvas::hasPendingCommands() const { |
return this->getDeferredDevice()->hasPendingCommands(); |
} |
@@ -609,6 +619,7 @@ SkSurface* SkDeferredCanvas::setSurface(SkSurface* surface) { |
// all pending commands, which can help to seamlessly recover from |
// a lost accelerated graphics context. |
deferredDevice->setSurface(surface); |
+ fCanvasSizeChanged = true; |
return surface; |
} |
@@ -630,9 +641,9 @@ SkImage* SkDeferredCanvas::newImageSnapshot() { |
} |
bool SkDeferredCanvas::isFullFrame(const SkRect* rect, |
- const SkPaint* paint) const { |
+ const SkPaint* paint) { |
SkCanvas* canvas = this->drawingCanvas(); |
- SkISize canvasSize = this->getDeviceSize(); |
+ SkISize canvasSize = this->getCanvasSize(); |
if (rect) { |
if (!canvas->getTotalMatrix().rectStaysRect()) { |
return false; // conservative |