[clutter] event: Expose precise scrolling information
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] event: Expose precise scrolling information
- Date: Mon, 19 Mar 2012 14:48:59 +0000 (UTC)
commit 6b07f8a3df5647e752165af44bdea31619f7e8d1
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Mon Mar 19 12:15:41 2012 +0000
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.
clutter/clutter-enums.h | 7 ++++-
clutter/clutter-event.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++
clutter/clutter-event.h | 8 +++++
clutter/clutter.symbols | 2 +
4 files changed, 87 insertions(+), 1 deletions(-)
---
diff --git a/clutter/clutter-enums.h b/clutter/clutter-enums.h
index bf3dea5..3942627 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 f7437ba..da87ee4 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;
@@ -514,6 +517,72 @@ clutter_event_set_related (ClutterEvent *event,
}
/**
+ * 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 487f131..208041f 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 339d8a0..f6374ea 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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]