aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils/SkCanvasStack.h
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2016-11-15 11:52:55 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-15 17:32:03 +0000
commit584ca89d3b7a7781ea0407ee4d1c953fc7085e75 (patch)
treea3ce8ce64779b55a0a08b82c0b0692c8eff0c85f /src/utils/SkCanvasStack.h
parentd5a78805c5133bc55e07c5da21f8d72b91a3df4f (diff)
change SkCanvasStack to take ownership of its subcanvases
Inspired by https://bugs.chromium.org/p/chromium/issues/detail?id=663959 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4799 Change-Id: I69f7ac73386bb7ca96778e2fec4cb2757b982a52 Reviewed-on: https://skia-review.googlesource.com/4799 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'src/utils/SkCanvasStack.h')
-rw-r--r--src/utils/SkCanvasStack.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/utils/SkCanvasStack.h b/src/utils/SkCanvasStack.h
index 762ab9f76f..0e6e4b6381 100644
--- a/src/utils/SkCanvasStack.h
+++ b/src/utils/SkCanvasStack.h
@@ -11,12 +11,18 @@
#include "SkNWayCanvas.h"
#include "SkTArray.h"
+/**
+ * Like NWayCanvas, in that it forwards all canvas methods to each sub-canvas that is "pushed".
+ *
+ * Unlike NWayCanvas, this takes ownership of each subcanvas, and deletes them when this canvas
+ * is deleted.
+ */
class SkCanvasStack : public SkNWayCanvas {
public:
SkCanvasStack(int width, int height);
virtual ~SkCanvasStack();
- void pushCanvas(SkCanvas* canvas, const SkIPoint& origin);
+ void pushCanvas(std::unique_ptr<SkCanvas>, const SkIPoint& origin);
void removeAll() override;
/*
@@ -42,6 +48,7 @@ private:
struct CanvasData {
SkIPoint origin;
SkRegion requiredClip;
+ std::unique_ptr<SkCanvas> ownedCanvas;
};
SkTArray<CanvasData> fCanvasData;