xref: /aosp_15_r20/external/skia/tools/viewer/SkottieSlide.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2017 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 SkottieSlide_DEFINED
9 #define SkottieSlide_DEFINED
10 
11 #include "tools/viewer/Slide.h"
12 
13 #if defined(SK_ENABLE_SKOTTIE)
14 #include "modules/skottie/include/Skottie.h"
15 #include "modules/sksg/include/SkSGInvalidationController.h"
16 
17 #include <vector>
18 
19 namespace skottie_utils {
20 class TextEditor;
21 }
22 
23 namespace sksg    { class Scene;     }
24 
25 class SkottieSlide : public Slide {
26 public:
27     SkottieSlide(const SkString& name, const SkString& path);
28     ~SkottieSlide() override = default;
29 
30     void load(SkScalar winWidth, SkScalar winHeight) override;
31     void unload() override;
32     void resize(SkScalar, SkScalar) override;
33 
34     void draw(SkCanvas*) override;
35     bool animate(double) override;
36 
37     bool onChar(SkUnichar) override;
38     bool onMouse(SkScalar x, SkScalar y, skui::InputState, skui::ModifierKey modifiers) override;
39 
40     // Initializes the Skottie animation independent of window size.
41     void init();
42 
43 private:
44     SkRect UIArea() const;
45     void renderUI();
46 
47     class TransformTracker;
48     class SlotManagerInterface;
49 
50     const SkString                     fPath;
51 
52     sk_sp<skottie::Animation>          fAnimation;
53     skottie::Animation::Builder::Stats fAnimationStats;
54     sksg::InvalidationController       fInvalController;
55     sk_sp<TransformTracker>            fTransformTracker;
56     std::unique_ptr<SlotManagerInterface>fSlotManagerInterface;
57     sk_sp<skottie_utils::TextEditor>   fTextEditor;
58     std::vector<float>                 fFrameTimes;
59     SkSize                             fWinSize              = SkSize::MakeEmpty();
60     double                             fTimeBase             = 0,
61                                        fFrameRate            = 0;
62     const char*                        fFrameRateLabel       = nullptr;
63     float                              fCurrentFrame         = 0;
64     bool                               fShowAnimationInval   = false,
65                                        fShowAnimationStats   = false,
66                                        fShowUI               = false,
67                                        fShowTrackerUI        = false,
68                                        fShowSlotManager      = false,
69                                        fDraggingProgress     = false,
70                                        fPreferGlyphPaths     = false;
71 };
72 
73 #endif // SK_ENABLE_SKOTTIE
74 
75 #endif // SkottieSlide_DEFINED
76