diff options
author | 2014-06-05 12:40:07 -0700 | |
---|---|---|
committer | 2014-06-05 12:40:07 -0700 | |
commit | c3b589a24eb4d567a906189f882c259ecf5c2f58 (patch) | |
tree | b685282e7cba61088e2cb08da7c13bff764878cf /src/core/SkCanvas.cpp | |
parent | 5d3f9c765f18f35232176473909b667928fd4378 (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.cpp | 18 |
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() { } /////////////////////////////////////////////////////////////////////////////// |