xref: /aosp_15_r20/external/skia/modules/skottie/src/Adapter.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2020 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 SkottieAdapter_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define SkottieAdapter_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "modules/skottie/src/animator/Animator.h"
12*c8dee2aaSAndroid Build Coastguard Worker 
13*c8dee2aaSAndroid Build Coastguard Worker namespace skottie {
14*c8dee2aaSAndroid Build Coastguard Worker namespace internal {
15*c8dee2aaSAndroid Build Coastguard Worker 
16*c8dee2aaSAndroid Build Coastguard Worker template <typename AdapterT, typename T>
17*c8dee2aaSAndroid Build Coastguard Worker class DiscardableAdapterBase : public AnimatablePropertyContainer {
18*c8dee2aaSAndroid Build Coastguard Worker public:
19*c8dee2aaSAndroid Build Coastguard Worker     template <typename... Args>
Make(Args &&...args)20*c8dee2aaSAndroid Build Coastguard Worker     static sk_sp<AdapterT> Make(Args&&... args) {
21*c8dee2aaSAndroid Build Coastguard Worker         sk_sp<AdapterT> adapter(new AdapterT(std::forward<Args>(args)...));
22*c8dee2aaSAndroid Build Coastguard Worker         adapter->shrink_to_fit();
23*c8dee2aaSAndroid Build Coastguard Worker         return adapter;
24*c8dee2aaSAndroid Build Coastguard Worker     }
25*c8dee2aaSAndroid Build Coastguard Worker 
node()26*c8dee2aaSAndroid Build Coastguard Worker     const sk_sp<T>& node() const { return fNode; }
27*c8dee2aaSAndroid Build Coastguard Worker 
28*c8dee2aaSAndroid Build Coastguard Worker protected:
DiscardableAdapterBase()29*c8dee2aaSAndroid Build Coastguard Worker     DiscardableAdapterBase()
30*c8dee2aaSAndroid Build Coastguard Worker         : fNode(T::Make()) {}
31*c8dee2aaSAndroid Build Coastguard Worker 
DiscardableAdapterBase(sk_sp<T> node)32*c8dee2aaSAndroid Build Coastguard Worker     explicit DiscardableAdapterBase(sk_sp<T> node)
33*c8dee2aaSAndroid Build Coastguard Worker         : fNode(std::move(node)) {}
34*c8dee2aaSAndroid Build Coastguard Worker 
35*c8dee2aaSAndroid Build Coastguard Worker private:
36*c8dee2aaSAndroid Build Coastguard Worker     const sk_sp<T> fNode;
37*c8dee2aaSAndroid Build Coastguard Worker };
38*c8dee2aaSAndroid Build Coastguard Worker 
39*c8dee2aaSAndroid Build Coastguard Worker } // namespace internal
40*c8dee2aaSAndroid Build Coastguard Worker } // namespace skottie
41*c8dee2aaSAndroid Build Coastguard Worker 
42*c8dee2aaSAndroid Build Coastguard Worker #endif // SkottieAdapter_DEFINED
43