/* * 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; }