@@ -34,6 +34,9 @@ namespace ColorPicker.Widgets {
3434 const string bright_border_color_string = " #FFFFFF" ;
3535 private Gdk . RGBA bright_border_color = Gdk.RGBA ();
3636
37+ private int mouse_pos_x = 0 ;
38+ private int mouse_pos_y = 0 ;
39+
3740 // 1. Snapsize is the amount of pixel going to be magnified by the zoomlevel.
3841 // 2. The snapsize must be odd to have a 1px magnifier center.
3942 // 3. Asure that snapsize*max_zoomlevel+shadow_width*2 is smaller than 2 * get_screen ().get_display ().get_maximal_cursor_size()
@@ -77,9 +80,11 @@ namespace ColorPicker.Widgets {
7780
7881
7982 public override bool button_release_event (Gdk .EventButton e ) {
83+ // button_1 is left mouse button
8084 if (e. button == 1 ) {
8185 Gdk . RGBA color = get_color_at ((int ) e. x_root, (int ) e. y_root);
8286 picked (color);
87+ // button_3 is right mouse button
8388 } else if (e. button == 3 ) {
8489 cancelled ();
8590 }
@@ -93,8 +98,9 @@ namespace ColorPicker.Widgets {
9398 }
9499
95100
96- public override bool motion_notify_event (Gdk .EventMotion e ) {
101+ public override bool motion_notify_event (Gdk .EventMotion e ) {
97102 Gdk . RGBA color = get_color_at ((int ) e. x_root, (int ) e. y_root);
103+
98104 moved (color);
99105
100106 set_magnifier_cursor ();
@@ -237,10 +243,32 @@ namespace ColorPicker.Widgets {
237243
238244
239245 public override bool key_press_event (Gdk .EventKey e ) {
240- if (e. keyval == Gdk . Key . Escape ) {
241- cancelled ();
246+ int px, py;
247+ get_pointer (out px, out py);
248+ var manager = Gdk . Display . get_default (). get_device_manager ();
249+
250+ switch (e. keyval) {
251+ case Gdk . Key . Escape :
252+ cancelled ();
253+ break ;
254+ case Gdk . Key . Return :
255+ Gdk . RGBA color = get_color_at (px, py);
256+ picked (color);
257+ break ;
258+ case Gdk . Key . Up :
259+ manager. get_client_pointer (). warp (get_screen (), px, py - 1 );
260+ break ;
261+ case Gdk . Key . Down :
262+ manager. get_client_pointer (). warp (get_screen (), px, py + 1 );
263+ break ;
264+ case Gdk . Key . Left :
265+ manager. get_client_pointer (). warp (get_screen (), px - 1 , py);
266+ break ;
267+ case Gdk . Key . Right :
268+ manager. get_client_pointer (). warp (get_screen (), px + 1 , py);
269+ break ;
242270 }
243-
271+
244272 return true ;
245273 }
246274
0 commit comments