| /* |
| * Copyright 2022 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "tools/viewer/ClickHandlerSlide.h" |
| |
| bool ClickHandlerSlide::onMouse(SkScalar x, SkScalar y, |
| skui::InputState clickState, |
| skui::ModifierKey modifierKeys) { |
| auto dispatch = [this](Click* c) { |
| return c->fHasFunc ? c->fFunc(c) : this->onClick(c); |
| }; |
| |
| switch (clickState) { |
| case skui::InputState::kDown: |
| fClick = nullptr; |
| fClick.reset(this->onFindClickHandler(x, y, modifierKeys)); |
| if (!fClick) { |
| return false; |
| } |
| fClick->fPrev = fClick->fCurr = fClick->fOrig = {x, y}; |
| fClick->fState = skui::InputState::kDown; |
| fClick->fModifierKeys = modifierKeys; |
| dispatch(fClick.get()); |
| return true; |
| case skui::InputState::kMove: |
| if (fClick) { |
| fClick->fPrev = fClick->fCurr; |
| fClick->fCurr = {x, y}; |
| fClick->fState = skui::InputState::kMove; |
| fClick->fModifierKeys = modifierKeys; |
| return dispatch(fClick.get()); |
| } |
| return false; |
| case skui::InputState::kUp: |
| if (fClick) { |
| fClick->fPrev = fClick->fCurr; |
| fClick->fCurr = {x, y}; |
| fClick->fState = skui::InputState::kUp; |
| fClick->fModifierKeys = modifierKeys; |
| bool result = dispatch(fClick.get()); |
| fClick = nullptr; |
| return result; |
| } |
| return false; |
| default: |
| // Ignore other cases |
| SK_ABORT("Unexepected InputState"); |
| } |
| |
| SkUNREACHABLE; |
| } |