[gimp] app: code cleanup and streamlining in GimpCanvasTransformPreview
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: code cleanup and streamlining in GimpCanvasTransformPreview
- Date: Sun, 27 Mar 2011 14:54:45 +0000 (UTC)
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]