1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkottieComposition_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkottieComposition_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkNoncopyable.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "modules/skottie/src/Layer.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkTHash.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker #include <cstddef> 18*c8dee2aaSAndroid Build Coastguard Worker #include <vector> 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker namespace skjson { 21*c8dee2aaSAndroid Build Coastguard Worker class ObjectValue; 22*c8dee2aaSAndroid Build Coastguard Worker } 23*c8dee2aaSAndroid Build Coastguard Worker namespace sksg { 24*c8dee2aaSAndroid Build Coastguard Worker class RenderNode; 25*c8dee2aaSAndroid Build Coastguard Worker class Transform; 26*c8dee2aaSAndroid Build Coastguard Worker } // namespace sksg 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker namespace skottie { 29*c8dee2aaSAndroid Build Coastguard Worker namespace internal { 30*c8dee2aaSAndroid Build Coastguard Worker class AnimationBuilder; 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker class CompositionBuilder final : SkNoncopyable { 33*c8dee2aaSAndroid Build Coastguard Worker public: 34*c8dee2aaSAndroid Build Coastguard Worker CompositionBuilder(const AnimationBuilder&, const SkSize&, const skjson::ObjectValue&); 35*c8dee2aaSAndroid Build Coastguard Worker ~CompositionBuilder(); 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker sk_sp<sksg::RenderNode> build(const AnimationBuilder&); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker LayerBuilder* layerBuilder(int layer_index); 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker private: getCameraTransform()42*c8dee2aaSAndroid Build Coastguard Worker const sk_sp<sksg::Transform>& getCameraTransform() const { return fCameraTransform; } 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker friend class LayerBuilder; 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker const SkSize fSize; 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker std::vector<LayerBuilder> fLayerBuilders; 49*c8dee2aaSAndroid Build Coastguard Worker skia_private::THashMap<int, size_t> fLayerIndexMap; // Maps layer "ind" to layer builder index. 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker sk_sp<sksg::Transform> fCameraTransform; 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker size_t fMotionBlurSamples = 1; 54*c8dee2aaSAndroid Build Coastguard Worker float fMotionBlurAngle = 0, 55*c8dee2aaSAndroid Build Coastguard Worker fMotionBlurPhase = 0; 56*c8dee2aaSAndroid Build Coastguard Worker }; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker } // namespace internal 59*c8dee2aaSAndroid Build Coastguard Worker } // namespace skottie 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker #endif // SkottieComposition_DEFINED 62