diff options
author | Florin Malita <fmalita@chromium.org> | 2018-03-05 14:01:41 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-03-05 20:11:05 +0000 |
commit | a016be94993aa57a3a5afcea07d70e6e18068d48 (patch) | |
tree | dd8a313268b3c81377e818784244f046f1d76018 /experimental/sksg/effects/SkSGMaskEffect.cpp | |
parent | 07edbd45c24b13c6d8c638c50f04291c427e9575 (diff) |
[skottie] Inverted matte support
TBR=
Change-Id: I761d80d27d9a737710123a183af37135c270b8a7
Reviewed-on: https://skia-review.googlesource.com/112162
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'experimental/sksg/effects/SkSGMaskEffect.cpp')
-rw-r--r-- | experimental/sksg/effects/SkSGMaskEffect.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/experimental/sksg/effects/SkSGMaskEffect.cpp b/experimental/sksg/effects/SkSGMaskEffect.cpp index 17b4da7037..16e4c0dd8d 100644 --- a/experimental/sksg/effects/SkSGMaskEffect.cpp +++ b/experimental/sksg/effects/SkSGMaskEffect.cpp @@ -11,9 +11,10 @@ namespace sksg { -MaskEffect::MaskEffect(sk_sp<RenderNode> child, sk_sp<RenderNode> mask) +MaskEffect::MaskEffect(sk_sp<RenderNode> child, sk_sp<RenderNode> mask, Mode mode) : INHERITED(std::move(child)) - , fMaskNode(std::move(mask)) { + , fMaskNode(std::move(mask)) + , fMaskMode(mode) { this->observeInval(fMaskNode); } @@ -32,7 +33,7 @@ void MaskEffect::onRender(SkCanvas* canvas) const { SkPaint p; - p.setBlendMode(SkBlendMode::kSrcIn); + p.setBlendMode(fMaskMode == Mode::kNormal ? SkBlendMode::kSrcIn : SkBlendMode::kSrcOut); canvas->saveLayer(this->bounds(), &p); this->INHERITED::onRender(canvas); @@ -45,7 +46,9 @@ SkRect MaskEffect::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) const auto maskBounds = fMaskNode->revalidate(ic, ctm); auto childBounds = this->INHERITED::onRevalidate(ic, ctm); - return childBounds.intersect(maskBounds) ? childBounds : SkRect::MakeEmpty(); + return (fMaskMode == Mode::kInvert || childBounds.intersect(maskBounds)) + ? childBounds + : SkRect::MakeEmpty(); } } // namespace sksg |