[gimp/soc-2009-dynamics] More GimpBrushCore dynamics cleanup/fixes



commit de1db5c0ed6b4bdf33196aa1e43588ef7c5fded0
Author: Michael Natterer <mitch gimp org>
Date:   Tue Oct 13 19:01:14 2009 +0200

    More GimpBrushCore dynamics cleanup/fixes
    
    - unref the dynamics in finalize()
    - actually use the core's set_dynamics() API
    - bail out with an error message in gimp_paint_core_start() if
      there are no dynamics available (just like when there is no brush)
    - remove checks for dynamics != NULL all over the place
      (just as we can rely on a brush to exist)

 app/paint/gimpbrushcore.c |   53 +++++++++++++++++++++++++++-----------------
 1 files changed, 32 insertions(+), 21 deletions(-)
---
diff --git a/app/paint/gimpbrushcore.c b/app/paint/gimpbrushcore.c
index a4453b1..9fc0510 100644
--- a/app/paint/gimpbrushcore.c
+++ b/app/paint/gimpbrushcore.c
@@ -162,7 +162,7 @@ gimp_brush_core_class_init (GimpBrushCoreClass *klass)
                   G_TYPE_NONE, 1,
                   GIMP_TYPE_DYNAMICS);
 
-  object_class->finalize  = gimp_brush_core_finalize;
+  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;
@@ -297,6 +297,12 @@ gimp_brush_core_finalize (GObject *object)
       core->main_brush = NULL;
     }
 
+  if (core->dynamics)
+    {
+      g_object_unref (core->dynamics);
+      core->dynamics = NULL;
+    }
+
   if (core->brush_bound_segs)
     {
       g_free (core->brush_bound_segs);
@@ -375,14 +381,18 @@ gimp_brush_core_start (GimpPaintCore     *paint_core,
 {
   GimpBrushCore *core = GIMP_BRUSH_CORE (paint_core);
   GimpBrush     *brush;
-
-  core->dynamics = gimp_context_get_dynamics (GIMP_CONTEXT (paint_options));
+  GimpDynamics  *dynamics;
 
   brush = gimp_context_get_brush (GIMP_CONTEXT (paint_options));
 
   if (core->main_brush != brush)
     gimp_brush_core_set_brush (core, brush);
 
+  dynamics = gimp_context_get_dynamics (GIMP_CONTEXT (paint_options));
+
+  if (core->dynamics != dynamics)
+    gimp_brush_core_set_dynamics (core, dynamics);
+
   if (! core->main_brush)
     {
       g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
@@ -390,6 +400,13 @@ gimp_brush_core_start (GimpPaintCore     *paint_core,
       return FALSE;
     }
 
+  if (! core->dynamics)
+    {
+      g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
+                           _("No paint dynamics available for use with this tool."));
+      return FALSE;
+    }
+
   if (GIMP_BRUSH_CORE_GET_CLASS (core)->handles_transforming_brush)
     {
       gdouble fade_point;
@@ -402,14 +419,11 @@ gimp_brush_core_start (GimpPaintCore     *paint_core,
                                                 gimp_item_get_image (GIMP_ITEM (drawable)),
                                                 paint_core->pixel_dist);
 
-      if (core->dynamics)
-        {
-          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;
@@ -755,21 +769,21 @@ gimp_brush_core_get_paint_area (GimpPaintCore    *paint_core,
 
   if (GIMP_BRUSH_CORE_GET_CLASS (core)->handles_transforming_brush)
     {
+      gdouble fade_point;
+
       core->scale = paint_options->brush_scale;
       core->angle = paint_options->brush_angle;
       core->aspect_ratio = paint_options->brush_aspect_ratio;
 
-      if (core->dynamics)
-      {
-        gdouble fade_point = gimp_paint_options_get_fade (paint_options, gimp_item_get_image (GIMP_ITEM (drawable)),
-                                                          paint_core->pixel_dist);
+      fade_point = gimp_paint_options_get_fade (paint_options,
+                                                gimp_item_get_image (GIMP_ITEM (drawable)),
+                                                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);
@@ -845,10 +859,7 @@ gimp_brush_core_real_set_dynamics (GimpBrushCore *core,
                                    GimpDynamics  *dynamics)
 {
   if (core->dynamics)
-    {
-      g_object_unref (core->dynamics);
-      core->dynamics = NULL;
-    }
+    g_object_unref (core->dynamics);
 
   core->dynamics = dynamics;
 



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