| /* |
| * Copyright 2018 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SlideDir_DEFINED |
| #define SlideDir_DEFINED |
| |
| #include "include/core/SkPoint.h" |
| #include "include/core/SkRefCnt.h" |
| #include "include/core/SkScalar.h" |
| #include "include/core/SkSize.h" |
| #include "include/core/SkTypes.h" |
| #include "include/private/base/SkTArray.h" |
| #include "modules/sksg/include/SkSGGroup.h" |
| #include "modules/sksg/include/SkSGScene.h" |
| #include "tools/viewer/Slide.h" |
| |
| #include <memory> |
| #include <vector> |
| |
| class SkCanvas; |
| class SkString; |
| |
| namespace skui { |
| enum class InputState; |
| enum class ModifierKey; |
| } // namespace skui |
| |
| class SlideDir final : public Slide { |
| public: |
| SlideDir(const SkString& name, skia_private::TArray<sk_sp<Slide>>&&, |
| int columns = kDefaultColumnCount); |
| |
| class Animator; |
| |
| protected: |
| void load(SkScalar winWidth, SkScalar winHeight) override; |
| void unload() override; |
| |
| SkISize getDimensions() const override; |
| |
| void draw(SkCanvas*) override; |
| bool animate(double) override; |
| |
| bool onChar(SkUnichar) override; |
| bool onMouse(SkScalar x, SkScalar y, skui::InputState, skui::ModifierKey modifiers) override; |
| |
| private: |
| struct Rec; |
| class FocusController; |
| |
| static constexpr int kDefaultColumnCount = 4; |
| |
| const Rec* findCell(float x, float y) const; |
| |
| const skia_private::TArray<sk_sp<Slide>> fSlides; |
| std::unique_ptr<FocusController> fFocusController; |
| const int fColumns; |
| |
| std::vector<Rec> fRecs; |
| std::unique_ptr<sksg::Scene> fScene; |
| std::vector<sk_sp<Animator>> fSceneAnimators; |
| sk_sp<sksg::Group> fRoot; |
| |
| SkSize fWinSize = SkSize::MakeEmpty(); |
| SkSize fCellSize = SkSize::MakeEmpty(); |
| SkMSec fTimeBase = 0; |
| |
| const Rec* fTrackingCell = nullptr; |
| SkPoint fTrackingPos = SkPoint::Make(0, 0); |
| }; |
| |
| #endif // SlideDir_DEFINED |