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