blob: c2320ba40b30997fee908108e64b7a332555bc65 [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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "tools/viewer/SampleSlide.h"
jvanverthc7027ab2016-06-16 09:52:35 -07009
Mike Kleinc0bd9f92019-04-23 12:05:21 -050010#include "include/core/SkCanvas.h"
11#include "include/core/SkStream.h"
12#include "src/core/SkOSFile.h"
jvanverthc7027ab2016-06-16 09:52:35 -070013
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)
Hal Canary8a027312019-07-03 10:55:44 -040018 , fClick(nullptr)
19{
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040020 sk_sp<Sample> sample(factory());
Hal Canary8a027312019-07-03 10:55:44 -040021 fName = sample->name();
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
Ben Wagner21151122018-09-04 18:35:20 -040026SkISize SampleSlide::getDimensions() const {
27 return SkISize::Make(SkScalarCeilToInt(fSample->width()), SkScalarCeilToInt(fSample->height()));
28}
29
jvanverthc7027ab2016-06-16 09:52:35 -070030void SampleSlide::draw(SkCanvas* canvas) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040031 SkASSERT(fSample);
32 fSample->draw(canvas);
jvanverthc7027ab2016-06-16 09:52:35 -070033}
34
35void SampleSlide::load(SkScalar winWidth, SkScalar winHeight) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040036 fSample.reset(fSampleFactory());
37 fSample->setSize(winWidth, winHeight);
jvanverthc7027ab2016-06-16 09:52:35 -070038}
39
40void SampleSlide::unload() {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040041 fSample.reset();
jvanverthc7027ab2016-06-16 09:52:35 -070042}
43
Jim Van Verth6f449692017-02-14 15:16:46 -050044bool SampleSlide::onChar(SkUnichar c) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040045 if (!fSample) {
Christopher Dalton443ec1b2017-02-24 13:22:53 -070046 return false;
47 }
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040048 Sample::Event evt(Sample::kCharEvtName);
Jim Van Verth6f449692017-02-14 15:16:46 -050049 evt.setFast32(c);
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040050 return fSample->doQuery(&evt);
Jim Van Verth6f449692017-02-14 15:16:46 -050051}
52
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040053bool SampleSlide::onMouse(SkScalar x, SkScalar y, Window::InputState state,
54 uint32_t modifiers) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040055 // map to Sample::Click modifiers
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040056 unsigned modifierKeys = 0;
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040057 modifierKeys |= (modifiers & Window::kShift_ModifierKey) ? Sample::Click::kShift_ModifierKey : 0;
58 modifierKeys |= (modifiers & Window::kControl_ModifierKey) ? Sample::Click::kControl_ModifierKey : 0;
59 modifierKeys |= (modifiers & Window::kOption_ModifierKey) ? Sample::Click::kOption_ModifierKey : 0;
60 modifierKeys |= (modifiers & Window::kCommand_ModifierKey) ? Sample::Click::kCommand_ModifierKey : 0;
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040061
62 bool handled = false;
63 switch (state) {
64 case Window::kDown_InputState: {
65 delete fClick;
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040066 fClick = fSample->findClickHandler(SkIntToScalar(x), SkIntToScalar(y), modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040067 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040068 Sample::DoClickDown(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040069 handled = true;
70 }
71 break;
72 }
73 case Window::kMove_InputState: {
74 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040075 Sample::DoClickMoved(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040076 handled = true;
77 }
78 break;
79 }
80 case Window::kUp_InputState: {
81 if (fClick) {
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040082 Sample::DoClickUp(fClick, x, y, modifierKeys);
Jim Van Verthc9e7f9c2017-11-02 09:46:49 -040083 delete fClick;
84 fClick = nullptr;
85 handled = true;
86 }
87 break;
88 }
89 }
90
91 return handled;
92}