1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2021 Google LLC
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 MSKPSlide_DEFINED
9cb93a386Sopenharmony_ci#define MSKPSlide_DEFINED
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci#include "tools/MSKPPlayer.h"
12cb93a386Sopenharmony_ci#include "tools/viewer/Slide.h"
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_ciclass SkStreamSeekable;
15cb93a386Sopenharmony_ci
16cb93a386Sopenharmony_ciclass MSKPSlide : public Slide {
17cb93a386Sopenharmony_cipublic:
18cb93a386Sopenharmony_ci    MSKPSlide(const SkString& name, const SkString& path);
19cb93a386Sopenharmony_ci    MSKPSlide(const SkString& name, std::unique_ptr<SkStreamSeekable>);
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_ci    SkISize getDimensions() const override;
22cb93a386Sopenharmony_ci
23cb93a386Sopenharmony_ci    void draw(SkCanvas* canvas) override;
24cb93a386Sopenharmony_ci    bool animate(double nanos) override;
25cb93a386Sopenharmony_ci    void load(SkScalar winWidth, SkScalar winHeight) override;
26cb93a386Sopenharmony_ci    void unload() override;
27cb93a386Sopenharmony_ci    void gpuTeardown() override;
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_ciprivate:
30cb93a386Sopenharmony_ci    // Call if layers need to be redrawn because we've looped playback or UI interaction.
31cb93a386Sopenharmony_ci    void redrawLayers();
32cb93a386Sopenharmony_ci
33cb93a386Sopenharmony_ci    std::unique_ptr<SkStreamSeekable> fStream;
34cb93a386Sopenharmony_ci    std::unique_ptr<MSKPPlayer>       fPlayer;
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_ci    int    fFrame         = 0;
37cb93a386Sopenharmony_ci    int    fFPS           = 15;
38cb93a386Sopenharmony_ci    bool   fPaused        = false;
39cb93a386Sopenharmony_ci    double fLastFrameTime = -1;
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_ci    bool fShowFrameBounds = false;
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci    // Default to transparent black, which is correct for Android MSKPS.
44cb93a386Sopenharmony_ci    float fBackgroundColor[4] = {0, 0, 0, 0};
45cb93a386Sopenharmony_ci
46cb93a386Sopenharmony_ci    std::vector<int>              fAllLayerIDs;
47cb93a386Sopenharmony_ci    std::vector<std::vector<int>> fFrameLayerIDs;
48cb93a386Sopenharmony_ci    std::vector<SkString>         fLayerIDStrings;
49cb93a386Sopenharmony_ci    int                           fDrawLayerID = -1;  // -1 means just draw the root layer
50cb93a386Sopenharmony_ci    bool                          fListAllLayers = true;
51cb93a386Sopenharmony_ci
52cb93a386Sopenharmony_ci    using INHERITED = Slide;
53cb93a386Sopenharmony_ci};
54cb93a386Sopenharmony_ci
55cb93a386Sopenharmony_ci#endif
56