gimp r25873 - in trunk: . app/tools



Author: martinn
Date: Sat May 31 17:51:52 2008
New Revision: 25873
URL: http://svn.gnome.org/viewvc/gimp?rev=25873&view=rev

Log:
2008-05-31  Martin Nordholts  <martinn svn gnome org>

	* app/tools/gimprotatetool.c (gimp_rotate_tool_key_press):
	Implemented this function to support rotating with arrow keys. See
	bug #387779.


Modified:
   trunk/ChangeLog
   trunk/app/tools/gimprotatetool.c
   trunk/app/tools/gimprotatetool.h

Modified: trunk/app/tools/gimprotatetool.c
==============================================================================
--- trunk/app/tools/gimprotatetool.c	(original)
+++ trunk/app/tools/gimprotatetool.c	Sat May 31 17:51:52 2008
@@ -21,6 +21,7 @@
 #include <string.h>
 
 #include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 
 #include "libgimpmath/gimpmath.h"
 #include "libgimpwidgets/gimpwidgets.h"
@@ -55,19 +56,21 @@
 
 /*  local function prototypes  */
 
-static void   gimp_rotate_tool_dialog        (GimpTransformTool   *tr_tool);
-static void   gimp_rotate_tool_dialog_update (GimpTransformTool   *tr_tool);
-static void   gimp_rotate_tool_prepare       (GimpTransformTool   *tr_tool,
-                                              GimpDisplay         *display);
-static void   gimp_rotate_tool_motion        (GimpTransformTool   *tr_tool,
-                                              GimpDisplay         *display);
-static void   gimp_rotate_tool_recalc        (GimpTransformTool   *tr_tool,
-                                              GimpDisplay         *display);
-
-static void   rotate_angle_changed           (GtkAdjustment       *adj,
-                                              GimpTransformTool   *tr_tool);
-static void   rotate_center_changed          (GtkWidget           *entry,
-                                              GimpTransformTool   *tr_tool);
+static gboolean gimp_rotate_tool_key_press     (GimpTool            *tool,
+                                                GdkEventKey         *kevent,
+                                                GimpDisplay         *display);
+static void     gimp_rotate_tool_dialog        (GimpTransformTool   *tr_tool);
+static void     gimp_rotate_tool_dialog_update (GimpTransformTool   *tr_tool);
+static void     gimp_rotate_tool_prepare       (GimpTransformTool   *tr_tool,
+                                                GimpDisplay         *display);
+static void     gimp_rotate_tool_motion        (GimpTransformTool   *tr_tool,
+                                                GimpDisplay         *display);
+static void     gimp_rotate_tool_recalc        (GimpTransformTool   *tr_tool,
+                                                GimpDisplay         *display);
+static void     rotate_angle_changed           (GtkAdjustment       *adj,
+                                                GimpTransformTool   *tr_tool);
+static void     rotate_center_changed          (GtkWidget           *entry,
+                                                GimpTransformTool   *tr_tool);
 
 
 G_DEFINE_TYPE (GimpRotateTool, gimp_rotate_tool, GIMP_TYPE_TRANSFORM_TOOL)
@@ -95,8 +98,11 @@
 static void
 gimp_rotate_tool_class_init (GimpRotateToolClass *klass)
 {
+  GimpToolClass          *tool_class  = GIMP_TOOL_CLASS (klass);
   GimpTransformToolClass *trans_class = GIMP_TRANSFORM_TOOL_CLASS (klass);
 
+  tool_class->key_press      = gimp_rotate_tool_key_press;
+
   trans_class->dialog        = gimp_rotate_tool_dialog;
   trans_class->dialog_update = gimp_rotate_tool_dialog_update;
   trans_class->prepare       = gimp_rotate_tool_prepare;
@@ -119,6 +125,56 @@
   tr_tool->use_center    = TRUE;
 }
 
+static gboolean
+gimp_rotate_tool_key_press (GimpTool    *tool,
+                            GdkEventKey *kevent,
+                            GimpDisplay *display)
+{
+  GimpDrawTool   *draw_tool   = GIMP_DRAW_TOOL (tool);
+  GimpRotateTool *rotate      = GIMP_ROTATE_TOOL (tool);
+  gboolean        handled_key = FALSE;
+  GtkSpinButton  *angle_spin  = GTK_SPIN_BUTTON (rotate->angle_spin_button);
+
+  if (display == draw_tool->display)
+    {
+      switch (kevent->keyval)
+        {
+        case GDK_Up:
+          handled_key = TRUE;
+          gtk_spin_button_spin (angle_spin, GTK_SPIN_STEP_FORWARD, 0.0);
+          break;
+
+        case GDK_Down:
+          handled_key = TRUE;
+          gtk_spin_button_spin (angle_spin, GTK_SPIN_STEP_BACKWARD, 0.0);
+          break;
+
+        case GDK_Left:
+          handled_key = TRUE;
+          gtk_spin_button_spin (angle_spin, GTK_SPIN_PAGE_FORWARD, 0.0);
+          break;
+
+        case GDK_Right:
+          handled_key = TRUE;
+          gtk_spin_button_spin (angle_spin, GTK_SPIN_PAGE_BACKWARD, 0.0);
+          break;
+
+        default:
+          handled_key = FALSE;
+          break;
+        }
+    }
+
+  if (! handled_key)
+    {
+      handled_key = GIMP_TOOL_CLASS (parent_class)->key_press (tool,
+                                                               kevent,
+                                                               display);
+    }
+
+  return handled_key;
+}
+
 static void
 gimp_rotate_tool_dialog (GimpTransformTool *tr_tool)
 {
@@ -143,6 +199,7 @@
   gtk_entry_set_width_chars (GTK_ENTRY (button), SB_WIDTH);
   gimp_table_attach_aligned (GTK_TABLE (table), 0, 0, _("_Angle:"),
                              0.0, 0.5, button, 1, TRUE);
+  rotate->angle_spin_button = button;
 
   g_signal_connect (rotate->angle_adj, "value-changed",
                     G_CALLBACK (rotate_angle_changed),

Modified: trunk/app/tools/gimprotatetool.h
==============================================================================
--- trunk/app/tools/gimprotatetool.h	(original)
+++ trunk/app/tools/gimprotatetool.h	Sat May 31 17:51:52 2008
@@ -39,6 +39,7 @@
   GimpTransformTool  parent_instance;
 
   GtkObject         *angle_adj;
+  GtkWidget         *angle_spin_button;
   GtkWidget         *sizeentry;
 };
 



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