1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2018 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SlideDir_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SlideDir_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPoint.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "modules/sksg/include/SkSGGroup.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "modules/sksg/include/SkSGScene.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "tools/timer/TimeUtils.h" 20*c8dee2aaSAndroid Build Coastguard Worker #include "tools/viewer/Slide.h" 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 23*c8dee2aaSAndroid Build Coastguard Worker #include <vector> 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker class SkCanvas; 26*c8dee2aaSAndroid Build Coastguard Worker class SkString; 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker namespace skui { 29*c8dee2aaSAndroid Build Coastguard Worker enum class InputState; 30*c8dee2aaSAndroid Build Coastguard Worker enum class ModifierKey; 31*c8dee2aaSAndroid Build Coastguard Worker } // namespace skui 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker class SlideDir final : public Slide { 34*c8dee2aaSAndroid Build Coastguard Worker public: 35*c8dee2aaSAndroid Build Coastguard Worker SlideDir(const SkString& name, skia_private::TArray<sk_sp<Slide>>&&, 36*c8dee2aaSAndroid Build Coastguard Worker int columns = kDefaultColumnCount); 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker class Animator; 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker protected: 41*c8dee2aaSAndroid Build Coastguard Worker void load(SkScalar winWidth, SkScalar winHeight) override; 42*c8dee2aaSAndroid Build Coastguard Worker void unload() override; 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker SkISize getDimensions() const override; 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker void draw(SkCanvas*) override; 47*c8dee2aaSAndroid Build Coastguard Worker bool animate(double) override; 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker bool onChar(SkUnichar) override; 50*c8dee2aaSAndroid Build Coastguard Worker bool onMouse(SkScalar x, SkScalar y, skui::InputState, skui::ModifierKey modifiers) override; 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker private: 53*c8dee2aaSAndroid Build Coastguard Worker struct Rec; 54*c8dee2aaSAndroid Build Coastguard Worker class FocusController; 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker static constexpr int kDefaultColumnCount = 4; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker const Rec* findCell(float x, float y) const; 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker const skia_private::TArray<sk_sp<Slide>> fSlides; 61*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<FocusController> fFocusController; 62*c8dee2aaSAndroid Build Coastguard Worker const int fColumns; 63*c8dee2aaSAndroid Build Coastguard Worker 64*c8dee2aaSAndroid Build Coastguard Worker std::vector<Rec> fRecs; 65*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<sksg::Scene> fScene; 66*c8dee2aaSAndroid Build Coastguard Worker std::vector<sk_sp<Animator>> fSceneAnimators; 67*c8dee2aaSAndroid Build Coastguard Worker sk_sp<sksg::Group> fRoot; 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker SkSize fWinSize = SkSize::MakeEmpty(); 70*c8dee2aaSAndroid Build Coastguard Worker SkSize fCellSize = SkSize::MakeEmpty(); 71*c8dee2aaSAndroid Build Coastguard Worker TimeUtils::MSec fTimeBase = 0; 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker const Rec* fTrackingCell = nullptr; 74*c8dee2aaSAndroid Build Coastguard Worker SkPoint fTrackingPos = SkPoint::Make(0, 0); 75*c8dee2aaSAndroid Build Coastguard Worker }; 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker #endif // SlideDir_DEFINED 78