| /* | |
| * Copyright 2022 Google LLC | |
| * | |
| * 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; | |
| } |