mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00
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.
This commit is contained in:
parent
0bc99a29e1
commit
ef548fff65
4 changed files with 146 additions and 86 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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->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,12 +168,11 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass)
|
|||
TRUE,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
|
||||
GIMP_CONFIG_PROP_RGB (object_class, PROP_SHADOWS_COLOR,
|
||||
GIMP_CONFIG_PROP_COLOR (object_class, PROP_SHADOWS_COLOR,
|
||||
"shadows-color",
|
||||
_("Shadows color"),
|
||||
_("Shadows warning color"),
|
||||
FALSE,
|
||||
DEFAULT_SHADOWS_COLOR,
|
||||
color,
|
||||
GIMP_PARAM_STATIC_STRINGS |
|
||||
GIMP_CONFIG_PARAM_DEFAULTS);
|
||||
|
||||
|
@ -183,12 +187,13 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass)
|
|||
TRUE,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
|
||||
GIMP_CONFIG_PROP_RGB (object_class, PROP_HIGHLIGHTS_COLOR,
|
||||
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"),
|
||||
FALSE,
|
||||
DEFAULT_HIGHLIGHTS_COLOR,
|
||||
color,
|
||||
GIMP_PARAM_STATIC_STRINGS |
|
||||
GIMP_CONFIG_PARAM_DEFAULTS);
|
||||
|
||||
|
@ -203,12 +208,13 @@ cdisplay_clip_warning_class_init (CdisplayClipWarningClass *klass)
|
|||
TRUE,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
|
||||
GIMP_CONFIG_PROP_RGB (object_class, PROP_BOGUS_COLOR,
|
||||
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"),
|
||||
FALSE,
|
||||
DEFAULT_BOGUS_COLOR,
|
||||
color,
|
||||
GIMP_PARAM_STATIC_STRINGS |
|
||||
GIMP_CONFIG_PARAM_DEFAULTS);
|
||||
|
||||
|
@ -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++;
|
||||
}
|
||||
|
|
|
@ -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,7 +1887,7 @@ draw_layer (GimpLayer **layers,
|
|||
{
|
||||
/* For raster layers */
|
||||
|
||||
GimpRGB layer_color;
|
||||
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
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue