[gimp] Stop smudge from crashing by disabling dynamic transfrorming in the brush core.



commit 05f6d89ab06f552822a593dcdabe0a702a2b08d2
Author: Alexia Death <alexiadeath gmail com>
Date:   Tue Oct 27 23:14:44 2009 +0200

    Stop smudge from crashing by disabling dynamic transfrorming in the brush core.

 app/paint/gimpbrushcore.c |   76 +++++++++++++++++++++++++--------------------
 app/paint/gimpbrushcore.h |    2 +
 app/paint/gimpsmudge.c    |    1 +
 3 files changed, 45 insertions(+), 34 deletions(-)
---
diff --git a/app/paint/gimpbrushcore.c b/app/paint/gimpbrushcore.c
index 871bf15..d415c2d 100644
--- a/app/paint/gimpbrushcore.c
+++ b/app/paint/gimpbrushcore.c
@@ -162,18 +162,20 @@ gimp_brush_core_class_init (GimpBrushCoreClass *klass)
                   G_TYPE_NONE, 1,
                   GIMP_TYPE_DYNAMICS);
 
-  object_class->finalize           = gimp_brush_core_finalize;
-
-  paint_core_class->start          = gimp_brush_core_start;
-  paint_core_class->pre_paint      = gimp_brush_core_pre_paint;
-  paint_core_class->post_paint     = gimp_brush_core_post_paint;
-  paint_core_class->interpolate    = gimp_brush_core_interpolate;
-  paint_core_class->get_paint_area = gimp_brush_core_get_paint_area;
-
-  klass->handles_changing_brush     = FALSE;
-  klass->handles_transforming_brush = TRUE;
-  klass->set_brush                  = gimp_brush_core_real_set_brush;
-  klass->set_dynamics               = gimp_brush_core_real_set_dynamics;
+  object_class->finalize                    = gimp_brush_core_finalize;
+
+  paint_core_class->start                   = gimp_brush_core_start;
+  paint_core_class->pre_paint               = gimp_brush_core_pre_paint;
+  paint_core_class->post_paint              = gimp_brush_core_post_paint;
+  paint_core_class->interpolate             = gimp_brush_core_interpolate;
+  paint_core_class->get_paint_area          = gimp_brush_core_get_paint_area;
+
+  klass->handles_changing_brush             = FALSE;
+  klass->handles_transforming_brush         = TRUE;
+  klass->handles_dynamic_transforming_brush = TRUE;
+
+  klass->set_brush                          = gimp_brush_core_real_set_brush;
+  klass->set_dynamics                       = gimp_brush_core_real_set_dynamics;
 }
 
 static void
@@ -416,20 +418,23 @@ gimp_brush_core_start (GimpPaintCore     *paint_core,
       core->angle        = paint_options->brush_angle;
       core->aspect_ratio = paint_options->brush_aspect_ratio;
 
-      fade_point = gimp_paint_options_get_fade (paint_options, image,
-                                                paint_core->pixel_dist);
+      if (GIMP_BRUSH_CORE_GET_CLASS (core)->handles_dynamic_transforming_brush)
+        {
+          fade_point = gimp_paint_options_get_fade (paint_options, image,
+                                                    paint_core->pixel_dist);
 
-      core->scale *= gimp_dynamics_output_get_linear_value (core->dynamics->size_output,
-                                                            coords,
-                                                            fade_point);
+          core->scale *= gimp_dynamics_output_get_linear_value (core->dynamics->size_output,
+                                                                coords,
+                                                                fade_point);
 
-      core->angle += gimp_dynamics_output_get_angular_value (core->dynamics->angle_output,
-                                                             coords,
-                                                             fade_point);
+          core->angle += gimp_dynamics_output_get_angular_value (core->dynamics->angle_output,
+                                                                 coords,
+                                                                 fade_point);
 
-      core->aspect_ratio *= gimp_dynamics_output_get_aspect_value (core->dynamics->aspect_ratio_output,
-                                                                   coords,
-                                                                   fade_point);
+          core->aspect_ratio *= gimp_dynamics_output_get_aspect_value (core->dynamics->aspect_ratio_output,
+                                                                       coords,
+                                                                       fade_point);
+        }
     }
 
   core->spacing = (gdouble) gimp_brush_get_spacing (core->main_brush) / 100.0;
@@ -788,20 +793,23 @@ gimp_brush_core_get_paint_area (GimpPaintCore    *paint_core,
       core->angle = paint_options->brush_angle;
       core->aspect_ratio = paint_options->brush_aspect_ratio;
 
-      fade_point = gimp_paint_options_get_fade (paint_options, image,
-                                                paint_core->pixel_dist);
+      if (GIMP_BRUSH_CORE_GET_CLASS (core)->handles_dynamic_transforming_brush)
+        {
+          fade_point = gimp_paint_options_get_fade (paint_options, image,
+                                                    paint_core->pixel_dist);
 
-      core->scale *= gimp_dynamics_output_get_linear_value (core->dynamics->size_output,
-                                                            coords,
-                                                            fade_point);
+          core->scale *= gimp_dynamics_output_get_linear_value (core->dynamics->size_output,
+                                                                coords,
+                                                                fade_point);
 
-      core->angle += gimp_dynamics_output_get_angular_value (core->dynamics->angle_output,
-                                                             coords,
-                                                             fade_point);
+          core->angle += gimp_dynamics_output_get_angular_value (core->dynamics->angle_output,
+                                                                 coords,
+                                                                 fade_point);
 
-      core->aspect_ratio *= gimp_dynamics_output_get_aspect_value (core->dynamics->aspect_ratio_output,
-                                                                   coords,
-                                                                   fade_point);
+          core->aspect_ratio *= gimp_dynamics_output_get_aspect_value (core->dynamics->aspect_ratio_output,
+                                                                       coords,
+                                                                       fade_point);
+        }
     }
 
   core->scale = gimp_brush_core_clamp_brush_scale (core, core->scale);
diff --git a/app/paint/gimpbrushcore.h b/app/paint/gimpbrushcore.h
index 23f09f9..03806c0 100644
--- a/app/paint/gimpbrushcore.h
+++ b/app/paint/gimpbrushcore.h
@@ -96,6 +96,8 @@ struct _GimpBrushCoreClass
 
   /*  Set for tools that don't mind if the brush scales while painting  */
   gboolean            handles_transforming_brush;
+  /*  Set for tools that don't mind if the brush scales mid stroke  */
+  gboolean            handles_dynamic_transforming_brush;
 
   void (* set_brush)    (GimpBrushCore *core,
                          GimpBrush     *brush);
diff --git a/app/paint/gimpsmudge.c b/app/paint/gimpsmudge.c
index 122ce3a..3102eb3 100644
--- a/app/paint/gimpsmudge.c
+++ b/app/paint/gimpsmudge.c
@@ -96,6 +96,7 @@ gimp_smudge_class_init (GimpSmudgeClass *klass)
   paint_core_class->paint = gimp_smudge_paint;
 
   brush_core_class->handles_transforming_brush = TRUE;
+  brush_core_class->handles_dynamic_transforming_brush = FALSE;
 }
 
 static void



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