event: Expose precise scrolling information

Some events may contain precise scrolling information coming from
devices like trackpads and touchscreens. ClutterEvent should allow
setting and getting this information.
This commit is contained in:
Emmanuele Bassi 2012-03-19 12:15:41 +00:00
parent 4fcd320255
commit 6b07f8a3df
4 changed files with 87 additions and 1 deletions

View File

@ -730,16 +730,21 @@ typedef enum { /*< prefix=CLUTTER >*/
* @CLUTTER_SCROLL_DOWN: Scroll down * @CLUTTER_SCROLL_DOWN: Scroll down
* @CLUTTER_SCROLL_LEFT: Scroll left * @CLUTTER_SCROLL_LEFT: Scroll left
* @CLUTTER_SCROLL_RIGHT: Scroll right * @CLUTTER_SCROLL_RIGHT: Scroll right
* @CLUTTER_SCROLL_SMOOTH: Precise scrolling delta (available in 1.10)
* *
* Direction of a pointer scroll event. * Direction of a pointer scroll event.
* *
* The %CLUTTER_SCROLL_SMOOTH value implies that the #ClutterScrollEvent
* has precise scrolling delta information.
*
* Since: 0.4 * Since: 0.4
*/ */
typedef enum { /*< prefix=CLUTTER_SCROLL >*/ typedef enum { /*< prefix=CLUTTER_SCROLL >*/
CLUTTER_SCROLL_UP, CLUTTER_SCROLL_UP,
CLUTTER_SCROLL_DOWN, CLUTTER_SCROLL_DOWN,
CLUTTER_SCROLL_LEFT, CLUTTER_SCROLL_LEFT,
CLUTTER_SCROLL_RIGHT CLUTTER_SCROLL_RIGHT,
CLUTTER_SCROLL_SMOOTH
} ClutterScrollDirection; } ClutterScrollDirection;
/** /**

View File

@ -49,6 +49,9 @@ typedef struct _ClutterEventPrivate {
ClutterInputDevice *device; ClutterInputDevice *device;
ClutterInputDevice *source_device; ClutterInputDevice *source_device;
gdouble delta_x;
gdouble delta_y;
gpointer platform_data; gpointer platform_data;
} ClutterEventPrivate; } ClutterEventPrivate;
@ -513,6 +516,72 @@ clutter_event_set_related (ClutterEvent *event,
event->crossing.related = actor; 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: * clutter_event_get_scroll_direction:
* @event: a #ClutterEvent of type %CLUTTER_SCROLL * @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->device = real_event->device;
new_real_event->source_device = real_event->source_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); device = clutter_event_get_device (event);

View File

@ -420,6 +420,14 @@ ClutterActor * clutter_event_get_related (const ClutterEv
void clutter_event_set_scroll_direction (ClutterEvent *event, void clutter_event_set_scroll_direction (ClutterEvent *event,
ClutterScrollDirection direction); ClutterScrollDirection direction);
ClutterScrollDirection clutter_event_get_scroll_direction (const ClutterEvent *event); 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); guint32 clutter_keysym_to_unicode (guint keyval);
CLUTTER_AVAILABLE_IN_1_10 CLUTTER_AVAILABLE_IN_1_10

View File

@ -629,6 +629,7 @@ clutter_event_get_key_code
clutter_event_get_key_symbol clutter_event_get_key_symbol
clutter_event_get_key_unicode clutter_event_get_key_unicode
clutter_event_get_related clutter_event_get_related
clutter_event_get_scroll_delta
clutter_event_get_scroll_direction clutter_event_get_scroll_direction
clutter_event_get_source clutter_event_get_source
clutter_event_get_source_device clutter_event_get_source_device
@ -647,6 +648,7 @@ clutter_event_set_key_code
clutter_event_set_key_symbol clutter_event_set_key_symbol
clutter_event_set_key_unicode clutter_event_set_key_unicode
clutter_event_set_related clutter_event_set_related
clutter_event_set_scroll_delta
clutter_event_set_scroll_direction clutter_event_set_scroll_direction
clutter_event_set_source clutter_event_set_source
clutter_event_set_source_device clutter_event_set_source_device