[gegl] gegl: fix gegl_param_color_set_default()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] gegl: fix gegl_param_color_set_default()
- Date: Sun, 2 Jun 2013 22:54:16 +0000 (UTC)
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]