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