diff --git a/app/widgets/gimppanedbox.c b/app/widgets/gimppanedbox.c index d76368b93d..a71edee48a 100644 --- a/app/widgets/gimppanedbox.c +++ b/app/widgets/gimppanedbox.c @@ -362,10 +362,12 @@ gimp_paned_box_drop_indicator_draw (GtkWidget *widget, gpointer data) { GimpPanedBox *paned_box = GIMP_PANED_BOX (widget); - GimpRGB color; + GeglColor *color; + gdouble rgba[4]; gsize i; - gimp_rgb_parse_hex (&color, DROP_HIGHLIGHT_COLOR, -1); + color = gimp_color_parse_hex (DROP_HIGHLIGHT_COLOR, -1); + gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgba); for (i = 0; i < G_N_ELEMENTS (paned_box->p->dnd_highlights); i++) { @@ -374,7 +376,10 @@ gimp_paned_box_drop_indicator_draw (GtkWidget *widget, if (! highlight->active) continue; - cairo_set_source_rgba (cr, color.r, color.g, color.b, highlight->opacity); + rgba[3] = highlight->opacity; + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgba); + + gimp_cairo_set_source_color (cr, color, NULL, FALSE, widget); cairo_rectangle (cr, highlight->area.x, @@ -384,6 +389,7 @@ gimp_paned_box_drop_indicator_draw (GtkWidget *widget, cairo_fill (cr); } + g_object_unref (color); return FALSE; } diff --git a/modules/display-filter-clip-warning.c b/modules/display-filter-clip-warning.c index 4e141f992a..cad72a4245 100644 --- a/modules/display-filter-clip-warning.c +++ b/modules/display-filter-clip-warning.c @@ -33,9 +33,9 @@ #include "libgimp/libgimp-intl.h" -#define DEFAULT_SHADOWS_COLOR (&(GimpRGB) {0.25, 0.25, 1.00, 1.00}) -#define DEFAULT_HIGHLIGHTS_COLOR (&(GimpRGB) {1.00, 0.25, 0.25, 1.00}) -#define DEFAULT_BOGUS_COLOR (&(GimpRGB) {1.00, 1.00, 0.25, 1.00}) +#define DEFAULT_SHADOWS_COLOR ((gdouble[]) {0.25, 0.25, 1.00, 1.00}) +#define DEFAULT_HIGHLIGHTS_COLOR ((gdouble[]) {1.00, 0.25, 0.25, 1.00}) +#define DEFAULT_BOGUS_COLOR ((gdouble[]) {1.00, 1.00, 0.25, 1.00}) #define CDISPLAY_TYPE_CLIP_WARNING (cdisplay_clip_warning_get_type ()) @@ -61,11 +61,11 @@ struct _CdisplayClipWarning GimpColorDisplay parent_instance; gboolean show_shadows; - GimpRGB shadows_color; + GeglColor *shadows_color; gboolean show_highlights; - GimpRGB highlights_color; + GeglColor *highlights_color; gboolean show_bogus; - GimpRGB bogus_color; + GeglColor *bogus_color; gboolean include_alpha; gboolean include_transparent; @@ -94,6 +94,7 @@ enum GType cdisplay_clip_warning_get_type (void); +static void cdisplay_clip_warning_finalize (GObject *object); static void cdisplay_clip_warning_set_property (GObject *object, guint property_id, const GValue *value, @@ -152,10 +153,14 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GimpColorDisplayClass *display_class = GIMP_COLOR_DISPLAY_CLASS (klass); + GeglColor *color = gegl_color_new (NULL); - object_class->get_property = cdisplay_clip_warning_get_property; - object_class->set_property = cdisplay_clip_warning_set_property; + object_class->finalize = cdisplay_clip_warning_finalize; + object_class->get_property = cdisplay_clip_warning_get_property; + object_class->set_property = cdisplay_clip_warning_set_property; + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), + DEFAULT_SHADOWS_COLOR); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SHOW_SHADOWS, "show-shadows", _("Show shadows"), @@ -163,14 +168,13 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass) TRUE, GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_PROP_RGB (object_class, PROP_SHADOWS_COLOR, - "shadows-color", - _("Shadows color"), - _("Shadows warning color"), - FALSE, - DEFAULT_SHADOWS_COLOR, - GIMP_PARAM_STATIC_STRINGS | - GIMP_CONFIG_PARAM_DEFAULTS); + GIMP_CONFIG_PROP_COLOR (object_class, PROP_SHADOWS_COLOR, + "shadows-color", + _("Shadows color"), + _("Shadows warning color"), + color, + GIMP_PARAM_STATIC_STRINGS | + GIMP_CONFIG_PARAM_DEFAULTS); gegl_param_spec_set_property_key ( g_object_class_find_property (G_OBJECT_CLASS (klass), "shadows-color"), @@ -183,14 +187,15 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass) TRUE, GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_PROP_RGB (object_class, PROP_HIGHLIGHTS_COLOR, - "highlights-color", - _("Highlights color"), - _("Highlights warning color"), - FALSE, - DEFAULT_HIGHLIGHTS_COLOR, - GIMP_PARAM_STATIC_STRINGS | - GIMP_CONFIG_PARAM_DEFAULTS); + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), + DEFAULT_HIGHLIGHTS_COLOR); + GIMP_CONFIG_PROP_COLOR (object_class, PROP_HIGHLIGHTS_COLOR, + "highlights-color", + _("Highlights color"), + _("Highlights warning color"), + color, + GIMP_PARAM_STATIC_STRINGS | + GIMP_CONFIG_PARAM_DEFAULTS); gegl_param_spec_set_property_key ( g_object_class_find_property (G_OBJECT_CLASS (klass), "highlights-color"), @@ -203,14 +208,15 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass) TRUE, GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_PROP_RGB (object_class, PROP_BOGUS_COLOR, - "bogus-color", - _("Bogus color"), - _("Bogus warning color"), - FALSE, - DEFAULT_BOGUS_COLOR, - GIMP_PARAM_STATIC_STRINGS | - GIMP_CONFIG_PARAM_DEFAULTS); + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), + DEFAULT_BOGUS_COLOR); + GIMP_CONFIG_PROP_COLOR (object_class, PROP_BOGUS_COLOR, + "bogus-color", + _("Bogus color"), + _("Bogus warning color"), + color, + GIMP_PARAM_STATIC_STRINGS | + GIMP_CONFIG_PARAM_DEFAULTS); gegl_param_spec_set_property_key ( g_object_class_find_property (G_OBJECT_CLASS (klass), "bogus-color"), @@ -235,6 +241,8 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass) display_class->icon_name = GIMP_ICON_DISPLAY_FILTER_CLIP_WARNING; display_class->convert_buffer = cdisplay_clip_warning_convert_buffer; + + g_object_unref (color); } static void @@ -245,6 +253,32 @@ cdisplay_clip_warning_class_finalize (CdisplayClipWarningClass *klass) static void cdisplay_clip_warning_init (CdisplayClipWarning *clip_warning) { + GeglColor *color; + + color = gegl_color_new (NULL); + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), + DEFAULT_SHADOWS_COLOR); + clip_warning->shadows_color = color; + + color = gegl_color_new (NULL); + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), + DEFAULT_HIGHLIGHTS_COLOR); + clip_warning->highlights_color = color; + + color = gegl_color_new (NULL); + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), + DEFAULT_BOGUS_COLOR); + clip_warning->bogus_color = color; +} + +static void +cdisplay_clip_warning_finalize (GObject *object) +{ + CdisplayClipWarning *clip_warning = CDISPLAY_CLIP_WARNING (object); + + g_clear_object (&clip_warning->shadows_color); + g_clear_object (&clip_warning->highlights_color); + g_clear_object (&clip_warning->bogus_color); } static void @@ -261,21 +295,21 @@ cdisplay_clip_warning_get_property (GObject *object, g_value_set_boolean (value, clip_warning->show_shadows); break; case PROP_SHADOWS_COLOR: - g_value_set_boxed (value, &clip_warning->shadows_color); + g_value_set_object (value, clip_warning->shadows_color); break; case PROP_SHOW_HIGHLIGHTS: g_value_set_boolean (value, clip_warning->show_highlights); break; case PROP_HIGHLIGHTS_COLOR: - g_value_set_boxed (value, &clip_warning->highlights_color); + g_value_set_object (value, clip_warning->highlights_color); break; case PROP_SHOW_BOGUS: g_value_set_boolean (value, clip_warning->show_bogus); break; case PROP_BOGUS_COLOR: - g_value_set_boxed (value, &clip_warning->bogus_color); + g_value_set_object (value, clip_warning->bogus_color); break; case PROP_INCLUDE_ALPHA: @@ -314,21 +348,24 @@ cdisplay_clip_warning_set_property (GObject *object, SET_MEMBER_VAL (show_shadows, gboolean, g_value_get_boolean (value)); break; case PROP_SHADOWS_COLOR: - SET_MEMBER_PTR (shadows_color, g_value_get_boxed (value)); + g_clear_object (&clip_warning->shadows_color); + clip_warning->shadows_color = gegl_color_duplicate (g_value_get_object (value)); break; case PROP_SHOW_HIGHLIGHTS: SET_MEMBER_VAL (show_highlights, gboolean, g_value_get_boolean (value)); break; case PROP_HIGHLIGHTS_COLOR: - SET_MEMBER_PTR (highlights_color, g_value_get_boxed (value)); + g_clear_object (&clip_warning->highlights_color); + clip_warning->highlights_color = gegl_color_duplicate (g_value_get_object (value)); break; case PROP_SHOW_BOGUS: SET_MEMBER_VAL (show_bogus, gboolean, g_value_get_boolean (value)); break; case PROP_BOGUS_COLOR: - SET_MEMBER_PTR (bogus_color, g_value_get_boxed (value)); + g_clear_object (&clip_warning->bogus_color); + clip_warning->bogus_color = gegl_color_duplicate (g_value_get_object (value)); break; case PROP_INCLUDE_ALPHA: @@ -343,6 +380,15 @@ cdisplay_clip_warning_set_property (GObject *object, break; } + if (property_id == PROP_SHADOWS_COLOR || + property_id == PROP_HIGHLIGHTS_COLOR || + property_id == PROP_BOGUS_COLOR) + { + cdisplay_clip_warning_update_colors (clip_warning); + g_object_notify (G_OBJECT (clip_warning), pspec->name); + gimp_color_display_changed (GIMP_COLOR_DISPLAY (clip_warning)); + } + #undef SET_MEMBER_PTR #undef SET_MEMBER_VAL } @@ -449,32 +495,42 @@ cdisplay_clip_warning_update_colors (CdisplayClipWarning *clip_warning) gfloat *alt_color = clip_warning->colors[i][1]; gfloat alt_value; gint n = 0; + gfloat rgb[3]; memset (color, 0, 3 * sizeof (gfloat)); if (i & WARNING_SHADOW) { - color[0] += clip_warning->shadows_color.r; - color[1] += clip_warning->shadows_color.g; - color[2] += clip_warning->shadows_color.b; + gegl_color_get_pixel (clip_warning->shadows_color, + babl_format ("R'G'B' float"), + rgb); + color[0] += rgb[0]; + color[1] += rgb[1]; + color[2] += rgb[2]; n++; } if (i & WARNING_HIGHLIGHT) { - color[0] += clip_warning->highlights_color.r; - color[1] += clip_warning->highlights_color.g; - color[2] += clip_warning->highlights_color.b; + gegl_color_get_pixel (clip_warning->highlights_color, + babl_format ("R'G'B' float"), + rgb); + color[0] += rgb[0]; + color[1] += rgb[1]; + color[2] += rgb[2]; n++; } if (i & WARNING_BOGUS) { - color[0] += clip_warning->bogus_color.r; - color[1] += clip_warning->bogus_color.g; - color[2] += clip_warning->bogus_color.b; + gegl_color_get_pixel (clip_warning->bogus_color, + babl_format ("R'G'B' float"), + rgb); + color[0] += rgb[0]; + color[1] += rgb[1]; + color[2] += rgb[2]; n++; } diff --git a/plug-ins/common/file-pdf-save.c b/plug-ins/common/file-pdf-save.c index 9753357bc1..7ecb002dff 100644 --- a/plug-ins/common/file-pdf-save.c +++ b/plug-ins/common/file-pdf-save.c @@ -232,7 +232,7 @@ static cairo_surface_t *get_cairo_surface (GimpDrawable *drawable gboolean as_mask, GError **error); -static GimpRGB get_layer_color (GimpLayer *layer, +static GeglColor * get_layer_color (GimpLayer *layer, gboolean *single); static void drawText (GimpLayer *layer, @@ -1463,11 +1463,11 @@ get_cairo_surface (GimpDrawable *drawable, /* A function to check if a drawable is single colored This allows to * convert bitmaps to vector where possible */ -static GimpRGB +static GeglColor * get_layer_color (GimpLayer *layer, gboolean *single) { - GimpRGB col; + GeglColor *col = gegl_color_new (NULL); gdouble red, green, blue, alpha; gdouble dev, devSum; gdouble median, pixels, count, percentile; @@ -1483,7 +1483,7 @@ get_layer_color (GimpLayer *layer, { /* FIXME: We can't do a proper histogram on indexed layers! */ *single = FALSE; - col. r = col.g = col.b = col.a = 0; + gegl_color_set_rgba (col, 0.0, 0.0, 0.0, 0.0); return col; } @@ -1528,11 +1528,7 @@ get_layer_color (GimpLayer *layer, devSum += dev; *single = devSum == 0; - col.r = red / 255; - col.g = green / 255; - col.b = blue / 255; - col.a = alpha / 255; - + gegl_color_set_rgba (col, red, green, blue, alpha); return col; } @@ -1891,8 +1887,8 @@ draw_layer (GimpLayer **layers, { /* For raster layers */ - GimpRGB layer_color; - gboolean single_color = FALSE; + GeglColor *layer_color; + gboolean single_color = FALSE; layer_color = get_layer_color (layer, &single_color); @@ -1902,11 +1898,7 @@ draw_layer (GimpLayer **layers, if (vectorize && single_color) { - cairo_set_source_rgba (cr, - layer_color.r, - layer_color.g, - layer_color.b, - layer_color.a * opacity); + gimp_cairo_set_source_color (cr, layer_color, NULL, FALSE, NULL); if (mask) cairo_mask_surface (cr, mask_image, x, y); else @@ -1938,6 +1930,8 @@ draw_layer (GimpLayer **layers, cairo_surface_destroy (layer_image); } + + g_object_unref (layer_color); } else { diff --git a/plug-ins/common/sphere-designer.c b/plug-ins/common/sphere-designer.c index 75488914cc..59fb159884 100644 --- a/plug-ins/common/sphere-designer.c +++ b/plug-ins/common/sphere-designer.c @@ -2486,15 +2486,15 @@ color1_changed (GimpColorButton *button) if (t) { GeglColor *color; - GimpRGB rgb; + gdouble rgba[4]; color = gimp_color_button_get_color (button); - gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb); + gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgba); - t->color1.x = rgb.r; - t->color1.y = rgb.g; - t->color1.z = rgb.b; - t->color1.w = rgb.a; + t->color1.x = rgba[0]; + t->color1.y = rgba[1]; + t->color1.z = rgba[2]; + t->color1.w = rgba[3]; restartrender (); @@ -2510,15 +2510,15 @@ color2_changed (GimpColorButton *button) if (t) { GeglColor *color; - GimpRGB rgb; + gdouble rgba[4]; color = gimp_color_button_get_color (button); - gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb); + gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgba); - t->color2.x = rgb.r; - t->color2.y = rgb.g; - t->color2.z = rgb.b; - t->color2.w = rgb.a; + t->color2.x = rgba[0]; + t->color2.y = rgba[1]; + t->color2.z = rgba[2]; + t->color2.w = rgba[3]; restartrender (); @@ -2531,7 +2531,7 @@ drawcolor1 (GtkWidget *w) { static GtkWidget *lastw = NULL; GeglColor *color; - GimpRGB rgb; + gdouble rgba[4]; texture *t = currenttexture (); if (w) @@ -2545,9 +2545,11 @@ drawcolor1 (GtkWidget *w) return; color = gegl_color_new (NULL); - gimp_rgba_set (&rgb, - t->color1.x, t->color1.y, t->color1.z, t->color1.w); - gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), &rgb); + rgba[0] = t->color1.x; + rgba[1] = t->color1.y; + rgba[2] = t->color1.z; + rgba[3] = t->color1.w; + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgba); gimp_color_button_set_color (GIMP_COLOR_BUTTON (w), color); g_object_unref (color); @@ -2558,7 +2560,7 @@ drawcolor2 (GtkWidget *w) { static GtkWidget *lastw = NULL; GeglColor *color; - GimpRGB rgb; + gdouble rgba[4]; texture *t = currenttexture (); if (w) @@ -2572,9 +2574,11 @@ drawcolor2 (GtkWidget *w) return; color = gegl_color_new (NULL); - gimp_rgba_set (&rgb, - t->color2.x, t->color2.y, t->color2.z, t->color2.w); - gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), &rgb); + rgba[0] = t->color2.x; + rgba[1] = t->color2.y; + rgba[2] = t->color2.z; + rgba[3] = t->color2.w; + gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgba); gimp_color_button_set_color (GIMP_COLOR_BUTTON (w), color); g_object_unref (color);