Alter SkCanvas::drawPicture (devirtualize, take const SkPicture, take pointer)
R=reed@google.com, bsalomon@google.com, mtklein@google.com
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/313613004
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 4aaf46b..ee8ad25 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -969,13 +969,13 @@
drawPicture call.
@param picture The recorded drawing commands to analyze/optimize
*/
- void EXPERIMENTAL_optimize(SkPicture* picture);
+ void EXPERIMENTAL_optimize(const SkPicture* picture);
/** PRIVATE / EXPERIMENTAL -- do not call
Purge all the discardable optimization information associated with
'picture'. If NULL is passed in, purge all discardable information.
*/
- void EXPERIMENTAL_purge(SkPicture* picture);
+ void EXPERIMENTAL_purge(const SkPicture* picture);
/** Draw the picture into this canvas. This method effective brackets the
playback of the picture's draw calls with save/restore, so the state
@@ -983,7 +983,13 @@
@param picture The recorded drawing commands to playback into this
canvas.
*/
- virtual void drawPicture(SkPicture& picture);
+ void drawPicture(const SkPicture* picture);
+
+#ifdef SK_SUPPORT_LEGACY_DRAWPICTURE_API
+ virtual void drawPicture(SkPicture& picture) {
+ this->drawPicture(&picture);
+ }
+#endif
enum VertexMode {
kTriangles_VertexMode,
@@ -1242,6 +1248,8 @@
virtual void onDiscard();
+ virtual void onDrawPicture(const SkPicture* picture);
+
// Returns the canvas to be used by DrawIter. Default implementation
// returns this. Subclasses that encapsulate an indirect canvas may
// need to overload this method. The impl must keep track of this, as it
diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h
index 078f7f5..e58a491 100644
--- a/include/core/SkDevice.h
+++ b/include/core/SkDevice.h
@@ -343,14 +343,14 @@
* PRIVATE / EXPERIMENTAL -- do not call
* Construct an acceleration object and attach it to 'picture'
*/
- virtual void EXPERIMENTAL_optimize(SkPicture* picture);
+ virtual void EXPERIMENTAL_optimize(const SkPicture* picture);
/**
* PRIVATE / EXPERIMENTAL -- do not call
* Purge all discardable optimization information for 'picture'. If
* picture is NULL then purge discardable information for all pictures.
*/
- virtual void EXPERIMENTAL_purge(SkPicture* picture);
+ virtual void EXPERIMENTAL_purge(const SkPicture* picture);
/**
* PRIVATE / EXPERIMENTAL -- do not call
@@ -362,7 +362,7 @@
* to perform some device-specific warm up tasks and then let SkCanvas
* perform the main rendering loop (by return false from here).
*/
- virtual bool EXPERIMENTAL_drawPicture(SkCanvas* canvas, SkPicture* picture);
+ virtual bool EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* picture);
private:
friend class SkCanvas;
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h
index 7ca59bf..a908ab5 100644
--- a/include/core/SkPicture.h
+++ b/include/core/SkPicture.h
@@ -68,7 +68,7 @@
SkPicture(const SkPicture& src);
/** PRIVATE / EXPERIMENTAL -- do not call */
- void EXPERIMENTAL_addAccelData(const AccelData* data) {
+ void EXPERIMENTAL_addAccelData(const AccelData* data) const {
SkRefCnt_SafeAssign(fAccelData, data);
}
/** PRIVATE / EXPERIMENTAL -- do not call */
@@ -151,7 +151,7 @@
calls endRecording() if that has not already been called.
@param canvas the canvas receiving the drawing commands.
*/
- void draw(SkCanvas* canvas, SkDrawPictureCallback* = NULL);
+ void draw(SkCanvas* canvas, SkDrawPictureCallback* = NULL) const;
/** Return the width of the picture's recording canvas. This
value reflects what was passed to setSize(), and does not necessarily
@@ -286,7 +286,7 @@
SkPicturePlayback* fPlayback;
SkPictureRecord* fRecord;
int fWidth, fHeight;
- const AccelData* fAccelData;
+ mutable const AccelData* fAccelData;
void needsNewGenID() { fUniqueID = SK_InvalidGenID; }
@@ -397,7 +397,7 @@
/** PRIVATE / EXPERIMENTAL -- do not call
Return the operations required to render the content inside 'queryRect'.
*/
- const OperationList& EXPERIMENTAL_getActiveOps(const SkIRect& queryRect);
+ const OperationList& EXPERIMENTAL_getActiveOps(const SkIRect& queryRect) const;
/** PRIVATE / EXPERIMENTAL -- do not call
Return the ID of the operation currently being executed when playing
diff --git a/include/gpu/SkGpuDevice.h b/include/gpu/SkGpuDevice.h
index f2a27d7..c9650d6 100644
--- a/include/gpu/SkGpuDevice.h
+++ b/include/gpu/SkGpuDevice.h
@@ -152,11 +152,11 @@
virtual bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) SK_OVERRIDE;
/** PRIVATE / EXPERIMENTAL -- do not call */
- virtual void EXPERIMENTAL_optimize(SkPicture* picture) SK_OVERRIDE;
+ virtual void EXPERIMENTAL_optimize(const SkPicture* picture) SK_OVERRIDE;
/** PRIVATE / EXPERIMENTAL -- do not call */
- virtual void EXPERIMENTAL_purge(SkPicture* picture) SK_OVERRIDE;
+ virtual void EXPERIMENTAL_purge(const SkPicture* picture) SK_OVERRIDE;
/** PRIVATE / EXPERIMENTAL -- do not call */
- virtual bool EXPERIMENTAL_drawPicture(SkCanvas* canvas, SkPicture* picture) SK_OVERRIDE;
+ virtual bool EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* picture) SK_OVERRIDE;
private:
GrContext* fContext;
diff --git a/include/utils/SkDeferredCanvas.h b/include/utils/SkDeferredCanvas.h
index 9413512..31ebce4 100644
--- a/include/utils/SkDeferredCanvas.h
+++ b/include/utils/SkDeferredCanvas.h
@@ -162,7 +162,6 @@
SK_OVERRIDE;
virtual void drawSprite(const SkBitmap& bitmap, int left, int top,
const SkPaint* paint) SK_OVERRIDE;
- virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
virtual void drawVertices(VertexMode vmode, int vertexCount,
const SkPoint vertices[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
@@ -193,6 +192,8 @@
virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+ virtual void onDrawPicture(const SkPicture* picture) SK_OVERRIDE;
+
public:
class NotificationClient {
public:
diff --git a/include/utils/SkDumpCanvas.h b/include/utils/SkDumpCanvas.h
index 6fc679b..0aa5546 100644
--- a/include/utils/SkDumpCanvas.h
+++ b/include/utils/SkDumpCanvas.h
@@ -90,7 +90,6 @@
const SkPaint* paint) SK_OVERRIDE;
virtual void drawSprite(const SkBitmap& bitmap, int left, int top,
const SkPaint* paint) SK_OVERRIDE;
- virtual void drawPicture(SkPicture&) SK_OVERRIDE;
virtual void drawVertices(VertexMode vmode, int vertexCount,
const SkPoint vertices[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
@@ -126,6 +125,8 @@
virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+ virtual void onDrawPicture(const SkPicture*) SK_OVERRIDE;
+
static const char* EdgeStyleToAAString(ClipEdgeStyle edgeStyle);
private:
diff --git a/include/utils/SkLuaCanvas.h b/include/utils/SkLuaCanvas.h
index 3efbdb9..6bef868 100644
--- a/include/utils/SkLuaCanvas.h
+++ b/include/utils/SkLuaCanvas.h
@@ -36,7 +36,6 @@
const SkPaint* paint) SK_OVERRIDE;
virtual void drawSprite(const SkBitmap& bitmap, int left, int top,
const SkPaint* paint) SK_OVERRIDE;
- virtual void drawPicture(SkPicture&) SK_OVERRIDE;
virtual void drawVertices(VertexMode vmode, int vertexCount,
const SkPoint vertices[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
@@ -67,6 +66,8 @@
virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+ virtual void onDrawPicture(const SkPicture*) SK_OVERRIDE;
+
private:
lua_State* fL;
SkString fFunc;
diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h
index e60dc4d..bd19355 100644
--- a/include/utils/SkNWayCanvas.h
+++ b/include/utils/SkNWayCanvas.h
@@ -43,7 +43,6 @@
const SkPaint* paint = NULL) SK_OVERRIDE;
virtual void drawSprite(const SkBitmap& bitmap, int left, int top,
const SkPaint*) SK_OVERRIDE;
- virtual void drawPicture(SkPicture&) SK_OVERRIDE;
virtual void drawVertices(VertexMode vmode, int vertexCount,
const SkPoint vertices[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
@@ -82,6 +81,8 @@
virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+ virtual void onDrawPicture(const SkPicture*) SK_OVERRIDE;
+
class Iter;
private:
diff --git a/include/utils/SkProxyCanvas.h b/include/utils/SkProxyCanvas.h
index a418ec0..09bf375 100644
--- a/include/utils/SkProxyCanvas.h
+++ b/include/utils/SkProxyCanvas.h
@@ -42,7 +42,6 @@
const SkPaint* paint = NULL) SK_OVERRIDE;
virtual void drawSprite(const SkBitmap& bitmap, int left, int top,
const SkPaint* paint = NULL) SK_OVERRIDE;
- virtual void drawPicture(SkPicture&) SK_OVERRIDE;
virtual void drawVertices(VertexMode vmode, int vertexCount,
const SkPoint vertices[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
@@ -79,6 +78,8 @@
virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE;
+ virtual void onDrawPicture(const SkPicture*) SK_OVERRIDE;
+
private:
SkCanvas* fProxy;