aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkCanvas.cpp
diff options
context:
space:
mode:
authorGravatar fmalita <fmalita@chromium.org>2014-06-05 12:40:07 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-06-05 12:40:07 -0700
commitc3b589a24eb4d567a906189f882c259ecf5c2f58 (patch)
treeb685282e7cba61088e2cb08da7c13bff764878cf /src/core/SkCanvas.cpp
parent5d3f9c765f18f35232176473909b667928fd4378 (diff)
SkClipStack::Element tweaks.
( This is intended to facilitate efficient kMatrix_SaveFlags emulation on restore(): * collect all clip stack elements for the current save count into a side clip stack * canvas.restore(everything) * replay the collected clip ops to restore the initial clip state => we restored the matrix but the clip state is unchanged ) Two main changes: * expose the save count for SkClipStack::Element * expose a replay method for the same (logic relocated from SkCanvas::replayClips) The SkCanvas::ClipVisitor shuffling is to enable forward decl in SkClipStack.h (cannot fwdecl a nested class). R=reed@google.com, robertphillips@google.com TBR=reed@google.com Author: fmalita@chromium.org Review URL: https://codereview.chromium.org/269693003
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r--src/core/SkCanvas.cpp18
1 files changed, 2 insertions, 16 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 3134c46686..bdbcd3be74 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1666,22 +1666,8 @@ void SkCanvas::replayClips(ClipVisitor* visitor) const {
SkClipStack::B2TIter iter(fClipStack);
const SkClipStack::Element* element;
- static const SkRect kEmpty = { 0, 0, 0, 0 };
while ((element = iter.next()) != NULL) {
- switch (element->getType()) {
- case SkClipStack::Element::kPath_Type:
- visitor->clipPath(element->getPath(), element->getOp(), element->isAA());
- break;
- case SkClipStack::Element::kRRect_Type:
- visitor->clipRRect(element->getRRect(), element->getOp(), element->isAA());
- break;
- case SkClipStack::Element::kRect_Type:
- visitor->clipRect(element->getRect(), element->getOp(), element->isAA());
- break;
- case SkClipStack::Element::kEmpty_Type:
- visitor->clipRect(kEmpty, SkRegion::kIntersect_Op, false);
- break;
- }
+ element->replay(visitor);
}
}
@@ -2556,7 +2542,7 @@ int SkCanvas::LayerIter::y() const { return fImpl->getY(); }
///////////////////////////////////////////////////////////////////////////////
-SkCanvas::ClipVisitor::~ClipVisitor() { }
+SkCanvasClipVisitor::~SkCanvasClipVisitor() { }
///////////////////////////////////////////////////////////////////////////////