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:
parent
4fcd320255
commit
6b07f8a3df
@ -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;
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user