From ef548fff65892836d75d33472d494dd7f6c2ea12 Mon Sep 17 00:00:00 2001 From: Alx Sa Date: Wed, 20 Mar 2024 02:53:41 +0000 Subject: [PATCH] widgets,modules,plug-ins: GeglColor ports After the color space invasion, the Clip Warning filter no longer had color areas for its shadow, highlights, and bogus color properties. This patch ports them to GeglColor so the widget can be created correctly. GimpRGB structs are also converted to GeglColor in GimpPanedBox and two plug-ins. --- app/widgets/gimppanedbox.c | 12 ++- modules/display-filter-clip-warning.c | 150 ++++++++++++++++++-------- plug-ins/common/file-pdf-save.c | 26 ++--- plug-ins/common/sphere-designer.c | 44 ++++---- 4 files changed, 146 insertions(+), 86 deletions(-) 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);