[gimp] app: code cleanup and streamlining in GimpCanvasTransformPreview



commit 1d9f95ac980a154207d10a2ba6138d738f56c4c9
Author: Michael Natterer <mitch gimp org>
Date:   Sun Mar 27 16:54:21 2011 +0200

    app: code cleanup and streamlining in GimpCanvasTransformPreview

 app/display/gimpcanvastransformpreview.c |   95 ++++++++++++++----------------
 app/display/gimpcanvastransformpreview.h |    2 -
 2 files changed, 45 insertions(+), 52 deletions(-)
---
diff --git a/app/display/gimpcanvastransformpreview.c b/app/display/gimpcanvastransformpreview.c
index 8f0d6a4..bb70fd3 100644
--- a/app/display/gimpcanvastransformpreview.c
+++ b/app/display/gimpcanvastransformpreview.c
@@ -23,6 +23,7 @@
 #include <gegl.h>
 #include <gtk/gtk.h>
 
+#include "libgimpmath/gimpmath.h"
 #include "libgimpwidgets/gimpwidgets.h"
 
 #include "tools/tools-types.h" /* eek */
@@ -40,13 +41,15 @@
 #include "gimpdisplayshell-transform.h"
 
 
-#define INT_MULT(a,b,t)     ((t) = (a) * (b) + 0x80, ((((t) >> 8) + (t)) >> 8))
-#define INT_MULT3(a,b,c,t)  ((t) = (a) * (b) * (c) + 0x7F5B, \
-                            ((((t) >> 7) + (t)) >> 16))
+#define INT_MULT(a,b,t)    ((t) = (a) * (b) + 0x80, ((((t) >> 8) + (t)) >> 8))
+#define INT_MULT3(a,b,c,t) ((t) = (a) * (b) * (c) + 0x7F5B, \
+                           ((((t) >> 7) + (t)) >> 16))
 
+#define MIN4(a,b,c,d)      MIN(MIN(a,b),MIN(c,d))
+#define MAX4(a,b,c,d)      MAX(MAX(a,b),MAX(c,d))
 
-#define MAX_SUB_COLS 6     /* number of columns and  */
-#define MAX_SUB_ROWS 6     /* rows to use in perspective preview subdivision */
+#define MAX_SUB_COLS       6 /* number of columns and  */
+#define MAX_SUB_ROWS       6 /* rows to use in perspective preview subdivision */
 
 
 enum
@@ -81,15 +84,13 @@ static void             gimp_canvas_transform_preview_get_property (GObject
                                                                     guint             property_id,
                                                                     GValue           *value,
                                                                     GParamSpec       *pspec);
+
 static void             gimp_canvas_transform_preview_draw         (GimpCanvasItem   *item,
                                                                     GimpDisplayShell *shell,
                                                                     cairo_t          *cr);
 static cairo_region_t * gimp_canvas_transform_preview_get_extents  (GimpCanvasItem   *item,
                                                                     GimpDisplayShell *shell);
 
-
-/*  local function prototypes  */
-
 static void   gimp_canvas_transform_preview_draw_quad         (GimpDrawable    *texture,
                                                                cairo_t         *cr,
                                                                GimpChannel     *mask,
@@ -200,6 +201,7 @@ gimp_canvas_transform_preview_set_property (GObject      *object,
     case PROP_TRANSFORM_TOOL:
       private->transform_tool = g_value_get_object (value); /* don't ref */
       break;
+
     case PROP_OPACITY:
       private->opacity = g_value_get_double (value);
       break;
@@ -223,6 +225,7 @@ gimp_canvas_transform_preview_get_property (GObject    *object,
     case PROP_TRANSFORM_TOOL:
       g_value_set_object (value, private->transform_tool);
       break;
+
     case PROP_OPACITY:
       g_value_set_double (value, private->opacity);
       break;
@@ -240,27 +243,25 @@ gimp_canvas_transform_preview_draw (GimpCanvasItem   *item,
 {
   GimpCanvasTransformPreviewPrivate *private = GET_PRIVATE (item);
   GimpTransformTool                 *tr_tool;
+  GimpDrawable                      *drawable;
+  GimpChannel                       *mask;
   gdouble                            z1, z2, z3, z4;
-
-  GimpDrawable *drawable;
-  GimpChannel  *mask;
-  gint          mask_x1, mask_y1;
-  gint          mask_x2, mask_y2;
-  gint          mask_offx, mask_offy;
-
-  gint          columns, rows;
-  gint          j, k, sub;
+  gint                               mask_x1, mask_y1;
+  gint                               mask_x2, mask_y2;
+  gint                               mask_offx, mask_offy;
+  gint                               columns, rows;
+  gint                               j, k, sub;
 
    /* x and y get filled with the screen coordinates of each corner of
     * each quadrilateral subdivision of the transformed area. u and v
     * are the corresponding points in the mask
     */
-  gfloat       du, dv, dx, dy;
-  gint         x[MAX_SUB_COLS * MAX_SUB_ROWS][4],
-               y[MAX_SUB_COLS * MAX_SUB_ROWS][4];
-  gfloat       u[MAX_SUB_COLS * MAX_SUB_ROWS][4],
-               v[MAX_SUB_COLS * MAX_SUB_ROWS][4];
-  guchar       opacity = 255;
+  gfloat                             du, dv, dx, dy;
+  gint                               x[MAX_SUB_COLS * MAX_SUB_ROWS][4];
+  gint                               y[MAX_SUB_COLS * MAX_SUB_ROWS][4];
+  gfloat                             u[MAX_SUB_COLS * MAX_SUB_ROWS][4];
+  gfloat                             v[MAX_SUB_COLS * MAX_SUB_ROWS][4];
+  guchar                             opacity;
 
   tr_tool = private->transform_tool;
   opacity = private->opacity * 255.999;
@@ -411,37 +412,31 @@ gimp_canvas_transform_preview_get_extents (GimpCanvasItem   *item,
 {
   GimpCanvasTransformPreviewPrivate *private = GET_PRIVATE (item);
   GimpTransformTool                 *tr_tool;
-  gdouble                            dx[4], dy[4];
+  gdouble                            dx1, dy1;
+  gdouble                            dx2, dy2;
+  gdouble                            dx3, dy3;
+  gdouble                            dx4, dy4;
   GdkRectangle                       rectangle;
-  gint                               i;
 
   tr_tool = private->transform_tool;
 
-  gimp_display_shell_transform_xy_f (shell, tr_tool->tx1, tr_tool->ty1,
-                                     dx + 0, dy + 0);
-  gimp_display_shell_transform_xy_f (shell, tr_tool->tx2, tr_tool->ty2,
-                                     dx + 1, dy + 1);
-  gimp_display_shell_transform_xy_f (shell, tr_tool->tx3, tr_tool->ty3,
-                                     dx + 2, dy + 2);
-  gimp_display_shell_transform_xy_f (shell, tr_tool->tx4, tr_tool->ty4,
-                                     dx + 3, dy + 3);
-
-  /* find bounding box around preview */
-  rectangle.x = rectangle.width  = (gint) dx[0];
-  rectangle.y = rectangle.height = (gint) dy[0];
-
-  for (i = 1; i < 4; i++)
-    {
-      if (dx[i] < rectangle.x)
-        rectangle.x = (gint) dx[i];
-      else if (dx[i] > rectangle.width)
-        rectangle.width = (gint) dx[i];
-
-      if (dy[i] < rectangle.y)
-        rectangle.y = (gint) dy[i];
-      else if (dy[i] > rectangle.height)
-        rectangle.height = (gint) dy[i];
-    }
+  gimp_display_shell_transform_xy_f (shell,
+                                     tr_tool->tx1, tr_tool->ty1,
+                                     &dx1, &dy1);
+  gimp_display_shell_transform_xy_f (shell,
+                                     tr_tool->tx2, tr_tool->ty2,
+                                     &dx2, &dy2);
+  gimp_display_shell_transform_xy_f (shell,
+                                     tr_tool->tx3, tr_tool->ty3,
+                                     &dx3, &dy3);
+  gimp_display_shell_transform_xy_f (shell,
+                                     tr_tool->tx4, tr_tool->ty4,
+                                     &dx4, &dy4);
+
+  rectangle.x      = (gint) floor (MIN4 (dx1, dx2, dx3, dx4));
+  rectangle.y      = (gint) floor (MIN4 (dy1, dy2, dy3, dy4));
+  rectangle.width  = (gint) ceil (MAX4 (dx1, dx2, dx3, dx4));
+  rectangle.height = (gint) ceil (MAX4 (dy1, dy2, dy3, dy4));
 
   rectangle.width  -= rectangle.x;
   rectangle.height -= rectangle.y;
diff --git a/app/display/gimpcanvastransformpreview.h b/app/display/gimpcanvastransformpreview.h
index 56be9db..f03cca7 100644
--- a/app/display/gimpcanvastransformpreview.h
+++ b/app/display/gimpcanvastransformpreview.h
@@ -22,8 +22,6 @@
 #define __GIMP_CANVAS_TRANSFORM_PREVIEW_H__
 
 
-#include "tools/tools-types.h" /* eek */
-
 #include "gimpcanvasitem.h"
 
 



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