[gimp] app: move the improved paint property copying code to GimpPaintOptions



commit 80c423ae4009ff381403f0477809b4b838c586b2
Author: Michael Natterer <mitch gimp org>
Date:   Fri Jun 29 13:08:45 2018 +0200

    app: move the improved paint property copying code to GimpPaintOptions
    
    and remove the old brush, dynamics, gradient property copying
    functions.

 app/paint/gimppaintoptions.c          | 174 +++++++++++++++++-----------------
 app/paint/gimppaintoptions.h          |  74 +++++++--------
 app/tools/gimp-tool-options-manager.c | 134 ++++++--------------------
 app/tools/tool_manager.c              |  21 ++--
 4 files changed, 169 insertions(+), 234 deletions(-)
---
diff --git a/app/paint/gimppaintoptions.c b/app/paint/gimppaintoptions.c
index a5659f43e1..b56b13b47e 100644
--- a/app/paint/gimppaintoptions.c
+++ b/app/paint/gimppaintoptions.c
@@ -1189,106 +1189,110 @@ gimp_paint_options_set_default_brush_hardness (GimpPaintOptions *paint_options,
     }
 }
 
-void
-gimp_paint_options_copy_brush_props (GimpPaintOptions *src,
-                                     GimpPaintOptions *dest)
+static const gchar *brush_props[] =
 {
-  gdouble  brush_size;
-  gdouble  brush_angle;
-  gdouble  brush_aspect_ratio;
-  gdouble  brush_spacing;
-  gdouble  brush_hardness;
-  gdouble  brush_force;
-
-  gboolean brush_link_size;
-  gboolean brush_link_angle;
-  gboolean brush_link_aspect_ratio;
-  gboolean brush_link_spacing;
-  gboolean brush_link_hardness;
+  "brush-size",
+  "brush-angle",
+  "brush-aspect-ratio",
+  "brush-spacing",
+  "brush-hardness",
+  "brush-force",
+  "brush-link-size",
+  "brush-link-angle",
+  "brush-link-aspect-ratio",
+  "brush-link-spacing",
+  "brush-link-hardness",
+  "brush-lock-to-view"
+};
 
-  gboolean brush_lock_to_view;
+static const gchar *dynamics_props[] =
+{
+  "dynamics-expanded",
+  "fade-reverse",
+  "fade-length",
+  "fade-unit",
+  "fade-repeat"
+};
 
-  g_return_if_fail (GIMP_IS_PAINT_OPTIONS (src));
-  g_return_if_fail (GIMP_IS_PAINT_OPTIONS (dest));
+static const gchar *gradient_props[] =
+{
+  "gradient-reverse",
+  "gradient-blend-color-space"
+};
 
-  g_object_get (src,
-                "brush-size",              &brush_size,
-                "brush-angle",             &brush_angle,
-                "brush-aspect-ratio",      &brush_aspect_ratio,
-                "brush-spacing",           &brush_spacing,
-                "brush-hardness",          &brush_hardness,
-                "brush-force",             &brush_force,
-                "brush-link-size",         &brush_link_size,
-                "brush-link-angle",        &brush_link_angle,
-                "brush-link-aspect-ratio", &brush_link_aspect_ratio,
-                "brush-link-spacing",      &brush_link_spacing,
-                "brush-link-hardness",     &brush_link_hardness,
-                "brush-lock-to-view",      &brush_lock_to_view,
-                NULL);
-
-  g_object_set (dest,
-                "brush-size",              brush_size,
-                "brush-angle",             brush_angle,
-                "brush-aspect-ratio",      brush_aspect_ratio,
-                "brush-spacing",           brush_spacing,
-                "brush-hardness",          brush_hardness,
-                "brush-force",             brush_force,
-                "brush-link-size",         brush_link_size,
-                "brush-link-angle",        brush_link_angle,
-                "brush-link-aspect-ratio", brush_link_aspect_ratio,
-                "brush-link-spacing",      brush_link_spacing,
-                "brush-link-hardness",     brush_link_hardness,
-                "brush-lock-to-view",      brush_lock_to_view,
-                NULL);
-}
+static const gint max_n_props = (G_N_ELEMENTS (brush_props) +
+                                 G_N_ELEMENTS (dynamics_props) +
+                                 G_N_ELEMENTS (gradient_props));
 
-void
-gimp_paint_options_copy_dynamics_props (GimpPaintOptions *src,
-                                        GimpPaintOptions *dest)
+gboolean
+gimp_paint_options_is_prop (const gchar         *prop_name,
+                            GimpContextPropMask  prop_mask)
 {
-  gboolean       dynamics_expanded;
-  gboolean       fade_reverse;
-  gdouble        fade_length;
-  GimpUnit       fade_unit;
-  GimpRepeatMode fade_repeat;
+  gint i;
 
-  g_return_if_fail (GIMP_IS_PAINT_OPTIONS (src));
-  g_return_if_fail (GIMP_IS_PAINT_OPTIONS (dest));
+  g_return_val_if_fail (prop_name != NULL, FALSE);
 
-  g_object_get (src,
-                "dynamics-expanded", &dynamics_expanded,
-                "fade-reverse",      &fade_reverse,
-                "fade-length",       &fade_length,
-                "fade-unit",         &fade_unit,
-                "fade-repeat",       &fade_repeat,
-                NULL);
-
-  g_object_set (dest,
-                "dynamics-expanded", dynamics_expanded,
-                "fade-reverse",      fade_reverse,
-                "fade-length",       fade_length,
-                "fade-unit",         fade_unit,
-                "fade-repeat",       fade_repeat,
-                NULL);
+  if (prop_mask & GIMP_CONTEXT_PROP_MASK_BRUSH)
+    {
+      for (i = 0; i < G_N_ELEMENTS (brush_props); i++)
+        if (! strcmp (prop_name, brush_props[i]))
+          return TRUE;
+    }
+
+  if (prop_mask & GIMP_CONTEXT_PROP_MASK_DYNAMICS)
+    {
+      for (i = 0; i < G_N_ELEMENTS (dynamics_props); i++)
+        if (! strcmp (prop_name, dynamics_props[i]))
+          return TRUE;
+    }
+
+  if (prop_mask & GIMP_CONTEXT_PROP_MASK_GRADIENT)
+    {
+      for (i = 0; i < G_N_ELEMENTS (gradient_props); i++)
+        if (! strcmp (prop_name, gradient_props[i]))
+          return TRUE;
+    }
+
+  return FALSE;
 }
 
 void
-gimp_paint_options_copy_gradient_props (GimpPaintOptions *src,
-                                        GimpPaintOptions *dest)
+gimp_paint_options_copy_props (GimpPaintOptions    *src,
+                               GimpPaintOptions    *dest,
+                               GimpContextPropMask  prop_mask)
 {
-  gboolean                    gradient_reverse;
-  GimpGradientBlendColorSpace gradient_blend_color_space;
+  const gchar *names[max_n_props];
+  GValue       values[max_n_props];
+  gint         n_props = 0;
+  gint         i;
 
   g_return_if_fail (GIMP_IS_PAINT_OPTIONS (src));
   g_return_if_fail (GIMP_IS_PAINT_OPTIONS (dest));
 
-  g_object_get (src,
-                "gradient-reverse",           &gradient_reverse,
-                "gradient-blend-color-space", &gradient_blend_color_space,
-                NULL);
+  if (prop_mask & GIMP_CONTEXT_PROP_MASK_BRUSH)
+    {
+      for (i = 0; i < G_N_ELEMENTS (brush_props); i++)
+        names[n_props++] = brush_props[i];
+    }
 
-  g_object_set (dest,
-                "gradient-reverse",           gradient_reverse,
-                "gradient-blend-color-space", gradient_blend_color_space,
-                NULL);
+  if (prop_mask & GIMP_CONTEXT_PROP_MASK_DYNAMICS)
+    {
+      for (i = 0; i < G_N_ELEMENTS (dynamics_props); i++)
+        names[n_props++] = dynamics_props[i];
+    }
+
+  if (prop_mask & GIMP_CONTEXT_PROP_MASK_GRADIENT)
+    {
+      for (i = 0; i < G_N_ELEMENTS (gradient_props); i++)
+        names[n_props++] = gradient_props[i];
+    }
+
+  if (n_props > 0)
+    {
+      g_object_getv (G_OBJECT (src), n_props, names, values);
+      g_object_setv (G_OBJECT (dest), n_props, names, values);
+
+      while (n_props--)
+        g_value_unset (&values[n_props]);
+    }
 }
diff --git a/app/paint/gimppaintoptions.h b/app/paint/gimppaintoptions.h
index 7933d64c42..37dcffefa5 100644
--- a/app/paint/gimppaintoptions.h
+++ b/app/paint/gimppaintoptions.h
@@ -128,49 +128,49 @@ struct _GimpPaintOptionsClass
 };
 
 
-GType              gimp_paint_options_get_type (void) G_GNUC_CONST;
+GType    gimp_paint_options_get_type (void) G_GNUC_CONST;
 
-GimpPaintOptions * gimp_paint_options_new      (GimpPaintInfo    *paint_info);
+GimpPaintOptions *
+         gimp_paint_options_new                (GimpPaintInfo       *paint_info);
 
-gdouble            gimp_paint_options_get_fade (GimpPaintOptions *paint_options,
-                                                GimpImage        *image,
-                                                gdouble           pixel_dist);
+gdouble  gimp_paint_options_get_fade           (GimpPaintOptions    *options,
+                                                GimpImage           *image,
+                                                gdouble              pixel_dist);
 
-gdouble          gimp_paint_options_get_jitter (GimpPaintOptions *paint_options,
-                                                GimpImage        *image);
+gdouble  gimp_paint_options_get_jitter         (GimpPaintOptions    *options,
+                                                GimpImage           *image);
 
-gboolean gimp_paint_options_get_gradient_color (GimpPaintOptions *paint_options,
-                                                GimpImage        *image,
-                                                gdouble           grad_point,
-                                                gdouble           pixel_dist,
-                                                GimpRGB          *color);
+gboolean gimp_paint_options_get_gradient_color (GimpPaintOptions    *options,
+                                                GimpImage           *image,
+                                                gdouble              grad_point,
+                                                gdouble              pixel_dist,
+                                                GimpRGB             *color);
 
 GimpBrushApplicationMode
-        gimp_paint_options_get_brush_mode      (GimpPaintOptions *paint_options);
-
-void    gimp_paint_options_set_default_brush_size
-                                               (GimpPaintOptions *paint_options,
-                                                GimpBrush        *brush);
-void    gimp_paint_options_set_default_brush_angle
-                                               (GimpPaintOptions *paint_options,
-                                                GimpBrush        *brush);
-void    gimp_paint_options_set_default_brush_aspect_ratio
-                                               (GimpPaintOptions *paint_options,
-                                                GimpBrush        *brush);
-void    gimp_paint_options_set_default_brush_spacing
-                                               (GimpPaintOptions *paint_options,
-                                                GimpBrush        *brush);
-
-void    gimp_paint_options_set_default_brush_hardness
-                                               (GimpPaintOptions *paint_options,
-                                                GimpBrush        *brush);
-
-void    gimp_paint_options_copy_brush_props    (GimpPaintOptions *src,
-                                                GimpPaintOptions *dest);
-void    gimp_paint_options_copy_dynamics_props (GimpPaintOptions *src,
-                                                GimpPaintOptions *dest);
-void    gimp_paint_options_copy_gradient_props (GimpPaintOptions *src,
-                                                GimpPaintOptions *dest);
+         gimp_paint_options_get_brush_mode     (GimpPaintOptions    *options);
+
+void     gimp_paint_options_set_default_brush_size
+                                               (GimpPaintOptions    *options,
+                                                GimpBrush           *brush);
+void     gimp_paint_options_set_default_brush_angle
+                                               (GimpPaintOptions    *options,
+                                                GimpBrush           *brush);
+void     gimp_paint_options_set_default_brush_aspect_ratio
+                                               (GimpPaintOptions    *options,
+                                                GimpBrush           *brush);
+void     gimp_paint_options_set_default_brush_spacing
+                                               (GimpPaintOptions    *options,
+                                                GimpBrush           *brush);
+
+void     gimp_paint_options_set_default_brush_hardness
+                                               (GimpPaintOptions    *options,
+                                                GimpBrush           *brush);
+
+gboolean gimp_paint_options_is_prop            (const gchar         *prop_name,
+                                                GimpContextPropMask  prop_mask);
+void     gimp_paint_options_copy_props         (GimpPaintOptions    *src,
+                                                GimpPaintOptions    *dest,
+                                                GimpContextPropMask  prop_mask);
 
 
 #endif  /*  __GIMP_PAINT_OPTIONS_H__  */
diff --git a/app/tools/gimp-tool-options-manager.c b/app/tools/gimp-tool-options-manager.c
index ad8e14dd3a..7d35555e10 100644
--- a/app/tools/gimp-tool-options-manager.c
+++ b/app/tools/gimp-tool-options-manager.c
@@ -313,41 +313,6 @@ tool_options_manager_global_notify (GimpCoreConfig         *config,
   manager->global_props = global_props;
 }
 
-static const gchar *brush_props[] =
-{
-  "brush-size",
-  "brush-angle",
-  "brush-aspect-ratio",
-  "brush-spacing",
-  "brush-hardness",
-  "brush-force",
-  "brush-link-size",
-  "brush-link-angle",
-  "brush-link-aspect-ratio",
-  "brush-link-spacing",
-  "brush-link-hardness",
-  "brush-lock-to-view"
-};
-
-static const gchar *dynamics_props[] =
-{
-  "dynamics-expanded",
-  "fade-reverse",
-  "fade-length",
-  "fade-unit",
-  "fade-repeat"
-};
-
-static const gchar *gradient_props[] =
-{
-  "gradient-reverse",
-  "gradient-blend-color-space"
-};
-
-static const gint max_n_props = (G_N_ELEMENTS (brush_props) +
-                                 G_N_ELEMENTS (dynamics_props) +
-                                 G_N_ELEMENTS (gradient_props));
-
 static void
 tool_options_manager_paint_options_notify (GimpPaintOptions *src,
                                            const GParamSpec *pspec,
@@ -357,9 +322,8 @@ tool_options_manager_paint_options_notify (GimpPaintOptions *src,
   GimpCoreConfig         *config = gimp->config;
   GimpToolOptionsManager *manager;
   GimpToolInfo           *tool_info;
-  gboolean                active = FALSE;
-  GValue                  value  = G_VALUE_INIT;
-  gint                    i;
+  GimpContextPropMask     prop_mask = 0;
+  gboolean                active    = FALSE;
 
   manager = g_object_get_qdata (G_OBJECT (gimp), manager_quark);
 
@@ -377,46 +341,39 @@ tool_options_manager_paint_options_notify (GimpPaintOptions *src,
   if ((active || config->global_brush) &&
       tool_info->context_props & GIMP_CONTEXT_PROP_MASK_BRUSH)
     {
-      for (i = 0; i < G_N_ELEMENTS (brush_props); i++)
-        if (! strcmp (pspec->name, brush_props[i]))
-          goto copy_value;
+      prop_mask |= GIMP_CONTEXT_PROP_MASK_BRUSH;
     }
-
-  if ((active || config->global_dynamics) &&
-      tool_info->context_props & GIMP_CONTEXT_PROP_MASK_DYNAMICS)
+  else if ((active || config->global_dynamics) &&
+           tool_info->context_props & GIMP_CONTEXT_PROP_MASK_DYNAMICS)
     {
-      for (i = 0; i < G_N_ELEMENTS (dynamics_props); i++)
-        if (! strcmp (pspec->name, dynamics_props[i]))
-          goto copy_value;
+      prop_mask |= GIMP_CONTEXT_PROP_MASK_DYNAMICS;
     }
-
-  if ((active || config->global_gradient) &&
-      tool_info->context_props & GIMP_CONTEXT_PROP_MASK_GRADIENT)
+  else if ((active || config->global_gradient) &&
+           tool_info->context_props & GIMP_CONTEXT_PROP_MASK_GRADIENT)
     {
-      for (i = 0; i < G_N_ELEMENTS (gradient_props); i++)
-        if (! strcmp (pspec->name, gradient_props[i]))
-          goto copy_value;
+      prop_mask |= GIMP_CONTEXT_PROP_MASK_GRADIENT;
     }
 
-  return;
-
- copy_value:
+  if (gimp_paint_options_is_prop (pspec->name, prop_mask))
+    {
+      GValue value = G_VALUE_INIT;
 
-  g_value_init (&value, pspec->value_type);
+      g_value_init (&value, pspec->value_type);
 
-  g_object_get_property (G_OBJECT (src), pspec->name, &value);
+      g_object_get_property (G_OBJECT (src), pspec->name, &value);
 
-  g_signal_handlers_block_by_func (dest,
-                                   tool_options_manager_paint_options_notify,
-                                   src);
+      g_signal_handlers_block_by_func (dest,
+                                       tool_options_manager_paint_options_notify,
+                                       src);
 
-  g_object_set_property (G_OBJECT (dest), pspec->name, &value);
+      g_object_set_property (G_OBJECT (dest), pspec->name, &value);
 
-  g_signal_handlers_unblock_by_func (dest,
-                                     tool_options_manager_paint_options_notify,
-                                     src);
+      g_signal_handlers_unblock_by_func (dest,
+                                         tool_options_manager_paint_options_notify,
+                                         src);
 
-  g_value_unset (&value);
+      g_value_unset (&value);
+    }
 }
 
 static void
@@ -424,46 +381,15 @@ tool_options_manager_copy_paint_props (GimpPaintOptions    *src,
                                        GimpPaintOptions    *dest,
                                        GimpContextPropMask  prop_mask)
 {
-  const gchar *names[max_n_props];
-  GValue       values[max_n_props];
-  gint         n_props = 0;
-  gint         i;
-
-  if (prop_mask & GIMP_CONTEXT_PROP_MASK_BRUSH)
-    {
-      for (i = 0; i < G_N_ELEMENTS (brush_props); i++)
-        names[n_props++] = brush_props[i];
-    }
-
-  if (prop_mask & GIMP_CONTEXT_PROP_MASK_DYNAMICS)
-    {
-      for (i = 0; i < G_N_ELEMENTS (dynamics_props); i++)
-        names[n_props++] = dynamics_props[i];
-    }
-
-  if (prop_mask & GIMP_CONTEXT_PROP_MASK_GRADIENT)
-    {
-      for (i = 0; i < G_N_ELEMENTS (gradient_props); i++)
-        names[n_props++] = gradient_props[i];
-    }
-
-  if (n_props > 0)
-    {
-      g_object_getv (G_OBJECT (src), n_props, names, values);
-
-      g_signal_handlers_block_by_func (dest,
-                                       tool_options_manager_paint_options_notify,
-                                       src);
+  g_signal_handlers_block_by_func (dest,
+                                   tool_options_manager_paint_options_notify,
+                                   src);
 
-      g_object_setv (G_OBJECT (dest), n_props, names, values);
+  gimp_paint_options_copy_props (src, dest, prop_mask);
 
-      g_signal_handlers_unblock_by_func (dest,
-                                         tool_options_manager_paint_options_notify,
-                                         src);
-
-      while (n_props--)
-        g_value_unset (&values[n_props]);
-    }
+  g_signal_handlers_unblock_by_func (dest,
+                                     tool_options_manager_paint_options_notify,
+                                     src);
 }
 
 static void
diff --git a/app/tools/tool_manager.c b/app/tools/tool_manager.c
index 8b7b9d4510..ebbe3914ec 100644
--- a/app/tools/tool_manager.c
+++ b/app/tools/tool_manager.c
@@ -739,8 +739,12 @@ tool_manager_preset_changed (GimpContext     *user_context,
 
   if (GIMP_IS_PAINT_OPTIONS (preset->tool_options))
     {
-      GimpToolOptions *src  = preset->tool_options;
-      GimpToolOptions *dest = tool_manager->active_tool->tool_info->tool_options;
+      GimpToolOptions     *src;
+      GimpToolOptions     *dest;
+      GimpContextPropMask  prop_mask = 0;
+
+      src  = preset->tool_options;
+      dest = tool_manager->active_tool->tool_info->tool_options;
 
       /*  copy various data objects' additional tool options again
        *  manually, they might have been overwritten by e.g. the "link
@@ -748,16 +752,17 @@ tool_manager_preset_changed (GimpContext     *user_context,
        *  gimptooloptions-gui.c
        */
       if (preset->use_brush)
-        gimp_paint_options_copy_brush_props (GIMP_PAINT_OPTIONS (src),
-                                             GIMP_PAINT_OPTIONS (dest));
+        prop_mask |= GIMP_CONTEXT_PROP_MASK_BRUSH;
 
       if (preset->use_dynamics)
-        gimp_paint_options_copy_dynamics_props (GIMP_PAINT_OPTIONS (src),
-                                                GIMP_PAINT_OPTIONS (dest));
+        prop_mask |= GIMP_CONTEXT_PROP_MASK_DYNAMICS;
 
       if (preset->use_gradient)
-        gimp_paint_options_copy_gradient_props (GIMP_PAINT_OPTIONS (src),
-                                                GIMP_PAINT_OPTIONS (dest));
+        prop_mask |= GIMP_CONTEXT_PROP_MASK_GRADIENT;
+
+      gimp_paint_options_copy_props (GIMP_PAINT_OPTIONS (src),
+                                     GIMP_PAINT_OPTIONS (dest),
+                                     prop_mask);
     }
 }
 


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