[gnome-builder/wip/slaf/colorpicker] gstyle-eyedropper: add movement keys to the pointer



commit 13a60f281985938ddb32ce32cf4f1444defcdeae
Author: Sebastien Lafargue <slafargue gnome org>
Date:   Sun Jul 17 16:04:25 2016 +0200

    gstyle-eyedropper: add movement keys to the pointer
    
    You can move the pointer with up/down/left/right
    and same keypad cursor keys.
    
    Maintaining Alt allow a 10px step per move.

 contrib/gstyle/gstyle-eyedropper.c |   41 ++++++++++++++++++++++++++++++++++-
 1 files changed, 39 insertions(+), 2 deletions(-)
---
diff --git a/contrib/gstyle/gstyle-eyedropper.c b/contrib/gstyle/gstyle-eyedropper.c
index fba0da8..f2d0983 100644
--- a/contrib/gstyle/gstyle-eyedropper.c
+++ b/contrib/gstyle/gstyle-eyedropper.c
@@ -46,6 +46,8 @@
 #define MIN_ZOOM_FACTOR 1
 #define MAX_ZOOM_FACTOR 20
 
+#define CURSOR_ALT_STEP 10
+
 struct _GstyleEyedropper
 {
   GtkWindow          parent_instance;
@@ -397,21 +399,56 @@ gstyle_eyedropper_key_pressed_cb (GstyleEyedropper *self,
                                   GdkEventKey      *event,
                                   GtkWindow        *window)
 {
+  GdkSeat *seat;
+  GdkDevice *pointer;
+  GdkDevice *keyboard;
+  gint x, y;
+  gint dx = 0;
+  gint dy = 0;
+  gint state;
+
   g_assert (GSTYLE_IS_EYEDROPPER (self));
   g_assert (event != NULL);
   g_assert (GTK_IS_WINDOW (window));
 
-  /* TODO: handle cursor and picker trigger keys */
+  state = (event->state & gtk_accelerator_get_default_mod_mask () & GDK_MOD1_MASK);
   switch (event->keyval)
     {
     case GDK_KEY_Escape:
       release_grab (self);
+      return GDK_EVENT_STOP;
       break;
 
-    default:
+    case GDK_KEY_Up:
+    case GDK_KEY_KP_Up:
+      dy = (state == GDK_MOD1_MASK) ? -CURSOR_ALT_STEP : -1;
+      break;
+
+    case GDK_KEY_Down:
+    case GDK_KEY_KP_Down:
+      dy = (state == GDK_MOD1_MASK) ? CURSOR_ALT_STEP : 1;
       break;
+
+    case GDK_KEY_Left:
+    case GDK_KEY_KP_Left:
+      dx = (state == GDK_MOD1_MASK) ? -CURSOR_ALT_STEP : -1;
+      break;
+
+    case GDK_KEY_Right:
+    case GDK_KEY_KP_Right:
+      dx = (state == GDK_MOD1_MASK) ? CURSOR_ALT_STEP : 1;
+      break;
+
+    default:
+      return GDK_EVENT_PROPAGATE;
     }
 
+  keyboard = gdk_event_get_device ((GdkEvent *)event);
+  seat = gdk_device_get_seat (keyboard);
+  pointer = gdk_seat_get_pointer (seat);
+  gdk_device_get_position (pointer, NULL, &x, &y);
+  gdk_device_warp (pointer, self->screen, x + dx, y + dy);
+
   return GDK_EVENT_STOP;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]