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 SkottieExternalLayer_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkottieExternalLayer_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker class SkCanvas; 14*c8dee2aaSAndroid Build Coastguard Worker struct SkSize; 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker namespace skottie { 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker /** 19*c8dee2aaSAndroid Build Coastguard Worker * Interface for externally-rendered layers. 20*c8dee2aaSAndroid Build Coastguard Worker */ 21*c8dee2aaSAndroid Build Coastguard Worker class ExternalLayer : public SkRefCnt { 22*c8dee2aaSAndroid Build Coastguard Worker public: 23*c8dee2aaSAndroid Build Coastguard Worker /** Render layer content into the given canvas. 24*c8dee2aaSAndroid Build Coastguard Worker * 25*c8dee2aaSAndroid Build Coastguard Worker * @param canvas Destination canvas 26*c8dee2aaSAndroid Build Coastguard Worker * @param t Time in seconds, relative to the layer in-point (start time) 27*c8dee2aaSAndroid Build Coastguard Worker */ 28*c8dee2aaSAndroid Build Coastguard Worker virtual void render(SkCanvas* canvas, double t) = 0; 29*c8dee2aaSAndroid Build Coastguard Worker }; 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker /** 32*c8dee2aaSAndroid Build Coastguard Worker * Interface for intercepting pre-composed layer creation. 33*c8dee2aaSAndroid Build Coastguard Worker * 34*c8dee2aaSAndroid Build Coastguard Worker * Embedders can register interceptors with animation builders, to substitute target layers 35*c8dee2aaSAndroid Build Coastguard Worker * with arbitrary/externally-controlled content (see ExternalLayer above). 36*c8dee2aaSAndroid Build Coastguard Worker */ 37*c8dee2aaSAndroid Build Coastguard Worker class PrecompInterceptor : public SkRefCnt { 38*c8dee2aaSAndroid Build Coastguard Worker public: 39*c8dee2aaSAndroid Build Coastguard Worker /** 40*c8dee2aaSAndroid Build Coastguard Worker * Invoked at animation build time, for each precomp layer. 41*c8dee2aaSAndroid Build Coastguard Worker * 42*c8dee2aaSAndroid Build Coastguard Worker * @param id The target composition ID (usually assigned automatically by BM: comp_0, ...) 43*c8dee2aaSAndroid Build Coastguard Worker * @param name The name of the precomp layer (by default it matches the target comp name, 44*c8dee2aaSAndroid Build Coastguard Worker * but can be changed in AE) 45*c8dee2aaSAndroid Build Coastguard Worker * @param size Lottie-specified precomp layer size 46*c8dee2aaSAndroid Build Coastguard Worker * @return An ExternalLayer implementation (to be used instead of the actual Lottie file 47*c8dee2aaSAndroid Build Coastguard Worker * content), or nullptr (to use the Lottie file content). 48*c8dee2aaSAndroid Build Coastguard Worker */ 49*c8dee2aaSAndroid Build Coastguard Worker virtual sk_sp<ExternalLayer> onLoadPrecomp(const char id[], 50*c8dee2aaSAndroid Build Coastguard Worker const char name[], 51*c8dee2aaSAndroid Build Coastguard Worker const SkSize& size) = 0; 52*c8dee2aaSAndroid Build Coastguard Worker }; 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker } // namespace skottie 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker #endif // SkottieExternalLayer_DEFINED 57