[clutter] event: Expose precise scrolling information



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]