diff --git a/clutter/clutter-enums.h b/clutter/clutter-enums.h index bf3dea5a8..39426272f 100644 --- a/clutter/clutter-enums.h +++ b/clutter/clutter-enums.h @@ -730,16 +730,21 @@ typedef enum { /*< prefix=CLUTTER >*/ * @CLUTTER_SCROLL_DOWN: Scroll down * @CLUTTER_SCROLL_LEFT: Scroll left * @CLUTTER_SCROLL_RIGHT: Scroll right + * @CLUTTER_SCROLL_SMOOTH: Precise scrolling delta (available in 1.10) * * Direction of a pointer scroll event. * + * The %CLUTTER_SCROLL_SMOOTH value implies that the #ClutterScrollEvent + * has precise scrolling delta information. + * * Since: 0.4 */ typedef enum { /*< prefix=CLUTTER_SCROLL >*/ CLUTTER_SCROLL_UP, CLUTTER_SCROLL_DOWN, CLUTTER_SCROLL_LEFT, - CLUTTER_SCROLL_RIGHT + CLUTTER_SCROLL_RIGHT, + CLUTTER_SCROLL_SMOOTH } ClutterScrollDirection; /** diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c index f7437bac4..da87ee4ca 100644 --- a/clutter/clutter-event.c +++ b/clutter/clutter-event.c @@ -49,6 +49,9 @@ typedef struct _ClutterEventPrivate { ClutterInputDevice *device; ClutterInputDevice *source_device; + gdouble delta_x; + gdouble delta_y; + gpointer platform_data; } ClutterEventPrivate; @@ -513,6 +516,72 @@ clutter_event_set_related (ClutterEvent *event, event->crossing.related = actor; } +/** + * clutter_event_set_scroll_delta: + * @event: a #ClutterEvent of type %CLUTTER_SCROLL + * @dx: delta on the horizontal axis + * @dy: delta on the vertical axis + * + * Sets the precise scrolling information of @event. + * + * Since: 1.10 + */ +void +clutter_event_set_scroll_delta (ClutterEvent *event, + gdouble dx, + gdouble dy) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_SCROLL); + + if (!is_event_allocated (event)) + return; + + event->scroll.direction = CLUTTER_SCROLL_SMOOTH; + + ((ClutterEventPrivate *) event)->delta_x = dx; + ((ClutterEventPrivate *) event)->delta_y = dy; +} + +/** + * clutter_event_get_scroll_delta: + * @event: a #ClutterEvent of type %CLUTTER_SCROLL + * @dx: (out): return location for the delta on the horizontal axis + * @dy: (out): return location for the delta on the vertical axis + * + * Retrieves the precise scrolling information of @event. + * + * The @event has to have a #ClutterScrollEvent.direction value + * of %CLUTTER_SCROLL_SMOOTH. + * + * Since: 1.10 + */ +void +clutter_event_get_scroll_delta (const ClutterEvent *event, + gdouble *dx, + gdouble *dy) +{ + gdouble delta_x, delta_y; + + g_return_if_fail (event != NULL); + g_return_if_fail (event->type == CLUTTER_SCROLL); + g_return_if_fail (event->scroll.direction == CLUTTER_SCROLL_SMOOTH); + + delta_x = delta_y = 0; + + if (is_event_allocated (event)) + { + delta_x = ((ClutterEventPrivate *) event)->delta_x; + delta_y = ((ClutterEventPrivate *) event)->delta_y; + } + + if (dx != NULL) + *dx = delta_x; + + if (dy != NULL) + *dy = delta_y; +} + /** * clutter_event_get_scroll_direction: * @event: a #ClutterEvent of type %CLUTTER_SCROLL @@ -970,6 +1039,8 @@ clutter_event_copy (const ClutterEvent *event) new_real_event->device = real_event->device; new_real_event->source_device = real_event->source_device; + new_real_event->delta_x = real_event->delta_x; + new_real_event->delta_y = real_event->delta_y; } device = clutter_event_get_device (event); diff --git a/clutter/clutter-event.h b/clutter/clutter-event.h index 487f131c1..208041f3e 100644 --- a/clutter/clutter-event.h +++ b/clutter/clutter-event.h @@ -420,6 +420,14 @@ ClutterActor * clutter_event_get_related (const ClutterEv void clutter_event_set_scroll_direction (ClutterEvent *event, ClutterScrollDirection direction); ClutterScrollDirection clutter_event_get_scroll_direction (const ClutterEvent *event); +CLUTTER_AVAILABLE_IN_1_10 +void clutter_event_set_scroll_delta (ClutterEvent *event, + gdouble dx, + gdouble dy); +CLUTTER_AVAILABLE_IN_1_10 +void clutter_event_get_scroll_delta (const ClutterEvent *event, + gdouble *dx, + gdouble *dy); guint32 clutter_keysym_to_unicode (guint keyval); CLUTTER_AVAILABLE_IN_1_10 diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols index 339d8a097..f6374eaea 100644 --- a/clutter/clutter.symbols +++ b/clutter/clutter.symbols @@ -629,6 +629,7 @@ clutter_event_get_key_code clutter_event_get_key_symbol clutter_event_get_key_unicode clutter_event_get_related +clutter_event_get_scroll_delta clutter_event_get_scroll_direction clutter_event_get_source clutter_event_get_source_device @@ -647,6 +648,7 @@ clutter_event_set_key_code clutter_event_set_key_symbol clutter_event_set_key_unicode clutter_event_set_related +clutter_event_set_scroll_delta clutter_event_set_scroll_direction clutter_event_set_source clutter_event_set_source_device