blob: f391a245993488e386c860441570b34dfc11341c [file] [log] [blame]
Florin Malita76a076b2018-02-15 18:40:48 -05001/*
2 * Copyright 2018 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SlideDir_DEFINED
9#define SlideDir_DEFINED
10
11#include "Slide.h"
12
13#include "SkTArray.h"
14
15class SkString;
16
Florin Malita65fce9e2018-02-19 13:25:18 -050017namespace sksg {
18
19class Group;
20class Scene;
21
22}
Florin Malita76a076b2018-02-15 18:40:48 -050023
24class SlideDir final : public Slide {
25public:
26 SlideDir(const SkString& name, SkTArray<sk_sp<Slide>, true>&&,
27 int columns = kDefaultColumnCount);
28
29protected:
30 void load(SkScalar winWidth, SkScalar winHeight) override;
31 void unload() override;
32
33 SkISize getDimensions() const override;
34
35 void draw(SkCanvas*) override;
36 bool animate(const SkAnimTimer&) override;
37
38 bool onChar(SkUnichar) override;
39 bool onMouse(SkScalar x, SkScalar y, sk_app::Window::InputState, uint32_t modifiers) override;
40
41private:
Florin Malita65fce9e2018-02-19 13:25:18 -050042 struct Rec;
43 class FocusController;
44
Florin Malita76a076b2018-02-15 18:40:48 -050045 static constexpr int kDefaultColumnCount = 4;
46
Florin Malita65fce9e2018-02-19 13:25:18 -050047 const Rec* findCell(float x, float y) const;
Florin Malita76a076b2018-02-15 18:40:48 -050048
49 const SkTArray<sk_sp<Slide>, true> fSlides;
Florin Malita65fce9e2018-02-19 13:25:18 -050050 std::unique_ptr<FocusController> fFocusController;
Florin Malita76a076b2018-02-15 18:40:48 -050051 const int fColumns;
52
Florin Malita65fce9e2018-02-19 13:25:18 -050053 SkTArray<Rec, true> fRecs;
54 std::unique_ptr<sksg::Scene> fScene;
55 sk_sp<sksg::Group> fRoot;
Florin Malita76a076b2018-02-15 18:40:48 -050056
Florin Malita65fce9e2018-02-19 13:25:18 -050057 SkSize fWinSize = SkSize::MakeEmpty();
58 SkSize fCellSize = SkSize::MakeEmpty();
59 SkMSec fTimeBase = 0;
60
61 const Rec* fTrackingCell = nullptr;
62 SkPoint fTrackingPos = SkPoint::Make(0, 0);
Florin Malita76a076b2018-02-15 18:40:48 -050063
64 using INHERITED = Slide;
65};
66
67#endif // SlideDir_DEFINED