7#include <unordered_map>
68 bool has_pending_callbacks()
const {
return !pending_callbacks_.empty(); }
69 void clear_pending_callbacks() { pending_callbacks_.clear(); }
70 void remove_relationships_to(
const GestureRecognizer& other)
noexcept;
71 void dispatch_pending_callbacks();
73 View* owner_ =
nullptr;
75 std::vector<GestureRecognizer*> require_failures_;
76 std::vector<GestureRecognizer*> simultaneous_;
77 std::vector<GestureState> pending_callbacks_;
98 int required_tap_count_ = 1;
101 bool pressed_ =
false;
102 Point press_position_{};
103 Point last_position_{};
104 double press_time_ = 0.0;
105 double previous_release_time_ = -1.0;
106 float max_movement_ = 8.0f;
107 double max_press_duration_ = 0.35;
108 double max_interval_ = 0.30;
125 void maybe_begin(
double timestamp_seconds);
128 bool pressed_ =
false;
129 Point press_position_{};
130 double press_time_ = 0.0;
131 float max_movement_ = 8.0f;
132 double min_duration_ = 0.50;
149 bool pressed_ =
false;
150 Point start_position_{};
151 Point last_position_{};
152 double last_time_ = 0.0;
153 Point translation_{};
155 float min_distance_ = 5.0f;
173 bool pressed_ =
false;
174 Point start_position_{};
175 Point last_position_{};
176 double start_time_ = 0.0;
177 double last_time_ = 0.0;
178 Point translation_{};
180 float min_distance_ = 30.0f;
181 float min_velocity_ = 300.0f;
199 bool pressed_ =
false;
200 Point start_position_{};
201 Point last_position_{};
202 double start_time_ = 0.0;
203 double last_time_ = 0.0;
204 Point translation_{};
206 float min_velocity_ = 800.0f;
207 double max_duration_ = 0.50;
214 float scale()
const {
return scale_; }
229 bool pair_metrics(
float* distance, Point*
center)
const;
232 std::unordered_map<int, Touch> touches_;
233 float initial_distance_ = 0.0f;
234 float last_scale_ = 1.0f;
236 float delta_scale_ = 0.0f;
238 float min_scale_delta_ = 0.025f;
260 bool pair_metrics(
float* angle, Point*
center)
const;
263 std::unordered_map<int, Touch> touches_;
264 float initial_angle_ = 0.0f;
265 float last_rotation_ = 0.0f;
266 float rotation_ = 0.0f;
267 float delta_rotation_ = 0.0f;
269 float min_rotation_ = 0.035f;
280 double timestamp_seconds = -1.0);
289 bool claimed_pointer_ = false;
293 View* owner =
nullptr;
297 struct PointerSession {
299 std::vector<Candidate> candidates;
306 using SessionMap = std::unordered_map<int, std::shared_ptr<PointerSession>>;
308 std::shared_ptr<PointerSession> start_session(View& root,
309 const MouseEvent& root_event);
310 bool session_is_live(
const PointerSession& session)
const;
311 void feed_session(View& root, PointerSession& session,
312 const MouseEvent& root_event,
313 const GestureContext& context);
314 void resolve_session(PointerSession& session,
const MouseEvent& root_event);
315 void finish_session_if_needed(PointerSession& session,
316 const MouseEvent& root_event);
317 bool active_recognizers_allow(
const PointerSession& session,
319 void fail_conflicting_candidates(
const Candidate& active_candidate);
321 SessionMap sessions_;
Definition gesture.hpp:184
void set_max_duration(double seconds)
Definition gesture.hpp:187
void set_min_velocity(float points_per_second)
Definition gesture.hpp:186
void on_pointer_event(const MouseEvent &event, const GestureContext &context) override
Point translation() const
Definition gesture.hpp:189
Point velocity() const
Definition gesture.hpp:190
Definition gesture.hpp:272
bool claimed_pointer() const
True when a recognizer ACTIVELY claimed the last pointer event, as opposed to merely being a candidat...
Definition gesture.hpp:277
bool handle_pointer_event(View &root, const MouseEvent &root_event, double timestamp_seconds=-1.0)
void abandon() noexcept
Drop active recognition sessions without invoking user callbacks.
void advance_time(View &root, double timestamp_seconds=-1.0)
bool wants_time_updates() const
Definition gesture.hpp:28
friend class View
Definition gesture.hpp:49
Callback on_changed
Definition gesture.hpp:44
Callback on_cancelled
Definition gesture.hpp:46
friend class GestureArbiter
Definition gesture.hpp:50
virtual bool keep_possible_after_release() const
Definition gesture.hpp:58
bool requires_failure_of(const GestureRecognizer &other) const
void require_to_fail(GestureRecognizer &other)
GestureState state() const
Definition gesture.hpp:34
virtual void on_time_advanced(const GestureContext &context)
Definition gesture.hpp:54
Callback on_ended
Definition gesture.hpp:45
View * owner() const
Definition gesture.hpp:35
virtual void on_reset()
Definition gesture.hpp:57
void transition_to(GestureState state)
virtual void on_pointer_event(const MouseEvent &event, const GestureContext &context)=0
virtual bool wants_time_updates() const
Definition gesture.hpp:59
std::function< void(GestureRecognizer &)> Callback
Definition gesture.hpp:30
bool can_recognize_simultaneously_with(const GestureRecognizer &other) const
virtual ~GestureRecognizer()=default
Callback on_began
Definition gesture.hpp:43
void allow_simultaneous_with(GestureRecognizer &other)
Definition gesture.hpp:111
bool wants_time_updates() const override
void set_max_movement(float points)
Definition gesture.hpp:115
void on_pointer_event(const MouseEvent &event, const GestureContext &context) override
void on_time_advanced(const GestureContext &context) override
Point position() const
Definition gesture.hpp:113
void set_min_duration(double seconds)
Definition gesture.hpp:114
Definition gesture.hpp:135
void set_min_distance(float points)
Definition gesture.hpp:137
void on_pointer_event(const MouseEvent &event, const GestureContext &context) override
Point translation() const
Definition gesture.hpp:139
Point velocity() const
Definition gesture.hpp:140
Definition gesture.hpp:210
Point center() const
Definition gesture.hpp:216
void set_min_scale_delta(float delta)
Definition gesture.hpp:212
float scale() const
Definition gesture.hpp:214
float delta_scale() const
Definition gesture.hpp:215
void on_pointer_event(const MouseEvent &event, const GestureContext &context) override
Definition gesture.hpp:241
void set_min_rotation(float radians)
Definition gesture.hpp:243
void on_pointer_event(const MouseEvent &event, const GestureContext &context) override
float delta_rotation() const
Definition gesture.hpp:246
float rotation() const
Definition gesture.hpp:245
Point center() const
Definition gesture.hpp:247
Definition gesture.hpp:158
Point translation() const
Definition gesture.hpp:163
void set_min_distance(float points)
Definition gesture.hpp:160
void on_pointer_event(const MouseEvent &event, const GestureContext &context) override
void set_min_velocity(float points_per_second)
Definition gesture.hpp:161
Point velocity() const
Definition gesture.hpp:164
void set_required_tap_count(int count)
Point position() const
Definition gesture.hpp:85
void set_max_press_duration(double seconds)
Definition gesture.hpp:88
bool keep_possible_after_release() const override
int required_tap_count() const
Definition gesture.hpp:84
void set_max_movement(float points)
Definition gesture.hpp:87
TapRecognizer(int required_tap_count=1)
void set_max_interval(double seconds)
Definition gesture.hpp:89
void on_pointer_event(const MouseEvent &event, const GestureContext &context) override
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
@ candidate
Definition waveform_editor_primitives.hpp:193
GestureState
Definition gesture.hpp:14
@ failed
Definition gesture.hpp:20
@ cancelled
Definition gesture.hpp:19
@ possible
Definition gesture.hpp:15
@ began
Definition gesture.hpp:16
@ changed
Definition gesture.hpp:17
@ ended
Definition gesture.hpp:18
Definition gesture.hpp:23
double timestamp_seconds
Definition gesture.hpp:24
Point root_position
Definition gesture.hpp:25
Rich mouse/pointer event with position, modifiers, button state, pointer ID, and stylus properties.
Definition input_events.hpp:104
Definition geometry.hpp:20