diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2015-07-01 15:15:41 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2015-07-10 21:47:30 +0200 |
commit | b151898534b08eb8bc0136883d2204c6b612bc36 (patch) | |
tree | b081fed3bcbfa812ae1b107bb99057e20338f125 /clutter | |
parent | 5b8a2a9e156395052a8adda670fdf3fd0d30c591 (diff) | |
download | clutter-b151898534b08eb8bc0136883d2204c6b612bc36.tar.gz |
clutter-event: Add API around touchpad gesture events
These are needed in order to make these events binding friendly
Diffstat (limited to 'clutter')
-rw-r--r-- | clutter/clutter-event.c | 122 | ||||
-rw-r--r-- | clutter/clutter-event.h | 17 |
2 files changed, 139 insertions, 0 deletions
diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c index 3170b9d4c..5f86eb0c7 100644 --- a/clutter/clutter-event.c +++ b/clutter/clutter-event.c @@ -1877,3 +1877,125 @@ clutter_event_remove_filter (guint id) g_warning ("No event filter found for id: %d\n", id); } + +/** + * clutter_event_get_gesture_swipe_finger_count: + * @event: a touchpad swipe event + * + * Returns the number of fingers that is triggering the touchpad gesture. + * + * Returns: the number of fingers swiping. + * + * Since: 1.24 + **/ +guint +clutter_event_get_gesture_swipe_finger_count (const ClutterEvent *event) +{ + g_return_val_if_fail (event != NULL, 0); + g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_SWIPE, 0); + + return event->touchpad_swipe.n_fingers; +} + +/** + * clutter_event_get_gesture_pinch_angle_delta: + * @event: a touchpad pinch event + * + * Returns the angle delta reported by this specific event. + * + * Returns: The angle delta relative to the previous event. + * + * Since: 1.24 + **/ +gdouble +clutter_event_get_gesture_pinch_angle_delta (const ClutterEvent *event) +{ + g_return_val_if_fail (event != NULL, 0); + g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH, 0); + + return event->touchpad_pinch.angle_delta; +} + +/** + * clutter_event_get_gesture_pinch_scale: + * @event: a touchpad pinch event + * + * Returns the current scale as reported by @event, 1.0 being the original + * distance at the time the corresponding event with phase + * %CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN is received. + * is received. + * + * Returns: the current pinch gesture scale + * + * Since: 1.24 + **/ +gdouble +clutter_event_get_gesture_pinch_scale (const ClutterEvent *event) +{ + g_return_val_if_fail (event != NULL, 0); + g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH, 0); + + return event->touchpad_pinch.scale; +} + +/** + * clutter_event_get_gesture_phase: + * @event: a touchpad gesture event + * + * Returns the phase of the event, See #ClutterTouchpadGesturePhase. + * + * Returns: the phase of the gesture event. + **/ +ClutterTouchpadGesturePhase +clutter_event_get_gesture_phase (const ClutterEvent *event) +{ + g_return_val_if_fail (event != NULL, 0); + g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH || + event->type == CLUTTER_TOUCHPAD_SWIPE, 0); + + if (event->type == CLUTTER_TOUCHPAD_PINCH) + return event->touchpad_pinch.phase; + else if (event->type == CLUTTER_TOUCHPAD_SWIPE) + return event->touchpad_swipe.phase; + + /* Shouldn't ever happen */ + return CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN; +}; + +/** + * clutter_event_get_gesture_motion_delta: + * @event: A clutter touchpad gesture event + * @dx: (out) (allow-none): the displacement relative to the pointer + * position in the X axis, or %NULL + * @dy: (out) (allow-none): the displacement relative to the pointer + * position in the Y axis, or %NULL + * + * Returns the gesture motion deltas relative to the current pointer + * position. + * + * Since: 1.24 + **/ +void +clutter_event_get_gesture_motion_delta (const ClutterEvent *event, + gdouble *dx, + gdouble *dy) +{ + g_return_val_if_fail (event != NULL, FALSE); + g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH || + event->type == CLUTTER_TOUCHPAD_SWIPE, FALSE); + + if (event->type == CLUTTER_TOUCHPAD_PINCH) + { + if (dx) + *dx = event->touchpad_pinch.dx; + if (dy) + *dy = event->touchpad_pinch.dy; + } + else if (event->type == CLUTTER_TOUCHPAD_SWIPE) + { + if (dx) + *dx = event->touchpad_swipe.dx; + if (dy) + *dy = event->touchpad_swipe.dy; + } +} diff --git a/clutter/clutter-event.h b/clutter/clutter-event.h index e33b5c850..5b0b26796 100644 --- a/clutter/clutter-event.h +++ b/clutter/clutter-event.h @@ -665,6 +665,23 @@ guint32 clutter_get_current_event_time (void); CLUTTER_AVAILABLE_IN_1_2 const ClutterEvent * clutter_get_current_event (void); +CLUTTER_AVAILABLE_IN_1_24 +guint clutter_event_get_gesture_swipe_finger_count (const ClutterEvent *event); + +CLUTTER_AVAILABLE_IN_1_24 +gdouble clutter_event_get_gesture_pinch_angle_delta (const ClutterEvent *event); + +CLUTTER_AVAILABLE_IN_1_24 +gdouble clutter_event_get_gesture_pinch_scale (const ClutterEvent *event); + +CLUTTER_AVAILABLE_IN_1_24 +ClutterTouchpadGesturePhase clutter_event_get_gesture_phase (const ClutterEvent *event); + +CLUTTER_AVAILABLE_IN_1_24 +void clutter_event_get_gesture_motion_delta (const ClutterEvent *event, + gdouble *dx, + gdouble *dy); + G_END_DECLS #endif /* __CLUTTER_EVENT_H__ */ |