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