1 /*
2 * Copyright 2022 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 "tools/viewer/ClickHandlerSlide.h"
9
onMouse(SkScalar x,SkScalar y,skui::InputState clickState,skui::ModifierKey modifierKeys)10 bool ClickHandlerSlide::onMouse(SkScalar x, SkScalar y,
11 skui::InputState clickState,
12 skui::ModifierKey modifierKeys) {
13 auto dispatch = [this](Click* c) {
14 return c->fHasFunc ? c->fFunc(c) : this->onClick(c);
15 };
16
17 switch (clickState) {
18 case skui::InputState::kDown:
19 fClick = nullptr;
20 fClick.reset(this->onFindClickHandler(x, y, modifierKeys));
21 if (!fClick) {
22 return false;
23 }
24 fClick->fPrev = fClick->fCurr = fClick->fOrig = {x, y};
25 fClick->fState = skui::InputState::kDown;
26 fClick->fModifierKeys = modifierKeys;
27 dispatch(fClick.get());
28 return true;
29 case skui::InputState::kMove:
30 if (fClick) {
31 fClick->fPrev = fClick->fCurr;
32 fClick->fCurr = {x, y};
33 fClick->fState = skui::InputState::kMove;
34 fClick->fModifierKeys = modifierKeys;
35 return dispatch(fClick.get());
36 }
37 return false;
38 case skui::InputState::kUp:
39 if (fClick) {
40 fClick->fPrev = fClick->fCurr;
41 fClick->fCurr = {x, y};
42 fClick->fState = skui::InputState::kUp;
43 fClick->fModifierKeys = modifierKeys;
44 bool result = dispatch(fClick.get());
45 fClick = nullptr;
46 return result;
47 }
48 return false;
49 default:
50 // Ignore other cases
51 SK_ABORT("Unexepected InputState");
52 }
53
54 SkUNREACHABLE;
55 }
56