[gimp] app: Make sure outline and brush transform use the same kind of matrix



commit 3607a737447aec84c8ecd90a44dc55bc7133632e
Author: Alexia Death <alexiadeath gmail com>
Date:   Wed Mar 17 19:48:12 2010 +0200

    app: Make sure outline and brush transform use the same kind of matrix

 app/core/gimpbrush-transform.c |   49 ++++++++++++++++++---------------------
 app/core/gimpbrush-transform.h |    7 +++++
 app/paint/gimpbrushcore.c      |   12 +++------
 3 files changed, 34 insertions(+), 34 deletions(-)
---
diff --git a/app/core/gimpbrush-transform.c b/app/core/gimpbrush-transform.c
index 89c2529..d971f67 100644
--- a/app/core/gimpbrush-transform.c
+++ b/app/core/gimpbrush-transform.c
@@ -35,11 +35,6 @@
 
 /*  local function prototypes  */
 
-static void    gimp_brush_transform_matrix       (TempBuf           *brush,
-                                                  gdouble            scale_x,
-                                                  gdouble            scale_y,
-                                                  gdouble            angle,
-                                                  GimpMatrix3       *matrix);
 static void    gimp_brush_transform_bounding_box (TempBuf           *brush,
                                                   const GimpMatrix3 *matrix,
                                                   gint              *x,
@@ -47,12 +42,12 @@ static void    gimp_brush_transform_bounding_box (TempBuf           *brush,
                                                   gint              *width,
                                                   gint              *height);
 
-static gdouble gimp_brush_transform_array_sum    (gfloat            *arr, 
+static gdouble gimp_brush_transform_array_sum    (gfloat            *arr,
                                                   gint               len);
 static void    gimp_brush_transform_fill_blur_kernel (gfloat            *arr,
                                                       gint               len);
-static gint    gimp_brush_transform_blur_kernel_size (gint height, 
-                                                      gint width, 
+static gint    gimp_brush_transform_blur_kernel_size (gint height,
+                                                      gint width,
                                                       gdouble hardness);
 #define MAX_BLUR_KERNEL   15
 /*  public functions  */
@@ -69,10 +64,10 @@ gimp_brush_real_transform_size (GimpBrush *brush,
   gint        x, y;
 
   if (aspect_ratio < 1.0)
-    gimp_brush_transform_matrix (brush->mask,
+    gimp_brush_transform_matrix (brush->mask->width, brush->mask->height,
                                  scale * aspect_ratio, scale, angle, &matrix);
   else
-    gimp_brush_transform_matrix (brush->mask,
+    gimp_brush_transform_matrix (brush->mask->width, brush->mask->height,
                                  scale, scale / aspect_ratio, angle, &matrix);
 
   gimp_brush_transform_bounding_box (brush->mask, &matrix, &x, &y, width, height);
@@ -179,10 +174,10 @@ gimp_brush_real_transform_mask (GimpBrush *brush,
   source = temp_buf_copy (brush->mask, NULL);
 
    if (aspect_ratio < 1.0)
-    gimp_brush_transform_matrix (source,
+    gimp_brush_transform_matrix (source->height, source->width,
                                  scale * aspect_ratio, scale, angle, &matrix);
   else
-    gimp_brush_transform_matrix (source,
+    gimp_brush_transform_matrix (source->height, source->width,
                                  scale, scale / aspect_ratio, angle, &matrix);
 
   if (gimp_matrix3_is_identity (&matrix))
@@ -338,7 +333,7 @@ gimp_brush_real_transform_mask (GimpBrush *brush,
       TempBuf      *blur_src;
       PixelRegion  srcPR;
       PixelRegion  destPR;
-      gint kernel_size = gimp_brush_transform_blur_kernel_size ( result->height, 
+      gint kernel_size = gimp_brush_transform_blur_kernel_size ( result->height,
                                                                  result->width,
                                                                  hardness);
       gint kernel_len  = kernel_size * kernel_size;
@@ -356,7 +351,7 @@ gimp_brush_real_transform_mask (GimpBrush *brush,
                        GIMP_NORMAL_CONVOL, FALSE);
 
     }
-  
+
   return result;
 }
 
@@ -466,10 +461,10 @@ gimp_brush_real_transform_pixmap (GimpBrush *brush,
   source = brush->pixmap;
 
   if (aspect_ratio < 1.0)
-    gimp_brush_transform_matrix (source,
+    gimp_brush_transform_matrix (source->height, source->width,
                                  scale * aspect_ratio, scale, angle, &matrix);
   else
-    gimp_brush_transform_matrix (source,
+    gimp_brush_transform_matrix (source->height, source->width,
                                  scale, scale / aspect_ratio, angle, &matrix);
 
   if (gimp_matrix3_is_identity (&matrix))
@@ -631,7 +626,7 @@ gimp_brush_real_transform_pixmap (GimpBrush *brush,
       TempBuf      *blur_src;
       PixelRegion  srcPR;
       PixelRegion  destPR;
-      gint kernel_size = gimp_brush_transform_blur_kernel_size ( result->height, 
+      gint kernel_size = gimp_brush_transform_blur_kernel_size ( result->height,
                                                                  result->width,
                                                                  hardness);
       gint kernel_len  = kernel_size * kernel_size;
@@ -654,17 +649,17 @@ gimp_brush_real_transform_pixmap (GimpBrush *brush,
 }
 
 
-/*  private functions  */
 
-static void
-gimp_brush_transform_matrix (TempBuf     *brush,
+void
+gimp_brush_transform_matrix (gdouble      width,
+                             gdouble      height,
                              gdouble      scale_x,
                              gdouble      scale_y,
                              gdouble      angle,
                              GimpMatrix3 *matrix)
 {
-  const gdouble center_x = brush->width  / 2;
-  const gdouble center_y = brush->height / 2;
+  const gdouble center_x = width  / 2;
+  const gdouble center_y = height / 2;
 
   gimp_matrix3_identity (matrix);
   gimp_matrix3_translate (matrix, - center_x, - center_y);
@@ -673,6 +668,8 @@ gimp_brush_transform_matrix (TempBuf     *brush,
   gimp_matrix3_scale (matrix, scale_x, scale_y);
 }
 
+/*  private functions  */
+
 static void
 gimp_brush_transform_bounding_box (TempBuf           *brush,
                                    const GimpMatrix3 *matrix,
@@ -729,16 +726,16 @@ gimp_brush_transform_fill_blur_kernel (gfloat *arr, gint len)
 }
 
 static gint
-gimp_brush_transform_blur_kernel_size (gint height, 
-                                       gint width, 
+gimp_brush_transform_blur_kernel_size (gint height,
+                                       gint width,
                                        gdouble hardness)
 {
 
-  gint kernel_size = MIN (MAX_BLUR_KERNEL, MIN(width, height)) * 
+  gint kernel_size = MIN (MAX_BLUR_KERNEL, MIN(width, height)) *
                         ((MIN (width, height) * (1.0 - hardness)) / MIN (width, height));
 
   /*Kernel size must be odd*/
   if ( kernel_size % 2 == 0) kernel_size++;
-  
+
   return kernel_size;
 }
diff --git a/app/core/gimpbrush-transform.h b/app/core/gimpbrush-transform.h
index 91bdfee..7b3af61 100644
--- a/app/core/gimpbrush-transform.h
+++ b/app/core/gimpbrush-transform.h
@@ -40,5 +40,12 @@ TempBuf * gimp_brush_real_transform_pixmap (GimpBrush *brush,
                                             gdouble    angle,
                                             gdouble    hardness);
 
+void        gimp_brush_transform_matrix    (gdouble            width,
+                                            gdouble            height,
+                                            gdouble            scale_x,
+                                            gdouble            scale_y,
+                                            gdouble            angle,
+                                            GimpMatrix3       *matrix);
+
 
 #endif  /*  __GIMP_BRUSH_SCALE_H__  */
diff --git a/app/paint/gimpbrushcore.c b/app/paint/gimpbrushcore.c
index dc91059..4cc0480 100644
--- a/app/paint/gimpbrushcore.c
+++ b/app/paint/gimpbrushcore.c
@@ -38,6 +38,7 @@
 #include "core/gimperror.h"
 #include "core/gimpimage.h"
 #include "core/gimpmarshal.h"
+#include "core/gimpbrush-transform.h"
 
 #include "gimpbrushcore.h"
 #include "gimpbrushcore-kernels.h"
@@ -1043,16 +1044,11 @@ gimp_brush_core_transform_bound_segs (GimpBrushCore    *core,
   if ((scale > 0.0) && (aspect_ratio > 0.0))
     {
 
-      const gdouble center_x = width  / 2;
-      const gdouble center_y = height / 2;
-
       scale = gimp_brush_core_clamp_brush_scale (core, scale);
 
-      gimp_matrix3_identity (&matrix);
-      gimp_matrix3_translate (&matrix, - center_x, - center_y);
-      gimp_matrix3_rotate (&matrix, -2 * G_PI * angle);
-      gimp_matrix3_translate (&matrix, center_x, center_y);
-      gimp_matrix3_scale (&matrix, scale_x, scale_y);
+
+      gimp_brush_transform_matrix (height, width,
+                                   scale_y, scale_x, angle, &matrix);
 
       core->transformed_brush_bound_segs
                       = boundary_transform (core->brush_bound_segs,



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