blob: 13597f741f1fd5a56aa86ccdff71f31b17e4ee6f [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"
11#include "SkCommonFlags.h"
12#include "SkOSFile.h"
13#include "SkStream.h"
14
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040015using namespace sk_app;
16
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040017SampleSlide::SampleSlide(const SampleFactory factory)
18 : fSampleFactory(factory)
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040019 , fClick(nullptr) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040020 sk_sp<Sample> sample(factory());
21 Sample::RequestTitle(sample.get(), &fName);
jvanverthc7027ab2016-06-16 09:52:35 -070022}
23
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040024SampleSlide::~SampleSlide() { delete fClick; }
jvanverthc7027ab2016-06-16 09:52:35 -070025
26void SampleSlide::draw(SkCanvas* canvas) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040027 SkASSERT(fSample);
28 fSample->draw(canvas);
jvanverthc7027ab2016-06-16 09:52:35 -070029}
30
31void SampleSlide::load(SkScalar winWidth, SkScalar winHeight) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040032 fSample.reset(fSampleFactory());
33 fSample->setSize(winWidth, winHeight);
jvanverthc7027ab2016-06-16 09:52:35 -070034}
35
36void SampleSlide::unload() {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040037 fSample.reset();
jvanverthc7027ab2016-06-16 09:52:35 -070038}
39
Jim Van Verth6f449692017-02-14 15:16:46 -050040bool SampleSlide::onChar(SkUnichar c) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040041 if (!fSample) {
Christopher Dalton443ec1b2017-02-24 13:22:53 -070042 return false;
43 }
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040044 Sample::Event evt(Sample::kCharEvtName);
Jim Van Verth6f449692017-02-14 15:16:46 -050045 evt.setFast32(c);
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040046 return fSample->doQuery(&evt);
Jim Van Verth6f449692017-02-14 15:16:46 -050047}
48
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040049bool SampleSlide::onMouse(SkScalar x, SkScalar y, Window::InputState state,
50 uint32_t modifiers) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040051 // map to Sample::Click modifiers
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040052 unsigned modifierKeys = 0;
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040053 modifierKeys |= (modifiers & Window::kShift_ModifierKey) ? Sample::Click::kShift_ModifierKey : 0;
54 modifierKeys |= (modifiers & Window::kControl_ModifierKey) ? Sample::Click::kControl_ModifierKey : 0;
55 modifierKeys |= (modifiers & Window::kOption_ModifierKey) ? Sample::Click::kOption_ModifierKey : 0;
56 modifierKeys |= (modifiers & Window::kCommand_ModifierKey) ? Sample::Click::kCommand_ModifierKey : 0;
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040057
58 bool handled = false;
59 switch (state) {
60 case Window::kDown_InputState: {
61 delete fClick;
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040062 fClick = fSample->findClickHandler(SkIntToScalar(x), SkIntToScalar(y), modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040063 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040064 Sample::DoClickDown(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040065 handled = true;
66 }
67 break;
68 }
69 case Window::kMove_InputState: {
70 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040071 Sample::DoClickMoved(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040072 handled = true;
73 }
74 break;
75 }
76 case Window::kUp_InputState: {
77 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040078 Sample::DoClickUp(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040079 delete fClick;
80 fClick = nullptr;
81 handled = true;
82 }
83 break;
84 }
85 }
86
87 return handled;
88}