]> Pileus Git - ~andy/gtk/commitdiff
gdk: Add delta_x/y to scroll events
authorMichael Natterer <mitch@lanedo.com>
Mon, 23 Jan 2012 22:37:44 +0000 (23:37 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 1 Mar 2012 21:28:56 +0000 (16:28 -0500)
gdk_event_get_scroll_deltas() can be used to retrieve those
values on smooth scroll events.

docs/reference/gdk/gdk3-sections.txt
gdk/gdk.symbols
gdk/gdkevents.c
gdk/gdkevents.h

index 2e064fe134cdb21ee2a30a49457cde4346045664..b46e17e3dbc8fe0307e12188c46f16a10fc4d0f9 100644 (file)
@@ -788,6 +788,7 @@ gdk_event_get_keycode
 gdk_event_get_keyval
 gdk_event_get_root_coords
 gdk_event_get_scroll_direction
+gdk_event_get_scroll_deltas
 gdk_event_get_state
 gdk_event_get_time
 GdkEventSequence
index 9552f3efa87fdd12bd83cf34c10d8682ca3d800d..dff7e34b5c4ca27e9281aca918a083be7c06019c 100644 (file)
@@ -165,6 +165,7 @@ gdk_event_get_keyval
 gdk_event_get_root_coords
 gdk_event_get_screen
 gdk_event_get_scroll_direction
+gdk_event_get_scroll_deltas
 gdk_event_get_source_device
 gdk_event_get_state
 gdk_event_get_time
index 688fec24d6de4d24585bfe943b5aac551522fd0a..7abd956c2f65fc2ba12dc777d79d9fdb0200cfcf 100644 (file)
@@ -471,6 +471,8 @@ gdk_event_new (GdkEventType type)
       new_event->scroll.y = 0.;
       new_event->scroll.x_root = 0.;
       new_event->scroll.y_root = 0.;
+      new_event->scroll.delta_x = 0.;
+      new_event->scroll.delta_y = 0.;
       break;
     case GDK_ENTER_NOTIFY:
     case GDK_LEAVE_NOTIFY:
@@ -1207,6 +1209,52 @@ gdk_event_get_scroll_direction (const GdkEvent *event,
   return fetched;
 }
 
+/**
+ * gdk_event_get_scroll_deltas:
+ * @event: a #GdkEvent
+ * @delta_x: return location for X delta
+ * @delta_y: return location for Y delta
+ *
+ * Retrieves the scroll deltas from a #GdkEvent
+ *
+ * Returns: %TRUE if the event contains smooth scroll information
+ *
+ * Since: 3.4
+ **/
+gboolean
+gdk_event_get_scroll_deltas (const GdkEvent *event,
+                             gdouble        *delta_x,
+                             gdouble        *delta_y)
+{
+  gboolean fetched = TRUE;
+  gdouble dx = 0.0;
+  gdouble dy = 0.0;
+
+  switch (event->type)
+    {
+    case GDK_SCROLL:
+      if (event->scroll.direction == GDK_SCROLL_SMOOTH)
+        {
+          dx = event->scroll.delta_x;
+          dy = event->scroll.delta_y;
+        }
+      else
+        fetched = FALSE;
+      break;
+    default:
+      fetched = FALSE;
+      break;
+    }
+
+  if (delta_x)
+    *delta_x = dx;
+
+  if (delta_y)
+    *delta_y = dy;
+
+  return fetched;
+}
+
 /**
  * gdk_event_get_axis:
  * @event: a #GdkEvent
index 6aa593a292219ce117d9fcbdbd1b8c9e70eafa9d..4c42678368676381971cba1aa5a4b242363684a7 100644 (file)
@@ -759,6 +759,8 @@ struct _GdkEventScroll
   GdkScrollDirection direction;
   GdkDevice *device;
   gdouble x_root, y_root;
+  gdouble delta_x;
+  gdouble delta_y;
 };
 
 /**
@@ -1203,6 +1205,11 @@ gboolean  gdk_event_get_keycode         (const GdkEvent *event,
 GDK_AVAILABLE_IN_3_2
 gboolean gdk_event_get_scroll_direction (const GdkEvent *event,
                                          GdkScrollDirection *direction);
+GDK_AVAILABLE_IN_3_4
+gboolean  gdk_event_get_scroll_deltas   (const GdkEvent *event,
+                                         gdouble         *delta_x,
+                                         gdouble         *delta_y);
+
 gboolean  gdk_event_get_axis            (const GdkEvent  *event,
                                          GdkAxisUse       axis_use,
                                          gdouble         *value);