blob: f48f1dc7d9697493e4b2d08912c47497fd8eca20 [file] [log] [blame]
jvanverthc7027ab2016-06-16 09:52:35 -07001/*
2* Copyright 2016 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#include "SampleSlide.h"
9
10#include "SkCanvas.h"
jvanverthc7027ab2016-06-16 09:52:35 -070011#include "SkOSFile.h"
12#include "SkStream.h"
13
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040014using namespace sk_app;
15
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040016SampleSlide::SampleSlide(const SampleFactory factory)
17 : fSampleFactory(factory)
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040018 , fClick(nullptr) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040019 sk_sp<Sample> sample(factory());
20 Sample::RequestTitle(sample.get(), &fName);
jvanverthc7027ab2016-06-16 09:52:35 -070021}
22
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040023SampleSlide::~SampleSlide() { delete fClick; }
jvanverthc7027ab2016-06-16 09:52:35 -070024
Ben Wagner21151122018-09-04 18:35:20 -040025SkISize SampleSlide::getDimensions() const {
26 return SkISize::Make(SkScalarCeilToInt(fSample->width()), SkScalarCeilToInt(fSample->height()));
27}
28
jvanverthc7027ab2016-06-16 09:52:35 -070029void SampleSlide::draw(SkCanvas* canvas) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040030 SkASSERT(fSample);
31 fSample->draw(canvas);
jvanverthc7027ab2016-06-16 09:52:35 -070032}
33
34void SampleSlide::load(SkScalar winWidth, SkScalar winHeight) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040035 fSample.reset(fSampleFactory());
36 fSample->setSize(winWidth, winHeight);
jvanverthc7027ab2016-06-16 09:52:35 -070037}
38
39void SampleSlide::unload() {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040040 fSample.reset();
jvanverthc7027ab2016-06-16 09:52:35 -070041}
42
Jim Van Verth6f449692017-02-14 15:16:46 -050043bool SampleSlide::onChar(SkUnichar c) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040044 if (!fSample) {
Christopher Dalton443ec1b2017-02-24 13:22:53 -070045 return false;
46 }
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040047 Sample::Event evt(Sample::kCharEvtName);
Jim Van Verth6f449692017-02-14 15:16:46 -050048 evt.setFast32(c);
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040049 return fSample->doQuery(&evt);
Jim Van Verth6f449692017-02-14 15:16:46 -050050}
51
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040052bool SampleSlide::onMouse(SkScalar x, SkScalar y, Window::InputState state,
53 uint32_t modifiers) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040054 // map to Sample::Click modifiers
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040055 unsigned modifierKeys = 0;
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040056 modifierKeys |= (modifiers & Window::kShift_ModifierKey) ? Sample::Click::kShift_ModifierKey : 0;
57 modifierKeys |= (modifiers & Window::kControl_ModifierKey) ? Sample::Click::kControl_ModifierKey : 0;
58 modifierKeys |= (modifiers & Window::kOption_ModifierKey) ? Sample::Click::kOption_ModifierKey : 0;
59 modifierKeys |= (modifiers & Window::kCommand_ModifierKey) ? Sample::Click::kCommand_ModifierKey : 0;
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040060
61 bool handled = false;
62 switch (state) {
63 case Window::kDown_InputState: {
64 delete fClick;
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040065 fClick = fSample->findClickHandler(SkIntToScalar(x), SkIntToScalar(y), modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040066 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040067 Sample::DoClickDown(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040068 handled = true;
69 }
70 break;
71 }
72 case Window::kMove_InputState: {
73 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040074 Sample::DoClickMoved(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040075 handled = true;
76 }
77 break;
78 }
79 case Window::kUp_InputState: {
80 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040081 Sample::DoClickUp(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040082 delete fClick;
83 fClick = nullptr;
84 handled = true;
85 }
86 break;
87 }
88 }
89
90 return handled;
91}