[gegl] gegl: fix gegl_param_color_set_default()



commit c10f9517ca5955dc147c093ec61d851635ca0f86
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jun 3 00:52:17 2013 +0200

    gegl: fix gegl_param_color_set_default()
    
    Same fix here: can't treat object default values by reference, we
    need to copy them or everybody could change the default.
    Add gegl_color_duplicate().

 gegl/property-types/gegl-color.c |   40 +++++++++++++++++++++++++------------
 gegl/property-types/gegl-color.h |   10 +++++++++
 2 files changed, 37 insertions(+), 13 deletions(-)
---
diff --git a/gegl/property-types/gegl-color.c b/gegl/property-types/gegl-color.c
index 77f2518..0584e49 100644
--- a/gegl/property-types/gegl-color.c
+++ b/gegl/property-types/gegl-color.c
@@ -258,30 +258,30 @@ gegl_color_float4 (GeglColor *self)
 }
 #endif
 
-void         gegl_color_set_pixel              (GeglColor   *color,
-                                                const Babl  *format,
-                                                const void  *pixel)
+void
+gegl_color_set_pixel (GeglColor   *color,
+                      const Babl  *format,
+                      const void  *pixel)
 {
   g_return_if_fail (GEGL_IS_COLOR (color));
   g_return_if_fail (format);
   g_return_if_fail (pixel);
 
-  babl_process (
-      babl_fish (format, babl_format ("RGBA float")),
-      pixel, color->priv->rgba_color, 1);
+  babl_process (babl_fish (format, babl_format ("RGBA float")),
+                pixel, color->priv->rgba_color, 1);
 }
 
-void         gegl_color_get_pixel              (GeglColor   *color,
-                                                const Babl  *format,
-                                                void        *pixel)
+void
+gegl_color_get_pixel (GeglColor   *color,
+                      const Babl  *format,
+                      void        *pixel)
 {
   g_return_if_fail (GEGL_IS_COLOR (color));
   g_return_if_fail (format);
   g_return_if_fail (pixel);
 
-  babl_process (
-      babl_fish (babl_format ("RGBA float"), format),
-      color->priv->rgba_color, pixel, 1);
+  babl_process (babl_fish (babl_format ("RGBA float"), format),
+                color->priv->rgba_color, pixel, 1);
 }
 
 void
@@ -443,6 +443,20 @@ gegl_color_new (const gchar *string)
   return g_object_new (GEGL_TYPE_COLOR, NULL);
 }
 
+GeglColor *
+gegl_color_duplicate (GeglColor *color)
+{
+  GeglColor *new;
+
+  g_return_val_if_fail (GEGL_IS_COLOR (color), NULL);
+
+  new = g_object_new (GEGL_TYPE_COLOR, NULL);
+
+  memcpy (new->priv, color->priv, sizeof (GeglColorPrivate));
+
+  return new;
+}
+
 /* --------------------------------------------------------------------------
  * A GParamSpec class to describe behavior of GeglColor as an object property
  * follows.
@@ -496,7 +510,7 @@ gegl_param_color_set_default (GParamSpec *param_spec,
 {
   GeglParamColor *gegl_color = GEGL_PARAM_COLOR (param_spec);
 
-  g_value_set_object (value, gegl_color->default_color);
+  g_value_take_object (value, gegl_color_duplicate (gegl_color->default_color));
 }
 
 GType
diff --git a/gegl/property-types/gegl-color.h b/gegl/property-types/gegl-color.h
index c521eef..d73c753 100644
--- a/gegl/property-types/gegl-color.h
+++ b/gegl/property-types/gegl-color.h
@@ -66,6 +66,16 @@ GType        gegl_color_get_type               (void) G_GNUC_CONST;
 GeglColor *  gegl_color_new                    (const gchar *string);
 
 /**
+ * gegl_color_duplicate:
+ * @color: the color to duplicate.
+ *
+ * Creates a copy of @curve.
+ *
+ * Returns the copied #GeglColor.
+ */
+GeglColor *  gegl_color_duplicate              (GeglColor   *color);
+
+/**
  * gegl_color_get_rgba:
  * @color: a #GeglColor
  * @red: (out): red return location.


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