56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
|
|
/*
|
||
|
|
* 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;
|
||
|
|
}
|