/* * 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 "tools/viewer/Slide.h" #include "include/private/SkTArray.h" #include #include class SkString; namespace sksg { class Group; class Scene; } class SlideDir final : public Slide { public: SlideDir(const SkString& name, SkTArray>&&, 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 SkTArray> fSlides; std::unique_ptr fFocusController; const int fColumns; SkTArray fRecs; std::unique_ptr fScene; std::vector> fSceneAnimators; sk_sp fRoot; SkSize fWinSize = SkSize::MakeEmpty(); SkSize fCellSize = SkSize::MakeEmpty(); SkMSec fTimeBase = 0; const Rec* fTrackingCell = nullptr; SkPoint fTrackingPos = SkPoint::Make(0, 0); using INHERITED = Slide; }; #endif // SlideDir_DEFINED