| /* | |
| * Copyright 2022 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef ClickHandlerSlide_DEFINED | |
| #define ClickHandlerSlide_DEFINED | |
| #include "tools/SkMetaData.h" | |
| #include "tools/viewer/Slide.h" | |
| #include "include/core/SkPoint.h" | |
| #include <functional> | |
| /** | |
| * Provides a higher level abstraction for click handling than the Slide base class. A Click object | |
| * is is used to track the state of the mouse over time. | |
| */ | |
| class ClickHandlerSlide : public Slide { | |
| public: | |
| // Click handling | |
| class Click { | |
| public: | |
| Click() {} | |
| Click(std::function<bool(Click*)> f) : fFunc(std::move(f)), fHasFunc(true) {} | |
| virtual ~Click() = default; | |
| SkPoint fOrig = {0, 0}; | |
| SkPoint fPrev = {0, 0}; | |
| SkPoint fCurr = {0, 0}; | |
| skui::InputState fState = skui::InputState::kDown; | |
| skui::ModifierKey fModifierKeys = skui::ModifierKey::kNone; | |
| SkMetaData fMeta; | |
| std::function<bool(Click*)> fFunc; | |
| bool fHasFunc = false; | |
| }; | |
| bool onMouse(SkScalar x, SkScalar y, | |
| skui::InputState clickState, | |
| skui::ModifierKey modifierKeys) final; | |
| protected: | |
| /** | |
| * Return a Click object to handle the click. onClick will be called repeatedly with the latest | |
| * mouse state tracked on the Click object until it returns false. | |
| */ | |
| virtual Click* onFindClickHandler(SkScalar x, SkScalar y, skui::ModifierKey modi) = 0; | |
| /** Override to track clicks. Return true as long as you want to track the pen/mouse. */ | |
| virtual bool onClick(Click*) = 0; | |
| private: | |
| std::unique_ptr<Click> fClick; | |
| }; | |
| #endif |