1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2017 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 SkottieSlide_DEFINED
9cb93a386Sopenharmony_ci#define SkottieSlide_DEFINED
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci#include "tools/viewer/Slide.h"
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_ci#if defined(SK_ENABLE_SKOTTIE)
14cb93a386Sopenharmony_ci#include "modules/skottie/include/Skottie.h"
15cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGInvalidationController.h"
16cb93a386Sopenharmony_ci
17cb93a386Sopenharmony_ci#include <vector>
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_cinamespace sksg    { class Scene;     }
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_ciclass SkottieSlide : public Slide {
22cb93a386Sopenharmony_cipublic:
23cb93a386Sopenharmony_ci    SkottieSlide(const SkString& name, const SkString& path);
24cb93a386Sopenharmony_ci    ~SkottieSlide() override = default;
25cb93a386Sopenharmony_ci
26cb93a386Sopenharmony_ci    void load(SkScalar winWidth, SkScalar winHeight) override;
27cb93a386Sopenharmony_ci    void unload() override;
28cb93a386Sopenharmony_ci    void resize(SkScalar, SkScalar) override;
29cb93a386Sopenharmony_ci
30cb93a386Sopenharmony_ci    SkISize getDimensions() const override;
31cb93a386Sopenharmony_ci
32cb93a386Sopenharmony_ci    void draw(SkCanvas*) override;
33cb93a386Sopenharmony_ci    bool animate(double) override;
34cb93a386Sopenharmony_ci
35cb93a386Sopenharmony_ci    bool onChar(SkUnichar) override;
36cb93a386Sopenharmony_ci    bool onMouse(SkScalar x, SkScalar y, skui::InputState, skui::ModifierKey modifiers) override;
37cb93a386Sopenharmony_ci
38cb93a386Sopenharmony_ciprivate:
39cb93a386Sopenharmony_ci    SkRect UIArea() const;
40cb93a386Sopenharmony_ci    void renderUI();
41cb93a386Sopenharmony_ci
42cb93a386Sopenharmony_ci    const SkString                     fPath;
43cb93a386Sopenharmony_ci
44cb93a386Sopenharmony_ci    sk_sp<skottie::Animation>          fAnimation;
45cb93a386Sopenharmony_ci    skottie::Animation::Builder::Stats fAnimationStats;
46cb93a386Sopenharmony_ci    sksg::InvalidationController       fInvalController;
47cb93a386Sopenharmony_ci    std::vector<float>                 fFrameTimes;
48cb93a386Sopenharmony_ci    SkSize                             fWinSize            = SkSize::MakeEmpty();
49cb93a386Sopenharmony_ci    double                             fTimeBase           = 0,
50cb93a386Sopenharmony_ci                                       fFrameRate          = 0;
51cb93a386Sopenharmony_ci    const char*                        fFrameRateLabel     = nullptr;
52cb93a386Sopenharmony_ci    float                              fCurrentFrame       = 0;
53cb93a386Sopenharmony_ci    bool                               fShowAnimationInval = false,
54cb93a386Sopenharmony_ci                                       fShowAnimationStats = false,
55cb93a386Sopenharmony_ci                                       fShowUI             = false,
56cb93a386Sopenharmony_ci                                       fDraggingProgress   = false,
57cb93a386Sopenharmony_ci                                       fPreferGlyphPaths   = false;
58cb93a386Sopenharmony_ci
59cb93a386Sopenharmony_ci    using INHERITED = Slide;
60cb93a386Sopenharmony_ci};
61cb93a386Sopenharmony_ci
62cb93a386Sopenharmony_ci#endif // SK_ENABLE_SKOTTIE
63cb93a386Sopenharmony_ci
64cb93a386Sopenharmony_ci#endif // SkottieSlide_DEFINED
65