add drawPicture variant that takes a matrix and paint
will need some staging strategy, since chrome and blink have overrides of onDrawPicture
R=robertphillips@google.com, fmalita@google.com, bsalomon@google.com, mtklein@google.com
Author: reed@google.com
Review URL: https://codereview.chromium.org/448793004
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index eef9d90..791511e 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -973,6 +973,20 @@
*/
void drawPicture(const SkPicture* picture);
+ /**
+ * Draw the picture into this canvas.
+ *
+ * If matrix is non-null, apply that matrix to the CTM when drawing this picture. This is
+ * logically equivalent to
+ * save/concat/drawPicture/restore
+ *
+ * If paint is non-null, draw the picture into a temporary buffer, and then apply the paint's
+ * alpha/colorfilter/imagefilter/xfermode to that buffer as it is drawn to the canvas.
+ * This is logically equivalent to
+ * saveLayer(paint)/drawPicture/restore
+ */
+ void drawPicture(const SkPicture*, const SkMatrix* matrix, const SkPaint* paint);
+
enum VertexMode {
kTriangles_VertexMode,
kTriangleStrip_VertexMode,
@@ -1223,9 +1237,9 @@
virtual void onDiscard();
- virtual void onDrawPicture(const SkPicture* picture);
// temporary, until we can migrate existing overrides in chrome
- virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) {}
+ virtual void onDrawPicture(const SkPicture*) {}
+ virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*);
// Returns the canvas to be used by DrawIter. Default implementation
// returns this. Subclasses that encapsulate an indirect canvas may
diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h
index a5682c2..3d79a65 100644
--- a/include/core/SkDevice.h
+++ b/include/core/SkDevice.h
@@ -348,7 +348,8 @@
* 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, const SkPicture* picture);
+ virtual bool EXPERIMENTAL_drawPicture(SkCanvas*, const SkPicture*, const SkMatrix*,
+ const SkPaint*);
private:
friend class SkCanvas;
diff --git a/include/gpu/SkGpuDevice.h b/include/gpu/SkGpuDevice.h
index 5ff26f6..b856d66 100644
--- a/include/gpu/SkGpuDevice.h
+++ b/include/gpu/SkGpuDevice.h
@@ -143,7 +143,8 @@
/** PRIVATE / EXPERIMENTAL -- do not call */
virtual void EXPERIMENTAL_optimize(const SkPicture* picture) SK_OVERRIDE;
/** PRIVATE / EXPERIMENTAL -- do not call */
- virtual bool EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* picture) SK_OVERRIDE;
+ virtual bool EXPERIMENTAL_drawPicture(SkCanvas* canvas, const SkPicture* picture,
+ const SkMatrix*, const SkPaint*) SK_OVERRIDE;
private:
GrContext* fContext;
diff --git a/include/utils/SkDeferredCanvas.h b/include/utils/SkDeferredCanvas.h
index f37e9d8..435c569 100644
--- a/include/utils/SkDeferredCanvas.h
+++ b/include/utils/SkDeferredCanvas.h
@@ -194,7 +194,7 @@
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;
+ virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
public:
class NotificationClient {
diff --git a/include/utils/SkDumpCanvas.h b/include/utils/SkDumpCanvas.h
index 53b9755..866b408 100644
--- a/include/utils/SkDumpCanvas.h
+++ b/include/utils/SkDumpCanvas.h
@@ -127,7 +127,7 @@
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;
+ virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
static const char* EdgeStyleToAAString(ClipEdgeStyle edgeStyle);
diff --git a/include/utils/SkLuaCanvas.h b/include/utils/SkLuaCanvas.h
index 5d8a973..3315d66 100644
--- a/include/utils/SkLuaCanvas.h
+++ b/include/utils/SkLuaCanvas.h
@@ -66,7 +66,7 @@
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;
+ virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
private:
lua_State* fL;
diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h
index a4bfa88..8d2854d 100644
--- a/include/utils/SkNWayCanvas.h
+++ b/include/utils/SkNWayCanvas.h
@@ -82,7 +82,7 @@
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;
+ virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
class Iter;
diff --git a/include/utils/SkProxyCanvas.h b/include/utils/SkProxyCanvas.h
index d31806f..2e002cc 100644
--- a/include/utils/SkProxyCanvas.h
+++ b/include/utils/SkProxyCanvas.h
@@ -79,7 +79,9 @@
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;
+ // temporary until we can land and fix chrome
+ virtual void onDrawPicture(const SkPicture*) SK_OVERRIDE {}
+ virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) SK_OVERRIDE;
private:
SkCanvas* fProxy;