clip to elements directly, no need for replay indirection
allows us to remove SkCanvas::replayClips in future CL
BUG=skia:
Change-Id: I20c3700c8a331b4988fc1332702ff0e0565e94bc
Reviewed-on: https://skia-review.googlesource.com/9417
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/gm/windowrectangles.cpp b/gm/windowrectangles.cpp
index d0ec023..c57ad7d 100644
--- a/gm/windowrectangles.cpp
+++ b/gm/windowrectangles.cpp
@@ -74,29 +74,29 @@
void onCoverClipStack(const SkClipStack&, SkCanvas*) final;
};
-/**
- * This is a simple helper class for resetting a canvas's clip to our test's SkClipStack.
- */
-class ReplayClipStackVisitor final : public SkCanvasClipVisitor {
-public:
- typedef SkClipOp Op;
- ReplayClipStackVisitor(SkCanvas* canvas) : fCanvas(canvas) {}
- void clipRect(const SkRect& r, Op op, bool aa) override { fCanvas->clipRect(r, op, aa); }
- void clipRRect(const SkRRect& rr, Op op, bool aa) override { fCanvas->clipRRect(rr, op, aa); }
- void clipPath(const SkPath&, Op, bool) override { SkFAIL("Not implemented"); }
-private:
- SkCanvas* const fCanvas;
-};
-
void WindowRectanglesGM::onCoverClipStack(const SkClipStack& stack, SkCanvas* canvas) {
SkPaint paint;
paint.setColor(0xff00aa80);
// Set up the canvas's clip to match our SkClipStack.
- ReplayClipStackVisitor visitor(canvas);
SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart);
for (const SkClipStack::Element* element = iter.next(); element; element = iter.next()) {
- element->replay(&visitor);
+ SkClipOp op = element->getOp();
+ bool isAA = element->isAA();
+ switch (element->getType()) {
+ case SkClipStack::Element::kPath_Type:
+ canvas->clipPath(element->getPath(), op, isAA);
+ break;
+ case SkClipStack::Element::kRRect_Type:
+ canvas->clipRRect(element->getRRect(), op, isAA);
+ break;
+ case SkClipStack::Element::kRect_Type:
+ canvas->clipRect(element->getRect(), op, isAA);
+ break;
+ case SkClipStack::Element::kEmpty_Type:
+ canvas->clipRect({ 0, 0, 0, 0 }, kIntersect_SkClipOp, false);
+ break;
+ }
}
canvas->drawRect(SkRect::Make(kCoverRect), paint);