1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2022 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef ClickHandlerSlide_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define ClickHandlerSlide_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "tools/SkMetaData.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "tools/viewer/Slide.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPoint.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker #include <functional> 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker /** 19*c8dee2aaSAndroid Build Coastguard Worker * Provides a higher level abstraction for click handling than the Slide base class. A Click object 20*c8dee2aaSAndroid Build Coastguard Worker * is is used to track the state of the mouse over time. 21*c8dee2aaSAndroid Build Coastguard Worker */ 22*c8dee2aaSAndroid Build Coastguard Worker class ClickHandlerSlide : public Slide { 23*c8dee2aaSAndroid Build Coastguard Worker public: 24*c8dee2aaSAndroid Build Coastguard Worker // Click handling 25*c8dee2aaSAndroid Build Coastguard Worker class Click { 26*c8dee2aaSAndroid Build Coastguard Worker public: Click()27*c8dee2aaSAndroid Build Coastguard Worker Click() {} Click(std::function<bool (Click *)> f)28*c8dee2aaSAndroid Build Coastguard Worker Click(std::function<bool(Click*)> f) : fFunc(std::move(f)), fHasFunc(true) {} 29*c8dee2aaSAndroid Build Coastguard Worker virtual ~Click() = default; 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker SkPoint fOrig = {0, 0}; 32*c8dee2aaSAndroid Build Coastguard Worker SkPoint fPrev = {0, 0}; 33*c8dee2aaSAndroid Build Coastguard Worker SkPoint fCurr = {0, 0}; 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker skui::InputState fState = skui::InputState::kDown; 36*c8dee2aaSAndroid Build Coastguard Worker skui::ModifierKey fModifierKeys = skui::ModifierKey::kNone; 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker SkMetaData fMeta; 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker std::function<bool(Click*)> fFunc; 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker bool fHasFunc = false; 43*c8dee2aaSAndroid Build Coastguard Worker }; 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker bool onMouse(SkScalar x, SkScalar y, 46*c8dee2aaSAndroid Build Coastguard Worker skui::InputState clickState, 47*c8dee2aaSAndroid Build Coastguard Worker skui::ModifierKey modifierKeys) final; 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker protected: 50*c8dee2aaSAndroid Build Coastguard Worker /** 51*c8dee2aaSAndroid Build Coastguard Worker * Return a Click object to handle the click. onClick will be called repeatedly with the latest 52*c8dee2aaSAndroid Build Coastguard Worker * mouse state tracked on the Click object until it returns false. 53*c8dee2aaSAndroid Build Coastguard Worker */ 54*c8dee2aaSAndroid Build Coastguard Worker virtual Click* onFindClickHandler(SkScalar x, SkScalar y, skui::ModifierKey modi) = 0; 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker /** Override to track clicks. Return true as long as you want to track the pen/mouse. */ 57*c8dee2aaSAndroid Build Coastguard Worker virtual bool onClick(Click*) = 0; 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker private: 60*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<Click> fClick; 61*c8dee2aaSAndroid Build Coastguard Worker }; 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker #endif 64