1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2018 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 SlideDir_DEFINED 9cb93a386Sopenharmony_ci#define SlideDir_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "tools/viewer/Slide.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci#include "include/private/SkTArray.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci#include <memory> 16cb93a386Sopenharmony_ci#include <vector> 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciclass SkString; 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_cinamespace sksg { 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ciclass Group; 23cb93a386Sopenharmony_ciclass Scene; 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ci} // namespace sksg 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ciclass SlideDir final : public Slide { 28cb93a386Sopenharmony_cipublic: 29cb93a386Sopenharmony_ci SlideDir(const SkString& name, SkTArray<sk_sp<Slide>>&&, 30cb93a386Sopenharmony_ci int columns = kDefaultColumnCount); 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci class Animator; 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ciprotected: 35cb93a386Sopenharmony_ci void load(SkScalar winWidth, SkScalar winHeight) override; 36cb93a386Sopenharmony_ci void unload() override; 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci SkISize getDimensions() const override; 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci void draw(SkCanvas*) override; 41cb93a386Sopenharmony_ci bool animate(double) override; 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci bool onChar(SkUnichar) override; 44cb93a386Sopenharmony_ci bool onMouse(SkScalar x, SkScalar y, skui::InputState, skui::ModifierKey modifiers) override; 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ciprivate: 47cb93a386Sopenharmony_ci struct Rec; 48cb93a386Sopenharmony_ci class FocusController; 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci static constexpr int kDefaultColumnCount = 4; 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci const Rec* findCell(float x, float y) const; 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci const SkTArray<sk_sp<Slide>> fSlides; 55cb93a386Sopenharmony_ci std::unique_ptr<FocusController> fFocusController; 56cb93a386Sopenharmony_ci const int fColumns; 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_ci SkTArray<Rec, true> fRecs; 59cb93a386Sopenharmony_ci std::unique_ptr<sksg::Scene> fScene; 60cb93a386Sopenharmony_ci std::vector<sk_sp<Animator>> fSceneAnimators; 61cb93a386Sopenharmony_ci sk_sp<sksg::Group> fRoot; 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_ci SkSize fWinSize = SkSize::MakeEmpty(); 64cb93a386Sopenharmony_ci SkSize fCellSize = SkSize::MakeEmpty(); 65cb93a386Sopenharmony_ci SkMSec fTimeBase = 0; 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci const Rec* fTrackingCell = nullptr; 68cb93a386Sopenharmony_ci SkPoint fTrackingPos = SkPoint::Make(0, 0); 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ci using INHERITED = Slide; 71cb93a386Sopenharmony_ci}; 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ci#endif // SlideDir_DEFINED 74