[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>
diff --git a/experimental/skottie/Skottie.cpp b/experimental/skottie/Skottie.cpp
index 5b0e836..ad513fd 100644
--- a/experimental/skottie/Skottie.cpp
+++ b/experimental/skottie/Skottie.cpp
@@ -1095,8 +1095,18 @@
if (layerCtx->fCurrentMatte) {
// There is a pending matte. Apply and reset.
- return sksg::MaskEffect::Make(std::move(controller_node),
- std::move(layerCtx->fCurrentMatte));
+ static constexpr sksg::MaskEffect::Mode gMaskModes[] = {
+ sksg::MaskEffect::Mode::kNormal, // tt: 1
+ sksg::MaskEffect::Mode::kInvert, // tt: 2
+ };
+ const auto matteType = ParseDefault(jlayer["tt"], 1) - 1;
+
+ if (matteType >= 0 && matteType < SkTo<int>(SK_ARRAY_COUNT(gMaskModes))) {
+ return sksg::MaskEffect::Make(std::move(controller_node),
+ std::move(layerCtx->fCurrentMatte),
+ gMaskModes[matteType]);
+ }
+ layerCtx->fCurrentMatte.reset();
}
return controller_node;