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 #ifndef SkottieLayer_DEFINED
9 #define SkottieLayer_DEFINED
11 #include "modules/skottie/src/SkottiePriv.h"
16 class CompositionBuilder;
18 class LayerBuilder final {
20 LayerBuilder(const skjson::ObjectValue& jlayer, const SkSize& comp_size);
21 LayerBuilder(const LayerBuilder&) = default;
24 int index() const { return fIndex; }
26 bool isCamera() const;
28 // Attaches the local and ancestor transform chain for the layer "native" type.
29 sk_sp<sksg::Transform> buildTransform(const AnimationBuilder&, CompositionBuilder*);
31 // Attaches the actual layer content and finalizes its render tree. Called once per layer.
32 sk_sp<sksg::RenderNode> buildRenderTree(const AnimationBuilder&, CompositionBuilder*,
33 const LayerBuilder* prev_layer);
35 const sk_sp<sksg::RenderNode>& contentTree() const { return fContentTree; }
37 const SkSize& size() const { return fInfo.fSize; }
40 enum TransformType : uint8_t {
46 // k2DTransformValid = 0x01, // reserved for cache tracking
47 // k3DTransformValie = 0x02, // reserved for cache tracking
48 kIs3D = 0x04, // 3D layer ("ddd": 1) or camera layer
51 bool is3D() const { return fFlags & Flags::kIs3D; }
53 bool hasMotionBlur(const CompositionBuilder*) const;
55 // Attaches (if needed) and caches the transform chain for a given layer,
56 // as either a 2D or 3D chain type.
57 // Called transitively (and possibly repeatedly) to resolve layer parenting.
58 sk_sp<sksg::Transform> getTransform(const AnimationBuilder&, CompositionBuilder*,
61 sk_sp<sksg::Transform> getParentTransform(const AnimationBuilder&, CompositionBuilder*,
64 sk_sp<sksg::Transform> doAttachTransform(const AnimationBuilder&, CompositionBuilder*,
67 const skjson::ObjectValue& fJlayer;
69 const int fParentIndex;
71 const bool fAutoOrient;
73 AnimationBuilder::LayerInfo fInfo;
74 sk_sp<sksg::Transform> fLayerTransform; // this layer's transform node.
75 sk_sp<sksg::Transform> fTransformCache[2]; // cached 2D/3D chain for the local node
76 sk_sp<sksg::RenderNode> fContentTree; // render tree for layer content,
77 // excluding mask/matte and blending
79 AnimatorScope fLayerScope; // layer-scoped animators
80 size_t fTransformAnimatorCount = 0; // transform-related animator count
84 } // namespace internal
85 } // namespace skottie
87 #endif // SkottieLayer_DEFINED