[gimp] app: remove a lot of cruft from GimpTransformTool



commit e13d3f17544821ed8cfeec7bf571fd90239b9941
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jun 19 01:53:01 2017 +0200

    app: remove a lot of cruft from GimpTransformTool
    
    All tools have a widget now so none of this stuff is needed any longer.

 app/tools/gimphandletransformtool.c  |    1 -
 app/tools/gimpperspectiveclonetool.h |   28 ++
 app/tools/gimpperspectivetool.c      |    1 -
 app/tools/gimprotatetool.c           |    1 -
 app/tools/gimpscaletool.c            |    1 -
 app/tools/gimpsheartool.c            |    1 -
 app/tools/gimptransformtool.c        |  515 +++++++++++-----------------------
 app/tools/gimptransformtool.h        |   56 ----
 app/tools/gimpunifiedtransformtool.c |    1 -
 9 files changed, 194 insertions(+), 411 deletions(-)
---
diff --git a/app/tools/gimphandletransformtool.c b/app/tools/gimphandletransformtool.c
index 5432ac6..ce77054 100644
--- a/app/tools/gimphandletransformtool.c
+++ b/app/tools/gimphandletransformtool.c
@@ -155,7 +155,6 @@ gimp_handle_transform_tool_init (GimpHandleTransformTool *ht_tool)
   GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (ht_tool);
 
   tr_tool->progress_text    = _("Handle transformation");
-  tr_tool->use_grid         = TRUE;
   tr_tool->does_perspective = TRUE;
 
   ht_tool->saved_handle_mode = GIMP_HANDLE_MODE_ADD_TRANSFORM;
diff --git a/app/tools/gimpperspectiveclonetool.h b/app/tools/gimpperspectiveclonetool.h
index 8ac7bc1..fc8721a 100644
--- a/app/tools/gimpperspectiveclonetool.h
+++ b/app/tools/gimpperspectiveclonetool.h
@@ -23,6 +23,34 @@
 #include "gimptransformtool.h"  /* for TransInfo */
 
 
+typedef enum
+{
+  TRANSFORM_CREATING,
+  TRANSFORM_HANDLE_NONE,
+  TRANSFORM_HANDLE_NW_P, /* perspective handles */
+  TRANSFORM_HANDLE_NE_P,
+  TRANSFORM_HANDLE_SW_P,
+  TRANSFORM_HANDLE_SE_P,
+  TRANSFORM_HANDLE_NW, /* north west */
+  TRANSFORM_HANDLE_NE, /* north east */
+  TRANSFORM_HANDLE_SW, /* south west */
+  TRANSFORM_HANDLE_SE, /* south east */
+  TRANSFORM_HANDLE_N,  /* north      */
+  TRANSFORM_HANDLE_S,  /* south      */
+  TRANSFORM_HANDLE_E,  /* east       */
+  TRANSFORM_HANDLE_W,  /* west       */
+  TRANSFORM_HANDLE_CENTER, /* for moving */
+  TRANSFORM_HANDLE_PIVOT,  /* pivot for rotation and scaling */
+  TRANSFORM_HANDLE_N_S,  /* shearing handles */
+  TRANSFORM_HANDLE_S_S,
+  TRANSFORM_HANDLE_E_S,
+  TRANSFORM_HANDLE_W_S,
+  TRANSFORM_HANDLE_ROTATION, /* rotation handle */
+
+  TRANSFORM_HANDLE_NUM /* keep this last so *handles[] is the right size */
+} TransformAction;
+
+
 #define GIMP_TYPE_PERSPECTIVE_CLONE_TOOL            (gimp_perspective_clone_tool_get_type ())
 #define GIMP_PERSPECTIVE_CLONE_TOOL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GIMP_TYPE_PERSPECTIVE_CLONE_TOOL, GimpPerspectiveCloneTool))
 #define GIMP_PERSPECTIVE_CLONE_TOOL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), 
GIMP_TYPE_PERSPECTIVE_CLONE_TOOL, GimpPerspectiveCloneToolClass))
diff --git a/app/tools/gimpperspectivetool.c b/app/tools/gimpperspectivetool.c
index baa8fe4..dc1fc00 100644
--- a/app/tools/gimpperspectivetool.c
+++ b/app/tools/gimpperspectivetool.c
@@ -114,7 +114,6 @@ gimp_perspective_tool_init (GimpPerspectiveTool *perspective_tool)
                                      GIMP_TOOL_CURSOR_PERSPECTIVE);
 
   tr_tool->progress_text    = _("Perspective transformation");
-  tr_tool->use_grid         = TRUE;
   tr_tool->does_perspective = TRUE;
 }
 
diff --git a/app/tools/gimprotatetool.c b/app/tools/gimprotatetool.c
index 44dffff..0d6eb8a 100644
--- a/app/tools/gimprotatetool.c
+++ b/app/tools/gimprotatetool.c
@@ -127,7 +127,6 @@ gimp_rotate_tool_init (GimpRotateTool *rotate_tool)
   gimp_tool_control_set_tool_cursor (tool->control, GIMP_TOOL_CURSOR_ROTATE);
 
   tr_tool->progress_text = _("Rotating");
-  tr_tool->use_grid      = TRUE;
 }
 
 static gboolean
diff --git a/app/tools/gimpscaletool.c b/app/tools/gimpscaletool.c
index 320b694..34415fc 100644
--- a/app/tools/gimpscaletool.c
+++ b/app/tools/gimpscaletool.c
@@ -119,7 +119,6 @@ gimp_scale_tool_init (GimpScaleTool *scale_tool)
   gimp_tool_control_set_tool_cursor (tool->control, GIMP_TOOL_CURSOR_RESIZE);
 
   tr_tool->progress_text = _("Scaling");
-  tr_tool->use_grid      = TRUE;
 }
 
 static void
diff --git a/app/tools/gimpsheartool.c b/app/tools/gimpsheartool.c
index 6bd2118..6737553 100644
--- a/app/tools/gimpsheartool.c
+++ b/app/tools/gimpsheartool.c
@@ -117,7 +117,6 @@ gimp_shear_tool_init (GimpShearTool *shear_tool)
   gimp_tool_control_set_tool_cursor (tool->control, GIMP_TOOL_CURSOR_SHEAR);
 
   tr_tool->progress_text = _("Shearing");
-  tr_tool->use_grid      = TRUE;
 }
 
 static void
diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c
index e57bbd9..3170802 100644
--- a/app/tools/gimptransformtool.c
+++ b/app/tools/gimptransformtool.c
@@ -17,22 +17,17 @@
 
 #include "config.h"
 
-#include <stdlib.h>
-#include <string.h>
-
 #include <gegl.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 
 #include "libgimpmath/gimpmath.h"
-#include "libgimpconfig/gimpconfig.h"
 #include "libgimpwidgets/gimpwidgets.h"
 
 #include "tools-types.h"
 
 #include "core/gimp.h"
 #include "core/gimpboundary.h"
-#include "core/gimpcontext.h"
 #include "core/gimpdrawable-transform.h"
 #include "core/gimperror.h"
 #include "core/gimpimage.h"
@@ -44,20 +39,14 @@
 #include "core/gimpprogress.h"
 #include "core/gimpprojection.h"
 #include "core/gimptoolinfo.h"
-#include "core/gimp-transform-utils.h"
-#include "core/gimp-utils.h"
 
 #include "vectors/gimpvectors.h"
 #include "vectors/gimpstroke.h"
 
-#include "widgets/gimpdialogfactory.h"
 #include "widgets/gimpwidgets-utils.h"
 
-#include "display/gimpcanvasgroup.h"
-#include "display/gimpcanvashandle.h"
+#include "display/gimpcanvasitem.h"
 #include "display/gimpdisplay.h"
-#include "display/gimpdisplayshell.h"
-#include "display/gimpdisplayshell-transform.h"
 #include "display/gimptoolgui.h"
 #include "display/gimptoolwidget.h"
 
@@ -69,115 +58,112 @@
 #include "gimp-intl.h"
 
 
-#define RESPONSE_RESET  1
-#define MIN_HANDLE_SIZE 6
-
-
-static void      gimp_transform_tool_finalize               (GObject               *object);
-
-static gboolean  gimp_transform_tool_initialize             (GimpTool              *tool,
-                                                             GimpDisplay           *display,
-                                                             GError               **error);
-static void      gimp_transform_tool_control                (GimpTool              *tool,
-                                                             GimpToolAction         action,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_button_press           (GimpTool              *tool,
-                                                             const GimpCoords      *coords,
-                                                             guint32                time,
-                                                             GdkModifierType        state,
-                                                             GimpButtonPressType    press_type,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_button_release         (GimpTool              *tool,
-                                                             const GimpCoords      *coords,
-                                                             guint32                time,
-                                                             GdkModifierType        state,
-                                                             GimpButtonReleaseType  release_type,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_motion                 (GimpTool              *tool,
-                                                             const GimpCoords      *coords,
-                                                             guint32                time,
-                                                             GdkModifierType        state,
-                                                             GimpDisplay           *display);
-static gboolean  gimp_transform_tool_key_press              (GimpTool              *tool,
-                                                             GdkEventKey           *kevent,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_modifier_key           (GimpTool              *tool,
-                                                             GdkModifierType        key,
-                                                             gboolean               press,
-                                                             GdkModifierType        state,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_oper_update            (GimpTool              *tool,
-                                                             const GimpCoords      *coords,
-                                                             GdkModifierType        state,
-                                                             gboolean               proximity,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_cursor_update          (GimpTool              *tool,
-                                                             const GimpCoords      *coords,
-                                                             GdkModifierType        state,
-                                                             GimpDisplay           *display);
-static const gchar * gimp_transform_tool_get_undo_desc      (GimpTool              *tool,
-                                                             GimpDisplay           *display);
-static const gchar * gimp_transform_tool_get_redo_desc      (GimpTool              *tool,
-                                                             GimpDisplay           *display);
-static gboolean  gimp_transform_tool_undo                   (GimpTool              *tool,
-                                                             GimpDisplay           *display);
-static gboolean  gimp_transform_tool_redo                   (GimpTool              *tool,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_options_notify         (GimpTool              *tool,
-                                                             GimpToolOptions       *options,
-                                                             const GParamSpec      *pspec);
-
-static void      gimp_transform_tool_draw                   (GimpDrawTool          *draw_tool);
-
-static void      gimp_transform_tool_dialog_update          (GimpTransformTool     *tr_tool);
+#define RESPONSE_RESET 1
+
+
+static void      gimp_transform_tool_finalize            (GObject               *object);
+
+static gboolean  gimp_transform_tool_initialize          (GimpTool              *tool,
+                                                          GimpDisplay           *display,
+                                                          GError               **error);
+static void      gimp_transform_tool_control             (GimpTool              *tool,
+                                                          GimpToolAction         action,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_button_press        (GimpTool              *tool,
+                                                          const GimpCoords      *coords,
+                                                          guint32                time,
+                                                          GdkModifierType        state,
+                                                          GimpButtonPressType    press_type,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_button_release      (GimpTool              *tool,
+                                                          const GimpCoords      *coords,
+                                                          guint32                time,
+                                                          GdkModifierType        state,
+                                                          GimpButtonReleaseType  release_type,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_motion              (GimpTool              *tool,
+                                                          const GimpCoords      *coords,
+                                                          guint32                time,
+                                                          GdkModifierType        state,
+                                                          GimpDisplay           *display);
+static gboolean  gimp_transform_tool_key_press           (GimpTool              *tool,
+                                                          GdkEventKey           *kevent,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_modifier_key        (GimpTool              *tool,
+                                                          GdkModifierType        key,
+                                                          gboolean               press,
+                                                          GdkModifierType        state,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_oper_update         (GimpTool              *tool,
+                                                          const GimpCoords      *coords,
+                                                          GdkModifierType        state,
+                                                          gboolean               proximity,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_cursor_update       (GimpTool              *tool,
+                                                          const GimpCoords      *coords,
+                                                          GdkModifierType        state,
+                                                          GimpDisplay           *display);
+static const gchar * gimp_transform_tool_get_undo_desc   (GimpTool              *tool,
+                                                          GimpDisplay           *display);
+static const gchar * gimp_transform_tool_get_redo_desc   (GimpTool              *tool,
+                                                          GimpDisplay           *display);
+static gboolean  gimp_transform_tool_undo                (GimpTool              *tool,
+                                                          GimpDisplay           *display);
+static gboolean  gimp_transform_tool_redo                (GimpTool              *tool,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_options_notify      (GimpTool              *tool,
+                                                          GimpToolOptions       *options,
+                                                          const GParamSpec      *pspec);
+
+static void      gimp_transform_tool_draw                (GimpDrawTool          *draw_tool);
+
+static void      gimp_transform_tool_dialog_update       (GimpTransformTool     *tr_tool);
 
 static GeglBuffer *
-                 gimp_transform_tool_real_transform         (GimpTransformTool     *tr_tool,
-                                                             GimpItem              *item,
-                                                             GeglBuffer            *orig_buffer,
-                                                             gint                   orig_offset_x,
-                                                             gint                   orig_offset_y,
-                                                             GimpColorProfile     **buffer_profile,
-                                                             gint                  *new_offset_x,
-                                                             gint                  *new_offset_y);
-
-static void      gimp_transform_tool_widget_changed         (GimpToolWidget        *widget,
-                                                             GimpTransformTool     *tr_tool);
-static void      gimp_transform_tool_widget_snap_offsets    (GimpToolWidget        *widget,
-                                                             gint                   offset_x,
-                                                             gint                   offset_y,
-                                                             gint                   width,
-                                                             gint                   height,
-                                                             GimpTransformTool     *tr_tool);
-static void      gimp_transform_tool_widget_status          (GimpToolWidget        *widget,
-                                                             const gchar           *status,
-                                                             GimpTransformTool     *tr_tool);
-
-static void      gimp_transform_tool_halt                   (GimpTransformTool     *tr_tool);
-static void      gimp_transform_tool_set_function           (GimpTransformTool     *tr_tool,
-                                                             TransformAction        function);
-static gboolean  gimp_transform_tool_bounds                 (GimpTransformTool     *tr_tool,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_dialog                 (GimpTransformTool     *tr_tool);
-static void      gimp_transform_tool_prepare                (GimpTransformTool     *tr_tool,
-                                                             GimpDisplay           *display);
-static void      gimp_transform_tool_transform              (GimpTransformTool     *tr_tool,
-                                                             GimpDisplay           *display);
-
-static void      gimp_transform_tool_response               (GimpToolGui           *gui,
-                                                             gint                   response_id,
-                                                             GimpTransformTool     *tr_tool);
-
-static void      gimp_transform_tool_update_sensitivity     (GimpTransformTool     *tr_tool);
-static GimpItem *gimp_transform_tool_get_active_item        (GimpTransformTool     *tr_tool,
-                                                             GimpImage             *image);
-static GimpItem *gimp_transform_tool_check_active_item      (GimpTransformTool     *tr_tool,
-                                                             GimpImage             *display,
-                                                             gboolean               invisible_layer_ok,
-                                                             GError               **error);
-static void      gimp_transform_tool_hide_active_item       (GimpTransformTool     *tr_tool,
-                                                             GimpItem              *item);
-static void      gimp_transform_tool_show_active_item       (GimpTransformTool     *tr_tool);
+                 gimp_transform_tool_real_transform      (GimpTransformTool     *tr_tool,
+                                                          GimpItem              *item,
+                                                          GeglBuffer            *orig_buffer,
+                                                          gint                   orig_offset_x,
+                                                          gint                   orig_offset_y,
+                                                          GimpColorProfile     **buffer_profile,
+                                                          gint                  *new_offset_x,
+                                                          gint                  *new_offset_y);
+
+static void      gimp_transform_tool_widget_changed      (GimpToolWidget        *widget,
+                                                          GimpTransformTool     *tr_tool);
+static void      gimp_transform_tool_widget_snap_offsets (GimpToolWidget        *widget,
+                                                          gint                   offset_x,
+                                                          gint                   offset_y,
+                                                          gint                   width,
+                                                          gint                   height,
+                                                          GimpTransformTool     *tr_tool);
+static void      gimp_transform_tool_widget_status       (GimpToolWidget        *widget,
+                                                          const gchar           *status,
+                                                          GimpTransformTool     *tr_tool);
+
+static void      gimp_transform_tool_halt                (GimpTransformTool     *tr_tool);
+static gboolean  gimp_transform_tool_bounds              (GimpTransformTool     *tr_tool,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_dialog              (GimpTransformTool     *tr_tool);
+static void      gimp_transform_tool_prepare             (GimpTransformTool     *tr_tool,
+                                                          GimpDisplay           *display);
+static void      gimp_transform_tool_transform           (GimpTransformTool     *tr_tool,
+                                                          GimpDisplay           *display);
+
+static void      gimp_transform_tool_response            (GimpToolGui           *gui,
+                                                          gint                   response_id,
+                                                          GimpTransformTool     *tr_tool);
+
+static void      gimp_transform_tool_update_sensitivity  (GimpTransformTool     *tr_tool);
+static GimpItem *gimp_transform_tool_get_active_item     (GimpTransformTool     *tr_tool,
+                                                          GimpImage             *image);
+static GimpItem *gimp_transform_tool_check_active_item   (GimpTransformTool     *tr_tool,
+                                                          GimpImage             *display,
+                                                          gboolean               invisible_layer_ok,
+                                                          GError               **error);
+static void      gimp_transform_tool_hide_active_item    (GimpTransformTool     *tr_tool,
+                                                          GimpItem              *item);
+static void      gimp_transform_tool_show_active_item    (GimpTransformTool     *tr_tool);
 
 static TransInfo * trans_info_new  (void);
 static void        trans_info_free (TransInfo *info);
@@ -218,12 +204,9 @@ gimp_transform_tool_class_init (GimpTransformToolClass *klass)
   klass->dialog                   = NULL;
   klass->dialog_update            = NULL;
   klass->prepare                  = NULL;
-  klass->motion                   = NULL;
   klass->recalc_matrix            = NULL;
   klass->get_undo_desc            = NULL;
   klass->transform                = gimp_transform_tool_real_transform;
-  klass->pick_function            = NULL;
-  klass->draw_gui                 = NULL;
 
   klass->ok_button_label          = _("_Transform");
 }
@@ -246,7 +229,6 @@ gimp_transform_tool_init (GimpTransformTool *tr_tool)
   gimp_tool_control_set_precision   (tool->control,
                                      GIMP_CURSOR_PRECISION_SUBPIXEL);
 
-  tr_tool->function      = TRANSFORM_CREATING;
   tr_tool->progress_text = _("Transforming");
 
   gimp_matrix3_identity (&tr_tool->transform);
@@ -304,8 +286,6 @@ gimp_transform_tool_initialize (GimpTool     *tool,
       tool->display  = display;
       tool->drawable = drawable;
 
-      gimp_transform_tool_hide_active_item (tr_tool, item);
-
       /*  Initialize the transform tool dialog */
       if (! tr_tool->gui)
         gimp_transform_tool_dialog (tr_tool);
@@ -320,11 +300,10 @@ gimp_transform_tool_initialize (GimpTool     *tool,
 
       /*  Get the on-canvas gui  */
       if (GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->get_widget)
-        tr_tool->widget =
-          GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->get_widget (tr_tool);
-
-      if (tr_tool->widget)
         {
+          tr_tool->widget =
+            GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->get_widget (tr_tool);
+
           g_signal_connect (tr_tool->widget, "changed",
                             G_CALLBACK (gimp_transform_tool_widget_changed),
                             tr_tool);
@@ -336,11 +315,11 @@ gimp_transform_tool_initialize (GimpTool     *tool,
                             tr_tool);
         }
 
+      gimp_transform_tool_hide_active_item (tr_tool, item);
+
       /*  start drawing the bounding box and handles...  */
       gimp_draw_tool_start (GIMP_DRAW_TOOL (tool), display);
 
-      tr_tool->function = TRANSFORM_CREATING;
-
       /* Initialize undo and redo lists */
       tr_tool->undo_list = g_list_prepend (NULL, trans_info_new ());
       tr_tool->redo_list = NULL;
@@ -404,36 +383,9 @@ gimp_transform_tool_button_press (GimpTool            *tool,
         {
           tr_tool->grab_widget = tr_tool->widget;
         }
-
-      gimp_tool_control_activate (tool->control);
-
-      return;
     }
 
-  if (tr_tool->function == TRANSFORM_CREATING)
-    GIMP_TOOL_GET_CLASS (tool)->oper_update (tool, coords, state, TRUE, display);
-
-  tr_tool->lastx = tr_tool->mousex = coords->x;
-  tr_tool->lasty = tr_tool->mousey = coords->y;
-
   gimp_tool_control_activate (tool->control);
-
-  if (GIMP_IS_CANVAS_HANDLE (tr_tool->handles[tr_tool->function]))
-    {
-      gdouble x, y;
-
-      gimp_canvas_handle_get_position (tr_tool->handles[tr_tool->function],
-                                       &x, &y);
-
-      gimp_tool_control_set_snap_offsets (tool->control,
-                                          SIGNED_ROUND (x - coords->x),
-                                          SIGNED_ROUND (y - coords->y),
-                                          0, 0);
-    }
-  else
-    {
-      gimp_tool_control_set_snap_offsets (tool->control, 0, 0, 0, 0);
-    }
 }
 
 void
@@ -486,17 +438,11 @@ gimp_transform_tool_button_release (GimpTool              *tool,
                                        coords, time, state, release_type);
       tr_tool->grab_widget = NULL;
     }
-  else
-    {
-      /*  if we are creating, there is nothing to be done...exit  */
-      if (tr_tool->function == TRANSFORM_CREATING && tr_tool->use_grid)
-        return;
-    }
 
   if (release_type != GIMP_BUTTON_RELEASE_CANCEL)
     {
       /* This hack is to perform the flip immediately with the flip tool */
-      if (! tr_tool->use_grid)
+      if (! tr_tool->widget)
         {
           gimp_transform_tool_response (NULL, GTK_RESPONSE_OK, tr_tool);
           return;
@@ -507,9 +453,6 @@ gimp_transform_tool_button_release (GimpTool              *tool,
     }
   else
     {
-      if (! tr_tool->widget)
-        gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
-
       /*  Restore the last saved state  */
       memcpy (tr_tool->trans_info, tr_tool->prev_trans_info,
               sizeof (TransInfo));
@@ -519,9 +462,6 @@ gimp_transform_tool_button_release (GimpTool              *tool,
 
       /*  recalculate the tool's transformation matrix  */
       gimp_transform_tool_recalc_matrix (tr_tool, tr_tool->widget);
-
-      if (! tr_tool->widget)
-        gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
     }
 }
 
@@ -534,37 +474,10 @@ gimp_transform_tool_motion (GimpTool         *tool,
 {
   GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (tool);
 
-  if (tr_tool->widget)
-    {
-      if (tr_tool->grab_widget)
-        {
-          gimp_tool_widget_motion (tr_tool->grab_widget, coords, time, state);
-        }
-
-      return;
-    }
-
-  /*  if we are creating, there is nothing to be done so exit.  */
-  if (tr_tool->function == TRANSFORM_CREATING || ! tr_tool->use_grid)
-    return;
-
-  gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
-
-  tr_tool->curx = coords->x;
-  tr_tool->cury = coords->y;
-
-  /*  recalculate the tool's transformation matrix  */
-  if (GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->motion)
+  if (tr_tool->grab_widget)
     {
-      GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->motion (tr_tool);
-
-      gimp_transform_tool_recalc_matrix (tr_tool, NULL);
+      gimp_tool_widget_motion (tr_tool->grab_widget, coords, time, state);
     }
-
-  tr_tool->lastx = tr_tool->curx;
-  tr_tool->lasty = tr_tool->cury;
-
-  gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
 }
 
 static gboolean
@@ -651,9 +564,7 @@ gimp_transform_tool_oper_update (GimpTool         *tool,
                                  gboolean          proximity,
                                  GimpDisplay      *display)
 {
-  GimpTransformTool *tr_tool   = GIMP_TRANSFORM_TOOL (tool);
-  GimpDrawTool      *draw_tool = GIMP_DRAW_TOOL (tool);
-  TransformAction    function  = TRANSFORM_HANDLE_NONE;
+  GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (tool);
 
   if (tr_tool->widget)
     {
@@ -661,23 +572,7 @@ gimp_transform_tool_oper_update (GimpTool         *tool,
         {
           gimp_tool_widget_hover (tr_tool->widget, coords, state, proximity);
         }
-
-      return;
     }
-
-  if (display != tool->display || draw_tool->item == NULL)
-    {
-      gimp_transform_tool_set_function (tr_tool, function);
-      return;
-    }
-
-  if (GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->pick_function)
-    function = GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->pick_function (tr_tool,
-                                                                       coords,
-                                                                       state,
-                                                                       display);
-
-  gimp_transform_tool_set_function (tr_tool, function);
 }
 
 static void
@@ -759,9 +654,6 @@ gimp_transform_tool_undo (GimpTool    *tool,
 
   tr_tool->prev_trans_info = item->data;
 
-  if (! tr_tool->widget)
-    gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
-
   /*  Restore the previous transformation info  */
   memcpy (tr_tool->trans_info, tr_tool->prev_trans_info,
           sizeof (TransInfo));
@@ -772,9 +664,6 @@ gimp_transform_tool_undo (GimpTool    *tool,
   /*  recalculate the tool's transformation matrix  */
   gimp_transform_tool_recalc_matrix (tr_tool, tr_tool->widget);
 
-  if (! tr_tool->widget)
-    gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
-
   return TRUE;
 }
 
@@ -798,9 +687,6 @@ gimp_transform_tool_redo (GimpTool    *tool,
   tr_tool->redo_list = g_list_remove (tr_tool->redo_list,
                                       tr_tool->prev_trans_info);
 
-  if (! tr_tool->widget)
-    gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
-
   /*  Restore the previous transformation info  */
   memcpy (tr_tool->trans_info, tr_tool->prev_trans_info,
           sizeof (TransInfo));
@@ -811,9 +697,6 @@ gimp_transform_tool_redo (GimpTool    *tool,
   /*  recalculate the tool's transformation matrix  */
   gimp_transform_tool_recalc_matrix (tr_tool, tr_tool->widget);
 
-  if (! tr_tool->widget)
-    gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
-
   return TRUE;
 }
 
@@ -833,74 +716,65 @@ gimp_transform_tool_options_notify (GimpTool         *tool,
       return;
     }
 
-  if (! tr_tool->use_grid)
-    return;
-
   if (! tr_tool->widget)
-    gimp_draw_tool_pause (GIMP_DRAW_TOOL (tr_tool));
+    return;
 
   if (! strcmp (pspec->name, "direction"))
     {
-      if (tr_tool->widget || tr_tool->function != TRANSFORM_CREATING)
+      if (tool->display)
         {
-          if (tool->display)
-            {
-              /*  reget the selection bounds  */
-              gimp_transform_tool_bounds (tr_tool, tool->display);
+          /*  reget the selection bounds  */
+          gimp_transform_tool_bounds (tr_tool, tool->display);
 
-              /*  recalculate the tool's transformation matrix  */
-              gimp_transform_tool_recalc_matrix (tr_tool, tr_tool->widget);
-            }
+          /*  recalculate the tool's transformation matrix  */
+          gimp_transform_tool_recalc_matrix (tr_tool, tr_tool->widget);
         }
     }
 
-  if (! tr_tool->widget)
-    gimp_draw_tool_resume (GIMP_DRAW_TOOL (tr_tool));
-
   if (! strcmp (pspec->name, "show-preview"))
     {
-      if (tr_tool->widget && tr_tool->preview)
-        gimp_canvas_item_set_visible (tr_tool->preview,
-                                      tr_options->show_preview);
+      if (tr_tool->preview)
+        {
+          gboolean show_preview;
+
+          show_preview = gimp_transform_options_show_preview (tr_options);
+
+          gimp_canvas_item_set_visible (tr_tool->preview, show_preview);
+        }
     }
   else if (! strcmp (pspec->name, "preview-opacity"))
     {
-      if (tr_tool->widget && tr_tool->preview)
+      if (tr_tool->preview)
         g_object_set (tr_tool->preview,
                       "opacity", tr_options->preview_opacity,
                       NULL);
     }
   else if (! strcmp (pspec->name, "grid-type"))
     {
-      if (tr_tool->widget)
-        g_object_set (tr_tool->widget,
-                      "guide-type", tr_options->grid_type,
-                      NULL);
+      g_object_set (tr_tool->widget,
+                    "guide-type", tr_options->grid_type,
+                    NULL);
     }
   else if (! strcmp (pspec->name, "grid-size"))
     {
-      if (tr_tool->widget)
-        g_object_set (tr_tool->widget,
-                      "n-guides", tr_options->grid_size,
-                      NULL);
+      g_object_set (tr_tool->widget,
+                    "n-guides", tr_options->grid_size,
+                    NULL);
     }
   else if (g_str_has_prefix (pspec->name, "constrain-") ||
            g_str_has_prefix (pspec->name, "frompivot-") ||
            ! strcmp (pspec->name, "fixedpivot") ||
            ! strcmp (pspec->name, "cornersnap"))
     {
-      if (tr_tool->widget)
-        {
-          gboolean value;
+      gboolean value;
 
-          g_object_get (options,
-                        pspec->name, &value,
-                        NULL);
+      g_object_get (options,
+                    pspec->name, &value,
+                    NULL);
 
-          g_object_set (tr_tool->widget,
-                        pspec->name, value,
-                        NULL);
-        }
+      g_object_set (tr_tool->widget,
+                    pspec->name, value,
+                    NULL);
 
       gimp_transform_tool_dialog_update (tr_tool);
     }
@@ -914,62 +788,37 @@ gimp_transform_tool_draw (GimpDrawTool *draw_tool)
   GimpTransformOptions *options = GIMP_TRANSFORM_TOOL_GET_OPTIONS (tool);
   GimpImage            *image   = gimp_display_get_image (tool->display);
 
-  memset (tr_tool->handles, 0, sizeof (tr_tool->handles));
-
-  if (tr_tool->use_grid)
+  if (tr_tool->widget)
     {
-      gboolean show_preview = gimp_transform_options_show_preview (options);
-
-      if (tr_tool->widget || show_preview)
-        {
-          GimpMatrix3 matrix = tr_tool->transform;
+      GimpCanvasItem *item;
+      GimpMatrix3     matrix = tr_tool->transform;
+      gboolean        show_preview;
 
-          if (options->direction == GIMP_TRANSFORM_BACKWARD)
-            gimp_matrix3_invert (&matrix);
+      show_preview = gimp_transform_options_show_preview (options);
 
-          tr_tool->preview =
-            gimp_draw_tool_add_transform_preview (draw_tool,
-                                                  tool->drawable,
-                                                  &matrix,
-                                                  tr_tool->x1,
-                                                  tr_tool->y1,
-                                                  tr_tool->x2,
-                                                  tr_tool->y2,
-                                                  tr_tool->does_perspective,
-                                                  options->preview_opacity);
-          g_object_add_weak_pointer (G_OBJECT (tr_tool->preview),
-                                     (gpointer) &tr_tool->preview);
-
-          if (tr_tool->widget)
-            gimp_canvas_item_set_visible (tr_tool->preview, show_preview);
-        }
+      if (options->direction == GIMP_TRANSFORM_BACKWARD)
+        gimp_matrix3_invert (&matrix);
 
-      if (tr_tool->widget)
-        {
-          GimpCanvasItem *item = gimp_tool_widget_get_item (tr_tool->widget);
+      tr_tool->preview =
+        gimp_draw_tool_add_transform_preview (draw_tool,
+                                              tool->drawable,
+                                              &matrix,
+                                              tr_tool->x1,
+                                              tr_tool->y1,
+                                              tr_tool->x2,
+                                              tr_tool->y2,
+                                              tr_tool->does_perspective,
+                                              options->preview_opacity);
+      g_object_add_weak_pointer (G_OBJECT (tr_tool->preview),
+                                 (gpointer) &tr_tool->preview);
 
-          gimp_draw_tool_add_item (draw_tool, item);
+      gimp_canvas_item_set_visible (tr_tool->preview, show_preview);
 
-          return;
-        }
-
-      gimp_draw_tool_add_transform_guides (draw_tool,
-                                           &tr_tool->transform,
-                                           options->grid_type,
-                                           options->grid_size,
-                                           tr_tool->x1,
-                                           tr_tool->y1,
-                                           tr_tool->x2,
-                                           tr_tool->y2);
-    }
+      item = gimp_tool_widget_get_item (tr_tool->widget);
 
-  if (GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->draw_gui)
-    GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->draw_gui (tr_tool);
+      gimp_draw_tool_add_item (draw_tool, item);
 
-  if (tr_tool->handles[tr_tool->function])
-    {
-      gimp_canvas_item_set_highlight (tr_tool->handles[tr_tool->function],
-                                      TRUE);
+      return;
     }
 
   if (options->type == GIMP_TRANSFORM_TYPE_SELECTION)
@@ -1378,8 +1227,6 @@ gimp_transform_tool_halt (GimpTransformTool *tr_tool)
 
   g_clear_object (&tr_tool->widget);
 
-  tr_tool->function = TRANSFORM_CREATING;
-
   if (tr_tool->gui)
     gimp_tool_gui_hide (tr_tool->gui);
 
@@ -1402,30 +1249,6 @@ gimp_transform_tool_halt (GimpTransformTool *tr_tool)
   tool->drawable = NULL;
  }
 
-static void
-gimp_transform_tool_set_function (GimpTransformTool *tr_tool,
-                                  TransformAction    function)
-{
-  if (function != tr_tool->function)
-    {
-      if (tr_tool->handles[tr_tool->function] &&
-          gimp_draw_tool_is_active (GIMP_DRAW_TOOL (tr_tool)))
-        {
-          gimp_canvas_item_set_highlight (tr_tool->handles[tr_tool->function],
-                                          FALSE);
-        }
-
-      tr_tool->function = function;
-
-      if (tr_tool->handles[tr_tool->function] &&
-          gimp_draw_tool_is_active (GIMP_DRAW_TOOL (tr_tool)))
-        {
-          gimp_canvas_item_set_highlight (tr_tool->handles[tr_tool->function],
-                                          TRUE);
-        }
-    }
-}
-
 static gboolean
 gimp_transform_tool_bounds (GimpTransformTool *tr_tool,
                             GimpDisplay       *display)
@@ -1612,9 +1435,6 @@ gimp_transform_tool_response (GimpToolGui       *gui,
 
       gimp_transform_tool_update_sensitivity (tr_tool);
 
-      if (! tr_tool->widget)
-        gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
-
       /*  Restore the previous transformation info  */
       memcpy (tr_tool->trans_info, tr_tool->prev_trans_info,
               sizeof (TransInfo));
@@ -1625,9 +1445,6 @@ gimp_transform_tool_response (GimpToolGui       *gui,
       /*  recalculate the tool's transformation matrix  */
       gimp_transform_tool_recalc_matrix (tr_tool, tr_tool->widget);
 
-      if (! tr_tool->widget)
-        gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
-
       /*  update the undo actions / menu items  */
       gimp_image_flush (gimp_display_get_image (display));
       break;
@@ -1775,7 +1592,7 @@ gimp_transform_tool_hide_active_item (GimpTransformTool *tr_tool,
   /*  hide only complete layers and channels, not layer masks  */
   if (options->type == GIMP_TRANSFORM_TYPE_LAYER &&
       options->show_preview                      &&
-      tr_tool->use_grid /* not for flip */       &&
+      tr_tool->widget /* not for flip */         &&
       GIMP_IS_DRAWABLE (item)                    &&
       ! GIMP_IS_LAYER_MASK (item)                &&
       gimp_item_get_visible (item)               &&
diff --git a/app/tools/gimptransformtool.h b/app/tools/gimptransformtool.h
index 4e893da..613b5a5 100644
--- a/app/tools/gimptransformtool.h
+++ b/app/tools/gimptransformtool.h
@@ -22,34 +22,6 @@
 #include "gimpdrawtool.h"
 
 
-typedef enum
-{
-  TRANSFORM_CREATING,
-  TRANSFORM_HANDLE_NONE,
-  TRANSFORM_HANDLE_NW_P, /* perspective handles */
-  TRANSFORM_HANDLE_NE_P,
-  TRANSFORM_HANDLE_SW_P,
-  TRANSFORM_HANDLE_SE_P,
-  TRANSFORM_HANDLE_NW, /* north west */
-  TRANSFORM_HANDLE_NE, /* north east */
-  TRANSFORM_HANDLE_SW, /* south west */
-  TRANSFORM_HANDLE_SE, /* south east */
-  TRANSFORM_HANDLE_N,  /* north      */
-  TRANSFORM_HANDLE_S,  /* south      */
-  TRANSFORM_HANDLE_E,  /* east       */
-  TRANSFORM_HANDLE_W,  /* west       */
-  TRANSFORM_HANDLE_CENTER, /* for moving */
-  TRANSFORM_HANDLE_PIVOT,  /* pivot for rotation and scaling */
-  TRANSFORM_HANDLE_N_S,  /* shearing handles */
-  TRANSFORM_HANDLE_S_S,
-  TRANSFORM_HANDLE_E_S,
-  TRANSFORM_HANDLE_W_S,
-  TRANSFORM_HANDLE_ROTATION, /* rotation handle */
-
-  TRANSFORM_HANDLE_NUM /* keep this last so *handles[] is the right size */
-} TransformAction;
-
-
 /* This is not the number of items in the enum above, but the max size
  * of the enums at the top of each transformation tool, stored in
  * trans_info and related
@@ -75,18 +47,6 @@ struct _GimpTransformTool
 {
   GimpDrawTool    parent_instance;
 
-  gdouble         curx;               /*  current x coord                    */
-  gdouble         cury;               /*  current y coord                    */
-
-  gdouble         lastx;              /*  last x coord                       */
-  gdouble         lasty;              /*  last y coord                       */
-
-  gdouble         previousx;          /*  previous x coord                   */
-  gdouble         previousy;          /*  previous y coord                   */
-
-  gdouble         mousex;             /*  x coord where mouse was clicked    */
-  gdouble         mousey;             /*  y coord where mouse was clicked    */
-
   gint            x1, y1;             /*  upper left hand coordinate         */
   gint            x2, y2;             /*  lower right hand coords            */
 
@@ -103,18 +63,13 @@ struct _GimpTransformTool
   GimpItem       *hidden_item;        /*  the item that was hidden during
                                           the transform                      */
 
-  TransformAction function;           /*  current tool activity              */
-
-  gboolean        use_grid;           /*  does the tool use the grid         */
   gboolean        does_perspective;   /*  does the tool do non-affine
                                        *  transformations
                                        */
 
   GimpToolWidget *widget;
   GimpToolWidget *grab_widget;
-
   GimpCanvasItem *preview;
-  GimpCanvasItem *handles[TRANSFORM_HANDLE_NUM];
 
   const gchar    *progress_text;
 
@@ -129,21 +84,10 @@ struct _GimpTransformToolClass
   void             (* dialog)        (GimpTransformTool *tool);
   void             (* dialog_update) (GimpTransformTool *tool);
   void             (* prepare)       (GimpTransformTool *tool);
-
   GimpToolWidget * (* get_widget)    (GimpTransformTool *tool);
-
-  void             (* motion)        (GimpTransformTool *tool);
   void             (* recalc_matrix) (GimpTransformTool *tool,
                                       GimpToolWidget    *widget);
   gchar          * (* get_undo_desc) (GimpTransformTool *tool);
-  TransformAction  (* pick_function) (GimpTransformTool *tool,
-                                      const GimpCoords  *coords,
-                                      GdkModifierType    state,
-                                      GimpDisplay       *display);
-  void             (* cursor_update) (GimpTransformTool  *tr_tool,
-                                      GimpCursorType     *cursor,
-                                      GimpCursorModifier *modifier);
-  void             (* draw_gui)      (GimpTransformTool *tool);
   GeglBuffer     * (* transform)     (GimpTransformTool *tool,
                                       GimpItem          *item,
                                       GeglBuffer        *orig_buffer,
diff --git a/app/tools/gimpunifiedtransformtool.c b/app/tools/gimpunifiedtransformtool.c
index ee87287..a6afe7c 100644
--- a/app/tools/gimpunifiedtransformtool.c
+++ b/app/tools/gimpunifiedtransformtool.c
@@ -111,7 +111,6 @@ gimp_unified_transform_tool_init (GimpUnifiedTransformTool *unified_tool)
   GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (unified_tool);
 
   tr_tool->progress_text    = _("Unified transform");
-  tr_tool->use_grid         = TRUE;
   tr_tool->does_perspective = TRUE;
 }
 



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