2 * Copyright 2019 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #include "modules/skottie/src/effects/Effects.h"
10 #include "include/private/SkTPin.h"
11 #include "modules/skottie/src/Adapter.h"
12 #include "modules/skottie/src/SkottieValue.h"
13 #include "modules/sksg/include/SkSGColorFilter.h"
14 #include "modules/sksg/include/SkSGPaint.h"
15 #include "src/utils/SkJSON.h"
22 class FillAdapter final : public AnimatablePropertyContainer {
24 static sk_sp<FillAdapter> Make(const skjson::ArrayValue& jprops,
25 sk_sp<sksg::RenderNode> layer,
26 const AnimationBuilder& abuilder) {
27 return sk_sp<FillAdapter>(new FillAdapter(jprops, std::move(layer), abuilder));
30 const auto& node() const { return fFilterNode; }
33 FillAdapter(const skjson::ArrayValue& jprops,
34 sk_sp<sksg::RenderNode> layer,
35 const AnimationBuilder& abuilder)
36 : fColorNode(sksg::Color::Make(SK_ColorBLACK))
37 , fFilterNode(sksg::ModeColorFilter::Make(std::move(layer),
39 SkBlendMode::kSrcIn)) {
41 // kFillMask_Index = 0,
42 // kAllMasks_Index = 1,
45 // kHFeather_Index = 4,
46 // kVFeather_Index = 5,
50 EffectBinder(jprops, abuilder, this)
51 .bind( kColor_Index, fColor )
52 .bind(kOpacity_Index, fOpacity);
54 abuilder.dispatchColorProperty(fColorNode);
57 void onSync() override {
58 auto c = static_cast<SkColor4f>(fColor);
59 c.fA = SkTPin(fOpacity, 0.0f, 1.0f);
61 fColorNode->setColor(c.toSkColor());
64 const sk_sp<sksg::Color> fColorNode;
65 const sk_sp<sksg::ModeColorFilter> fFilterNode;
68 ScalarValue fOpacity = 1;
73 sk_sp<sksg::RenderNode> EffectBuilder::attachFillEffect(const skjson::ArrayValue& jprops,
74 sk_sp<sksg::RenderNode> layer) const {
75 return fBuilder->attachDiscardableAdapter<FillAdapter>(jprops, std::move(layer), *fBuilder);
78 } // namespace internal
79 } // namespace skottie