diff --git a/app/core/gimp-cairo.c b/app/core/gimp-cairo.c index 9d5574f850..4432360801 100644 --- a/app/core/gimp-cairo.c +++ b/app/core/gimp-cairo.c @@ -42,27 +42,28 @@ static cairo_user_data_key_t surface_data_key = { 0, }; cairo_pattern_t * -gimp_cairo_pattern_create_stipple (const GimpRGB *fg, - const GimpRGB *bg, - gint index, - gdouble offset_x, - gdouble offset_y) +gimp_cairo_pattern_create_stipple (GeglColor *fg, + GeglColor *bg, + gint index, + gdouble offset_x, + gdouble offset_y, + const Babl *render_space) { cairo_surface_t *surface; cairo_pattern_t *pattern; guchar *data; guchar *d; - guchar fg_r, fg_g, fg_b, fg_a; - guchar bg_r, bg_g, bg_b, bg_a; + guchar fg_rgba[4]; + guchar bg_rgba[4]; gint x, y; - g_return_val_if_fail (fg != NULL, NULL); - g_return_val_if_fail (bg != NULL, NULL); + g_return_val_if_fail (GEGL_IS_COLOR (fg), NULL); + g_return_val_if_fail (GEGL_IS_COLOR (bg), NULL); data = g_malloc (8 * 8 * 4); - gimp_rgba_get_uchar (fg, &fg_r, &fg_g, &fg_b, &fg_a); - gimp_rgba_get_uchar (bg, &bg_r, &bg_g, &bg_b, &bg_a); + gegl_color_get_pixel (fg, babl_format_with_space ("R'G'B'A u8", render_space), fg_rgba); + gegl_color_get_pixel (bg, babl_format_with_space ("R'G'B'A u8", render_space), bg_rgba); d = data; @@ -71,9 +72,9 @@ gimp_cairo_pattern_create_stipple (const GimpRGB *fg, for (x = 0; x < 8; x++) { if ((x + y + index) % 8 >= 4) - GIMP_CAIRO_ARGB32_SET_PIXEL (d, fg_r, fg_g, fg_b, fg_a); + GIMP_CAIRO_ARGB32_SET_PIXEL (d, fg_rgba[0], fg_rgba[1], fg_rgba[2], fg_rgba[3]); else - GIMP_CAIRO_ARGB32_SET_PIXEL (d, bg_r, bg_g, bg_b, bg_a); + GIMP_CAIRO_ARGB32_SET_PIXEL (d, bg_rgba[0], bg_rgba[1], bg_rgba[2], bg_rgba[3]); d += 4; } diff --git a/app/core/gimp-cairo.h b/app/core/gimp-cairo.h index b76774059b..8c2713918b 100644 --- a/app/core/gimp-cairo.h +++ b/app/core/gimp-cairo.h @@ -25,27 +25,28 @@ #define __APP_GIMP_CAIRO_H__ -cairo_pattern_t * gimp_cairo_pattern_create_stipple (const GimpRGB *fg, - const GimpRGB *bg, - gint index, - gdouble offset_x, - gdouble offset_y); +cairo_pattern_t * gimp_cairo_pattern_create_stipple (GeglColor *fg, + GeglColor *bg, + gint index, + gdouble offset_x, + gdouble offset_y, + const Babl *render_space); -void gimp_cairo_arc (cairo_t *cr, - gdouble center_x, - gdouble center_y, - gdouble radius, - gdouble start_angle, - gdouble slice_angle); -void gimp_cairo_rounded_rectangle (cairo_t *cr, - gdouble x, - gdouble y, - gdouble width, - gdouble height, - gdouble corner_radius); -void gimp_cairo_segments (cairo_t *cr, - GimpSegment *segs, - gint n_segs); +void gimp_cairo_arc (cairo_t *cr, + gdouble center_x, + gdouble center_y, + gdouble radius, + gdouble start_angle, + gdouble slice_angle); +void gimp_cairo_rounded_rectangle (cairo_t *cr, + gdouble x, + gdouble y, + gdouble width, + gdouble height, + gdouble corner_radius); +void gimp_cairo_segments (cairo_t *cr, + GimpSegment *segs, + gint n_segs); #endif /* __APP_GIMP_CAIRO_H__ */ diff --git a/app/core/gimpgrid.c b/app/core/gimpgrid.c index 84b631b714..a063ec3a7c 100644 --- a/app/core/gimpgrid.c +++ b/app/core/gimpgrid.c @@ -54,6 +54,7 @@ enum }; +static void gimp_grid_finalize (GObject *object); static void gimp_grid_get_property (GObject *object, guint property_id, GValue *value, @@ -67,20 +68,20 @@ static void gimp_grid_set_property (GObject *object, G_DEFINE_TYPE_WITH_CODE (GimpGrid, gimp_grid, GIMP_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (GIMP_TYPE_CONFIG, NULL)) +#define parent_class gimp_grid_parent_class + static void gimp_grid_class_init (GimpGridClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - GimpRGB black; - GimpRGB white; + GeglColor *black = gegl_color_new ("black"); + GeglColor *white = gegl_color_new ("white"); + object_class->finalize = gimp_grid_finalize; object_class->get_property = gimp_grid_get_property; object_class->set_property = gimp_grid_set_property; - gimp_rgba_set (&black, 0.0, 0.0, 0.0, GIMP_OPACITY_OPAQUE); - gimp_rgba_set (&white, 1.0, 1.0, 1.0, GIMP_OPACITY_OPAQUE); - GIMP_CONFIG_PROP_ENUM (object_class, PROP_STYLE, "style", _("Line style"), @@ -89,20 +90,20 @@ gimp_grid_class_init (GimpGridClass *klass) GIMP_GRID_SOLID, GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_PROP_RGB (object_class, PROP_FGCOLOR, - "fgcolor", - _("Foreground color"), - _("The foreground color of the grid."), - TRUE, &black, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_COLOR (object_class, PROP_FGCOLOR, + "fgcolor", + _("Foreground color"), + _("The foreground color of the grid."), + /*TRUE,*/ black, + GIMP_PARAM_STATIC_STRINGS); - GIMP_CONFIG_PROP_RGB (object_class, PROP_BGCOLOR, - "bgcolor", - _("Background color"), - _("The background color of the grid; " - "only used in double dashed line style."), - TRUE, &white, - GIMP_PARAM_STATIC_STRINGS); + GIMP_CONFIG_PROP_COLOR (object_class, PROP_BGCOLOR, + "bgcolor", + _("Background color"), + _("The background color of the grid; " + "only used in double dashed line style."), + /*TRUE,*/ white, + GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_XSPACING, "xspacing", @@ -149,11 +150,27 @@ gimp_grid_class_init (GimpGridClass *klass) NULL, FALSE, FALSE, GIMP_UNIT_INCH, GIMP_PARAM_STATIC_STRINGS); + + g_object_unref (black); + g_object_unref (white); } static void gimp_grid_init (GimpGrid *grid) { + grid->fgcolor = gegl_color_new ("black"); + grid->bgcolor = gegl_color_new ("white"); +} + +static void +gimp_grid_finalize (GObject *object) +{ + GimpGrid *grid = GIMP_GRID (object); + + g_object_unref (grid->fgcolor); + g_object_unref (grid->bgcolor); + + G_OBJECT_CLASS (parent_class)->finalize (object); } static void @@ -170,10 +187,10 @@ gimp_grid_get_property (GObject *object, g_value_set_enum (value, grid->style); break; case PROP_FGCOLOR: - g_value_set_boxed (value, &grid->fgcolor); + g_value_set_object (value, grid->fgcolor); break; case PROP_BGCOLOR: - g_value_set_boxed (value, &grid->bgcolor); + g_value_set_object (value, grid->bgcolor); break; case PROP_XSPACING: g_value_set_double (value, grid->xspacing); @@ -206,7 +223,6 @@ gimp_grid_set_property (GObject *object, GParamSpec *pspec) { GimpGrid *grid = GIMP_GRID (object); - GimpRGB *color; switch (property_id) { @@ -214,12 +230,12 @@ gimp_grid_set_property (GObject *object, grid->style = g_value_get_enum (value); break; case PROP_FGCOLOR: - color = g_value_get_boxed (value); - grid->fgcolor = *color; + g_clear_object (&grid->fgcolor); + grid->fgcolor = gegl_color_duplicate (g_value_get_object (value)); break; case PROP_BGCOLOR: - color = g_value_get_boxed (value); - grid->bgcolor = *color; + g_clear_object (&grid->bgcolor); + grid->bgcolor = gegl_color_duplicate (g_value_get_object (value)); break; case PROP_XSPACING: grid->xspacing = g_value_get_double (value); @@ -256,24 +272,20 @@ gimp_grid_get_style (GimpGrid *grid) return grid->style; } -void -gimp_grid_get_fgcolor (GimpGrid *grid, - GimpRGB *fgcolor) +GeglColor * +gimp_grid_get_fgcolor (GimpGrid *grid) { - g_return_if_fail (GIMP_IS_GRID (grid)); - g_return_if_fail (fgcolor != NULL); + g_return_val_if_fail (GIMP_IS_GRID (grid), NULL); - *fgcolor = grid->fgcolor; + return grid->fgcolor; } -void -gimp_grid_get_bgcolor (GimpGrid *grid, - GimpRGB *bgcolor) +GeglColor * +gimp_grid_get_bgcolor (GimpGrid *grid) { - g_return_if_fail (GIMP_IS_GRID (grid)); - g_return_if_fail (bgcolor != NULL); + g_return_val_if_fail (GIMP_IS_GRID (grid), NULL); - *bgcolor = grid->bgcolor; + return grid->bgcolor; } void diff --git a/app/core/gimpgrid.h b/app/core/gimpgrid.h index b7d45b2efc..c9e98af842 100644 --- a/app/core/gimpgrid.h +++ b/app/core/gimpgrid.h @@ -40,8 +40,8 @@ struct _GimpGrid GimpObject parent_instance; GimpGridStyle style; - GimpRGB fgcolor; - GimpRGB bgcolor; + GeglColor *fgcolor; + GeglColor *bgcolor; gdouble xspacing; gdouble yspacing; GimpUnit spacing_unit; @@ -57,25 +57,23 @@ struct _GimpGridClass }; -GType gimp_grid_get_type (void) G_GNUC_CONST; +GType gimp_grid_get_type (void) G_GNUC_CONST; -GimpGridStyle gimp_grid_get_style (GimpGrid *grid); +GimpGridStyle gimp_grid_get_style (GimpGrid *grid); -void gimp_grid_get_fgcolor (GimpGrid *grid, - GimpRGB *fgcolor); -void gimp_grid_get_bgcolor (GimpGrid *grid, - GimpRGB *bgcolor); +GeglColor * gimp_grid_get_fgcolor (GimpGrid *grid); +GeglColor * gimp_grid_get_bgcolor (GimpGrid *grid); -void gimp_grid_get_spacing (GimpGrid *grid, - gdouble *xspacing, - gdouble *yspacing); -void gimp_grid_get_offset (GimpGrid *grid, - gdouble *xoffset, - gdouble *yoffset); +void gimp_grid_get_spacing (GimpGrid *grid, + gdouble *xspacing, + gdouble *yspacing); +void gimp_grid_get_offset (GimpGrid *grid, + gdouble *xoffset, + gdouble *yoffset); -const gchar * gimp_grid_parasite_name (void) G_GNUC_CONST; -GimpParasite * gimp_grid_to_parasite (GimpGrid *grid); -GimpGrid * gimp_grid_from_parasite (const GimpParasite *parasite); +const gchar * gimp_grid_parasite_name (void) G_GNUC_CONST; +GimpParasite * gimp_grid_to_parasite (GimpGrid *grid); +GimpGrid * gimp_grid_from_parasite (const GimpParasite *parasite); #endif /* __GIMP_GRID_H__ */ diff --git a/app/display/gimpcanvas-style.c b/app/display/gimpcanvas-style.c index 8d479618fd..0172988272 100644 --- a/app/display/gimpcanvas-style.c +++ b/app/display/gimpcanvas-style.c @@ -28,73 +28,201 @@ #include "display-types.h" +#include "config/gimpcoreconfig.h" + #include "core/gimp-cairo.h" #include "core/gimpgrid.h" #include "core/gimplayer.h" +#include "gimpcanvas.h" #include "gimpcanvas-style.h" /* Styles for common and custom guides. */ -static const GimpRGB guide_normal_fg = { 0.0, 0.0, 0.0, 1.0 }; -static const GimpRGB guide_normal_bg = { 0.0, 0.8, 1.0, 1.0 }; -static const GimpRGB guide_active_fg = { 0.0, 0.0, 0.0, 1.0 }; -static const GimpRGB guide_active_bg = { 1.0, 0.0, 0.0, 1.0 }; +static GeglColor *guide_normal_fg; +static GeglColor *guide_normal_bg; +static GeglColor *guide_active_fg; +static GeglColor *guide_active_bg; -static const GimpRGB guide_mirror_normal_fg = { 1.0, 1.0, 1.0, 1.0 }; -static const GimpRGB guide_mirror_normal_bg = { 0.0, 1.0, 0.0, 1.0 }; -static const GimpRGB guide_mirror_active_fg = { 0.0, 1.0, 0.0, 1.0 }; -static const GimpRGB guide_mirror_active_bg = { 1.0, 0.0, 0.0, 1.0 }; +static GeglColor *guide_mirror_normal_fg; +static GeglColor *guide_mirror_normal_bg; +static GeglColor *guide_mirror_active_fg; +static GeglColor *guide_mirror_active_bg; -static const GimpRGB guide_mandala_normal_fg = { 1.0, 1.0, 1.0, 1.0 }; -static const GimpRGB guide_mandala_normal_bg = { 0.0, 1.0, 1.0, 1.0 }; -static const GimpRGB guide_mandala_active_fg = { 0.0, 1.0, 1.0, 1.0 }; -static const GimpRGB guide_mandala_active_bg = { 1.0, 0.0, 0.0, 1.0 }; +static GeglColor *guide_mandala_normal_fg; +static GeglColor *guide_mandala_normal_bg; +static GeglColor *guide_mandala_active_fg; +static GeglColor *guide_mandala_active_bg; -static const GimpRGB guide_split_normal_fg = { 1.0, 1.0, 1.0, 1.0 }; -static const GimpRGB guide_split_normal_bg = { 1.0, 0.0, 1.0, 1.0 }; -static const GimpRGB guide_split_active_fg = { 1.0, 0.0, 1.0, 1.0 }; -static const GimpRGB guide_split_active_bg = { 1.0, 0.0, 0.0, 1.0 }; +static GeglColor *guide_split_normal_fg; +static GeglColor *guide_split_normal_bg; +static GeglColor *guide_split_active_fg; +static GeglColor *guide_split_active_bg; /* Styles for other canvas items. */ -static const GimpRGB sample_point_normal = { 0.0, 0.8, 1.0, 1.0 }; -static const GimpRGB sample_point_active = { 1.0, 0.0, 0.0, 1.0 }; +static GeglColor *sample_point_normal; +static GeglColor *sample_point_active; -static const GimpRGB layer_fg = { 0.0, 0.0, 0.0, 1.0 }; -static const GimpRGB layer_bg = { 1.0, 1.0, 0.0, 1.0 }; +static GeglColor *layer_fg; +static GeglColor *layer_bg; -static const GimpRGB layer_group_fg = { 0.0, 0.0, 0.0, 1.0 }; -static const GimpRGB layer_group_bg = { 0.0, 1.0, 1.0, 1.0 }; +static GeglColor *layer_group_fg; +static GeglColor *layer_group_bg; -static const GimpRGB layer_mask_fg = { 0.0, 0.0, 0.0, 1.0 }; -static const GimpRGB layer_mask_bg = { 0.0, 1.0, 0.0, 1.0 }; +static GeglColor *layer_mask_fg; +static GeglColor *layer_mask_bg; -static const GimpRGB canvas_fg = { 0.0, 0.0, 0.0, 1.0 }; -static const GimpRGB canvas_bg = { 1.0, 0.5, 0.0, 1.0 }; +static GeglColor *canvas_fg; +static GeglColor *canvas_bg; -static const GimpRGB selection_out_fg = { 1.0, 1.0, 1.0, 1.0 }; -static const GimpRGB selection_out_bg = { 0.5, 0.5, 0.5, 1.0 }; +static GeglColor *selection_out_fg; +static GeglColor *selection_out_bg; -static const GimpRGB selection_in_fg = { 0.0, 0.0, 0.0, 1.0 }; -static const GimpRGB selection_in_bg = { 1.0, 1.0, 1.0, 1.0 }; +static GeglColor *selection_in_fg; +static GeglColor *selection_in_bg; -static const GimpRGB vectors_normal_bg = { 1.0, 1.0, 1.0, 0.6 }; -static const GimpRGB vectors_normal_fg = { 0.0, 0.0, 1.0, 0.8 }; +static GeglColor *vectors_normal_bg; +static GeglColor *vectors_normal_fg; -static const GimpRGB vectors_active_bg = { 1.0, 1.0, 1.0, 0.6 }; -static const GimpRGB vectors_active_fg = { 1.0, 0.0, 0.0, 0.8 }; +static GeglColor *vectors_active_bg; +static GeglColor *vectors_active_fg; -static const GimpRGB outline_bg = { 1.0, 1.0, 1.0, 0.6 }; -static const GimpRGB outline_fg = { 0.0, 0.0, 0.0, 0.8 }; +static GeglColor *outline_bg; +static GeglColor *outline_fg; -static const GimpRGB passe_partout = { 0.0, 0.0, 0.0, 1.0 }; +static GeglColor *passe_partout; -static const GimpRGB tool_bg = { 0.0, 0.0, 0.0, 0.4 }; -static const GimpRGB tool_fg = { 1.0, 1.0, 1.0, 0.8 }; -static const GimpRGB tool_fg_highlight = { 1.0, 0.8, 0.2, 0.8 }; +static GeglColor *tool_bg; +static GeglColor *tool_fg; +static GeglColor *tool_fg_highlight; /* public functions */ + +void +gimp_canvas_styles_init (void) +{ + const Babl *format = babl_format ("R'G'B'A double"); + gdouble rgba1[4] = { 0.0, 0.8, 1.0, 1.0 }; + gdouble rgba2[4] = { 1.0, 0.5, 0.0, 1.0 }; + gdouble rgba3[4] = { 1.0, 0.8, 0.2, 0.8 }; + + /* Styles for common and custom guides. */ + guide_normal_fg = gegl_color_new ("black"); + guide_normal_bg = gegl_color_new (NULL); + gegl_color_set_pixel (guide_normal_bg, format, rgba1); + guide_active_fg = gegl_color_new ("black"); + guide_active_bg = gegl_color_new ("red"); + + guide_mirror_normal_fg = gegl_color_new ("white"); + guide_mirror_normal_bg = gegl_color_new ("lime"); + guide_mirror_active_fg = gegl_color_new ("lime"); + guide_mirror_active_bg = gegl_color_new ("red"); + + guide_mandala_normal_fg = gegl_color_new ("white"); + guide_mandala_normal_bg = gegl_color_new ("aqua"); + guide_mandala_active_fg = gegl_color_new ("aqua"); + guide_mandala_active_bg = gegl_color_new ("red"); + + guide_split_normal_fg = gegl_color_new ("white"); + guide_split_normal_bg = gegl_color_new ("fuchsia"); + guide_split_active_fg = gegl_color_new ("fuchsia"); + guide_split_active_bg = gegl_color_new ("red"); + + /* Styles for other canvas items. */ + sample_point_normal = gegl_color_new (NULL); + gegl_color_set_pixel (sample_point_normal, format, rgba1); + sample_point_active = gegl_color_new ("red"); + + layer_fg = gegl_color_new ("black"); + layer_bg = gegl_color_new ("yellow"); + + layer_group_fg = gegl_color_new ("black"); + layer_group_bg = gegl_color_new ("aqua"); + + layer_mask_fg = gegl_color_new ("black"); + layer_mask_bg = gegl_color_new ("lime"); + + canvas_fg = gegl_color_new ("black"); + canvas_bg = gegl_color_new (NULL); + gegl_color_set_pixel (canvas_bg, format, rgba2); + + selection_out_fg = gegl_color_new ("white"); + selection_out_bg = gegl_color_new ("gray"); + + selection_in_fg = gegl_color_new ("black"); + selection_in_bg = gegl_color_new ("white"); + + vectors_normal_bg = gegl_color_new ("white"); + gimp_color_set_alpha (vectors_normal_bg, 0.6); + vectors_normal_fg = gegl_color_new ("blue"); + gimp_color_set_alpha (vectors_normal_fg, 0.8); + + vectors_active_bg = gegl_color_new ("white"); + gimp_color_set_alpha (vectors_active_bg, 0.6); + vectors_active_fg = gegl_color_new ("red"); + gimp_color_set_alpha (vectors_active_fg, 0.8); + + outline_bg = gegl_color_new ("white"); + gimp_color_set_alpha (outline_bg, 0.6); + outline_fg = gegl_color_new ("black"); + gimp_color_set_alpha (outline_fg, 0.8); + + passe_partout = gegl_color_new ("black"); + + tool_bg = gegl_color_new ("black"); + gimp_color_set_alpha (tool_bg, 0.4); + tool_fg = gegl_color_new ("white"); + gimp_color_set_alpha (tool_fg, 0.8); + tool_fg_highlight = gegl_color_new (NULL); + gegl_color_set_pixel (tool_fg_highlight, format, rgba3); +} + +void +gimp_canvas_styles_exit (void) +{ + g_object_unref (guide_normal_fg); + g_object_unref (guide_normal_bg); + g_object_unref (guide_active_fg); + g_object_unref (guide_active_bg); + g_object_unref (guide_mirror_normal_fg); + g_object_unref (guide_mirror_normal_bg); + g_object_unref (guide_mirror_active_fg); + g_object_unref (guide_mirror_active_bg); + g_object_unref (guide_mandala_normal_fg); + g_object_unref (guide_mandala_normal_bg); + g_object_unref (guide_mandala_active_fg); + g_object_unref (guide_mandala_active_bg); + g_object_unref (guide_split_normal_fg); + g_object_unref (guide_split_normal_bg); + g_object_unref (guide_split_active_fg); + g_object_unref (guide_split_active_bg); + g_object_unref (sample_point_normal); + g_object_unref (sample_point_active); + g_object_unref (layer_fg); + g_object_unref (layer_bg); + g_object_unref (layer_group_fg); + g_object_unref (layer_group_bg); + g_object_unref (layer_mask_fg); + g_object_unref (layer_mask_bg); + g_object_unref (canvas_fg); + g_object_unref (canvas_bg); + g_object_unref (selection_out_fg); + g_object_unref (selection_out_bg); + g_object_unref (selection_in_fg); + g_object_unref (selection_in_bg); + g_object_unref (vectors_normal_bg); + g_object_unref (vectors_normal_fg); + g_object_unref (vectors_active_bg); + g_object_unref (vectors_active_fg); + g_object_unref (outline_bg); + g_object_unref (outline_fg); + g_object_unref (passe_partout); + g_object_unref (tool_bg); + g_object_unref (tool_fg); + g_object_unref (tool_fg_highlight); +} + void gimp_canvas_set_guide_style (GtkWidget *canvas, cairo_t *cr, @@ -103,11 +231,13 @@ gimp_canvas_set_guide_style (GtkWidget *canvas, gdouble offset_x, gdouble offset_y) { + const Babl *render_space; + GimpColorConfig *config; cairo_pattern_t *pattern; - GimpRGB normal_fg; - GimpRGB normal_bg; - GimpRGB active_fg; - GimpRGB active_bg; + GeglColor *normal_fg; + GeglColor *normal_bg; + GeglColor *active_fg; + GeglColor *active_bg; gdouble line_width; g_return_if_fail (GTK_IS_WIDGET (canvas)); @@ -154,12 +284,14 @@ gimp_canvas_set_guide_style (GtkWidget *canvas, cairo_set_line_width (cr, line_width); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + render_space = gimp_widget_get_render_space (canvas, config); if (active) - pattern = gimp_cairo_pattern_create_stipple (&active_fg, &active_bg, 0, - offset_x, offset_y); + pattern = gimp_cairo_pattern_create_stipple (active_fg, active_bg, 0, + offset_x, offset_y, render_space); else - pattern = gimp_cairo_pattern_create_stipple (&normal_fg, &normal_bg, 0, - offset_x, offset_y); + pattern = gimp_cairo_pattern_create_stipple (normal_fg, normal_bg, 0, + offset_x, offset_y, render_space); cairo_set_source (cr, pattern); cairo_pattern_destroy (pattern); @@ -170,15 +302,18 @@ gimp_canvas_set_sample_point_style (GtkWidget *canvas, cairo_t *cr, gboolean active) { + GimpColorConfig *config; + g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); cairo_set_line_width (cr, 1.0); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; if (active) - gimp_cairo_set_source_rgb (cr, &sample_point_active); + gimp_cairo_set_source_color (cr, sample_point_active, config, FALSE, canvas); else - gimp_cairo_set_source_rgb (cr, &sample_point_normal); + gimp_cairo_set_source_color (cr, sample_point_normal, config, FALSE, canvas); } void @@ -188,8 +323,10 @@ gimp_canvas_set_grid_style (GtkWidget *canvas, gdouble offset_x, gdouble offset_y) { - GimpRGB fg; - GimpRGB bg; + const Babl *render_space; + GimpColorConfig *config; + GeglColor *fg; + GeglColor *bg; g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); @@ -197,8 +334,10 @@ gimp_canvas_set_grid_style (GtkWidget *canvas, cairo_set_line_width (cr, 1.0); - gimp_grid_get_fgcolor (grid, &fg); + fg = gimp_grid_get_fgcolor (grid); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + render_space = gimp_widget_get_render_space (canvas, config); switch (gimp_grid_get_style (grid)) { cairo_pattern_t *pattern; @@ -207,17 +346,20 @@ gimp_canvas_set_grid_style (GtkWidget *canvas, case GIMP_GRID_DOUBLE_DASH: if (grid->style == GIMP_GRID_DOUBLE_DASH) { - gimp_grid_get_bgcolor (grid, &bg); + bg = gimp_grid_get_bgcolor (grid); - pattern = gimp_cairo_pattern_create_stipple (&fg, &bg, 0, - offset_x, offset_y); + pattern = gimp_cairo_pattern_create_stipple (fg, bg, 0, + offset_x, offset_y, + render_space); } else { - gimp_rgba_set (&bg, 0.0, 0.0, 0.0, 0.0); + bg = gegl_color_new ("transparent"); - pattern = gimp_cairo_pattern_create_stipple (&fg, &bg, 0, - offset_x, offset_y); + pattern = gimp_cairo_pattern_create_stipple (fg, bg, 0, + offset_x, offset_y, + render_space); + g_clear_object (&bg); } cairo_set_source (cr, pattern); @@ -227,27 +369,30 @@ gimp_canvas_set_grid_style (GtkWidget *canvas, case GIMP_GRID_DOTS: case GIMP_GRID_INTERSECTIONS: case GIMP_GRID_SOLID: - gimp_cairo_set_source_rgb (cr, &fg); + gimp_cairo_set_source_color (cr, fg, config, FALSE, canvas); break; } } void -gimp_canvas_set_pen_style (GtkWidget *canvas, - cairo_t *cr, - const GimpRGB *color, - gint width) +gimp_canvas_set_pen_style (GtkWidget *canvas, + cairo_t *cr, + GeglColor *color, + gint width) { + GimpColorConfig *config; + g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); - g_return_if_fail (color != NULL); + g_return_if_fail (GEGL_IS_COLOR (color)); cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE); cairo_set_line_width (cr, width); cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); - gimp_cairo_set_source_rgb (cr, color); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + gimp_cairo_set_source_color (cr, color, config, FALSE, canvas); } void @@ -257,6 +402,8 @@ gimp_canvas_set_layer_style (GtkWidget *canvas, gdouble offset_x, gdouble offset_y) { + const Babl *render_space; + GimpColorConfig *config; cairo_pattern_t *pattern; g_return_if_fail (GTK_IS_WIDGET (canvas)); @@ -266,27 +413,25 @@ gimp_canvas_set_layer_style (GtkWidget *canvas, cairo_set_line_width (cr, 1.0); cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + render_space = gimp_widget_get_render_space (canvas, config); if (gimp_layer_get_mask (layer) && gimp_layer_get_edit_mask (layer)) { - pattern = gimp_cairo_pattern_create_stipple (&layer_mask_fg, - &layer_mask_bg, + pattern = gimp_cairo_pattern_create_stipple (layer_mask_fg, + layer_mask_bg, 0, - offset_x, offset_y); + offset_x, offset_y, render_space); } else if (gimp_viewable_get_children (GIMP_VIEWABLE (layer))) { - pattern = gimp_cairo_pattern_create_stipple (&layer_group_fg, - &layer_group_bg, - 0, - offset_x, offset_y); + pattern = gimp_cairo_pattern_create_stipple (layer_group_fg, layer_group_bg, 0, + offset_x, offset_y, render_space); } else { - pattern = gimp_cairo_pattern_create_stipple (&layer_fg, - &layer_bg, - 0, - offset_x, offset_y); + pattern = gimp_cairo_pattern_create_stipple (layer_fg, layer_bg, 0, + offset_x, offset_y, render_space); } cairo_set_source (cr, pattern); @@ -299,6 +444,8 @@ gimp_canvas_set_canvas_style (GtkWidget *canvas, gdouble offset_x, gdouble offset_y) { + const Babl *render_space; + GimpColorConfig *config; cairo_pattern_t *pattern; g_return_if_fail (GTK_IS_WIDGET (canvas)); @@ -307,10 +454,10 @@ gimp_canvas_set_canvas_style (GtkWidget *canvas, cairo_set_line_width (cr, 1.0); cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); - pattern = gimp_cairo_pattern_create_stipple (&canvas_fg, - &canvas_bg, - 0, - offset_x, offset_y); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + render_space = gimp_widget_get_render_space (canvas, config); + pattern = gimp_cairo_pattern_create_stipple (canvas_fg, canvas_bg, 0, + offset_x, offset_y, render_space); cairo_set_source (cr, pattern); cairo_pattern_destroy (pattern); @@ -322,6 +469,8 @@ gimp_canvas_set_selection_out_style (GtkWidget *canvas, gdouble offset_x, gdouble offset_y) { + const Babl *render_space; + GimpColorConfig *config; cairo_pattern_t *pattern; g_return_if_fail (GTK_IS_WIDGET (canvas)); @@ -330,10 +479,10 @@ gimp_canvas_set_selection_out_style (GtkWidget *canvas, cairo_set_line_width (cr, 1.0); cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); - pattern = gimp_cairo_pattern_create_stipple (&selection_out_fg, - &selection_out_bg, - 0, - offset_x, offset_y); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + render_space = gimp_widget_get_render_space (canvas, config); + pattern = gimp_cairo_pattern_create_stipple (selection_out_fg, selection_out_bg, 0, + offset_x, offset_y, render_space); cairo_set_source (cr, pattern); cairo_pattern_destroy (pattern); } @@ -345,6 +494,8 @@ gimp_canvas_set_selection_in_style (GtkWidget *canvas, gdouble offset_x, gdouble offset_y) { + const Babl *render_space; + GimpColorConfig *config; cairo_pattern_t *pattern; g_return_if_fail (GTK_IS_WIDGET (canvas)); @@ -353,10 +504,10 @@ gimp_canvas_set_selection_in_style (GtkWidget *canvas, cairo_set_line_width (cr, 1.0); cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); - pattern = gimp_cairo_pattern_create_stipple (&selection_in_fg, - &selection_in_bg, - index, - offset_x, offset_y); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + render_space = gimp_widget_get_render_space (canvas, config); + pattern = gimp_cairo_pattern_create_stipple (selection_in_fg, selection_in_bg, index, + offset_x, offset_y, render_space); cairo_set_source (cr, pattern); cairo_pattern_destroy (pattern); } @@ -366,15 +517,18 @@ gimp_canvas_set_vectors_bg_style (GtkWidget *canvas, cairo_t *cr, gboolean active) { + GimpColorConfig *config; + g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); cairo_set_line_width (cr, 3.0); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; if (active) - gimp_cairo_set_source_rgba (cr, &vectors_active_bg); + gimp_cairo_set_source_color (cr, vectors_active_bg, config, FALSE, canvas); else - gimp_cairo_set_source_rgba (cr, &vectors_normal_bg); + gimp_cairo_set_source_color (cr, vectors_normal_bg, config, FALSE, canvas); } void @@ -382,39 +536,47 @@ gimp_canvas_set_vectors_fg_style (GtkWidget *canvas, cairo_t *cr, gboolean active) { + GimpColorConfig *config; + g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); cairo_set_line_width (cr, 1.0); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; if (active) - gimp_cairo_set_source_rgba (cr, &vectors_active_fg); + gimp_cairo_set_source_color (cr, vectors_active_fg, config, FALSE, canvas); else - gimp_cairo_set_source_rgba (cr, &vectors_normal_fg); + gimp_cairo_set_source_color (cr, vectors_normal_fg, config, FALSE, canvas); } void gimp_canvas_set_outline_bg_style (GtkWidget *canvas, cairo_t *cr) { + GimpColorConfig *config; + g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); cairo_set_line_width (cr, 1.0); - gimp_cairo_set_source_rgba (cr, &outline_bg); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + gimp_cairo_set_source_color (cr, outline_bg, config, FALSE, canvas); } void gimp_canvas_set_outline_fg_style (GtkWidget *canvas, cairo_t *cr) { - static const double dashes[] = { 4.0, 4.0 }; + static const double dashes[] = { 4.0, 4.0 }; + GimpColorConfig *config; g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); cairo_set_line_width (cr, 1.0); - gimp_cairo_set_source_rgba (cr, &outline_fg); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + gimp_cairo_set_source_color (cr, outline_fg, config, FALSE, canvas); cairo_set_dash (cr, dashes, G_N_ELEMENTS (dashes), 0); } @@ -422,23 +584,29 @@ void gimp_canvas_set_passe_partout_style (GtkWidget *canvas, cairo_t *cr) { + GimpColorConfig *config; + g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); - gimp_cairo_set_source_rgba (cr, &passe_partout); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + gimp_cairo_set_source_color (cr, passe_partout, config, FALSE, canvas); } void gimp_canvas_set_tool_bg_style (GtkWidget *canvas, cairo_t *cr) { + GimpColorConfig *config; + g_return_if_fail (GTK_IS_WIDGET (canvas)); g_return_if_fail (cr != NULL); cairo_set_line_width (cr, 3.0); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); - gimp_cairo_set_source_rgba (cr, &tool_bg); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; + gimp_cairo_set_source_color (cr, tool_bg, config, FALSE, canvas); } void @@ -446,13 +614,16 @@ gimp_canvas_set_tool_fg_style (GtkWidget *canvas, cairo_t *cr, gboolean highlight) { + GimpColorConfig *config; + g_return_if_fail (cr != NULL); cairo_set_line_width (cr, 1.0); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); + config = GIMP_CORE_CONFIG (GIMP_CANVAS (canvas)->config)->color_management; if (highlight) - gimp_cairo_set_source_rgba (cr, &tool_fg_highlight); + gimp_cairo_set_source_color (cr, tool_fg_highlight, config, FALSE, canvas); else - gimp_cairo_set_source_rgba (cr, &tool_fg); + gimp_cairo_set_source_color (cr, tool_fg, config, FALSE, canvas); } diff --git a/app/display/gimpcanvas-style.h b/app/display/gimpcanvas-style.h index 3a37b988b8..abda804178 100644 --- a/app/display/gimpcanvas-style.h +++ b/app/display/gimpcanvas-style.h @@ -22,6 +22,9 @@ #define __GIMP_CANVAS_STYLE_H__ +void gimp_canvas_styles_init (void); +void gimp_canvas_styles_exit (void); + void gimp_canvas_set_guide_style (GtkWidget *canvas, cairo_t *cr, GimpGuideStyle style, @@ -38,7 +41,7 @@ void gimp_canvas_set_grid_style (GtkWidget *canvas, gdouble offset_y); void gimp_canvas_set_pen_style (GtkWidget *canvas, cairo_t *cr, - const GimpRGB *color, + GeglColor *color, gint width); void gimp_canvas_set_layer_style (GtkWidget *canvas, cairo_t *cr, diff --git a/app/display/gimpcanvaspen.c b/app/display/gimpcanvaspen.c index 905c629c53..7726513689 100644 --- a/app/display/gimpcanvaspen.c +++ b/app/display/gimpcanvaspen.c @@ -49,8 +49,8 @@ typedef struct _GimpCanvasPenPrivate GimpCanvasPenPrivate; struct _GimpCanvasPenPrivate { - GimpRGB color; - gint width; + GeglColor *color; + gint width; }; #define GET_PRIVATE(pen) \ @@ -59,6 +59,7 @@ struct _GimpCanvasPenPrivate /* local function prototypes */ +static void gimp_canvas_pen_finalize (GObject *object); static void gimp_canvas_pen_set_property (GObject *object, guint property_id, const GValue *value, @@ -84,6 +85,7 @@ gimp_canvas_pen_class_init (GimpCanvasPenClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); GimpCanvasItemClass *item_class = GIMP_CANVAS_ITEM_CLASS (klass); + object_class->finalize = gimp_canvas_pen_finalize; object_class->set_property = gimp_canvas_pen_set_property; object_class->get_property = gimp_canvas_pen_get_property; @@ -91,9 +93,9 @@ gimp_canvas_pen_class_init (GimpCanvasPenClass *klass) item_class->stroke = gimp_canvas_pen_stroke; g_object_class_install_property (object_class, PROP_COLOR, - gimp_param_spec_rgb ("color", NULL, NULL, - FALSE, NULL, - GIMP_PARAM_READWRITE)); + gegl_param_spec_color_from_string ("color", NULL, NULL, + /*FALSE,*/ "black", + GIMP_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_WIDTH, g_param_spec_int ("width", NULL, NULL, @@ -104,6 +106,20 @@ gimp_canvas_pen_class_init (GimpCanvasPenClass *klass) static void gimp_canvas_pen_init (GimpCanvasPen *pen) { + GimpCanvasPenPrivate *private = GET_PRIVATE (pen); + + private->color = gegl_color_new ("black"); +} + + +static void +gimp_canvas_pen_finalize (GObject *object) +{ + GimpCanvasPenPrivate *private = GET_PRIVATE (object); + + g_clear_object (&private->color); + + G_OBJECT_CLASS (parent_class)->finalize (object); } static void @@ -117,7 +133,8 @@ gimp_canvas_pen_set_property (GObject *object, switch (property_id) { case PROP_COLOR: - gimp_value_get_rgb (value, &private->color); + g_clear_object (&private->color); + private->color = gegl_color_duplicate (g_value_get_object (value)); break; case PROP_WIDTH: private->width = g_value_get_int (value); @@ -140,7 +157,7 @@ gimp_canvas_pen_get_property (GObject *object, switch (property_id) { case PROP_COLOR: - gimp_value_set_rgb (value, &private->color); + g_value_set_object (value, private->color); break; case PROP_WIDTH: g_value_set_int (value, private->width); @@ -184,7 +201,7 @@ gimp_canvas_pen_stroke (GimpCanvasItem *item, GimpCanvasPenPrivate *private = GET_PRIVATE (item); gimp_canvas_set_pen_style (gimp_canvas_item_get_canvas (item), cr, - &private->color, private->width); + private->color, private->width); cairo_stroke (cr); } @@ -199,7 +216,6 @@ gimp_canvas_pen_new (GimpDisplayShell *shell, GimpCanvasItem *item; GimpArray *array; GeglColor *color = NULL; - GimpRGB rgb; g_return_val_if_fail (GIMP_IS_DISPLAY_SHELL (shell), NULL); g_return_val_if_fail (points != NULL && n_points > 1, NULL); @@ -222,12 +238,10 @@ gimp_canvas_pen_new (GimpDisplayShell *shell, g_return_val_if_reached (NULL); } - gegl_color_get_rgba_with_space (color, &rgb.r, &rgb.g, &rgb.b, &rgb.a, NULL); - item = g_object_new (GIMP_TYPE_CANVAS_PEN, "shell", shell, "points", array, - "color", &rgb, + "color", color, "width", width, NULL); diff --git a/app/gui/gui.c b/app/gui/gui.c index 988fda46a7..0695ebc3d2 100644 --- a/app/gui/gui.c +++ b/app/gui/gui.c @@ -40,6 +40,7 @@ #include "plug-in/gimpenvirontable.h" #include "plug-in/gimppluginmanager.h" +#include "display/gimpcanvas-style.h" #include "display/gimpdisplay.h" #include "display/gimpdisplay-foreach.h" #include "display/gimpdisplayshell.h" @@ -277,6 +278,7 @@ gui_init (Gimp *gimp, gimp_dnd_init (gimp); themes_init (gimp); + gimp_canvas_styles_init (); initial_monitor = gimp_get_monitor_at_pointer (); @@ -755,6 +757,7 @@ gui_exit_after_callback (Gimp *gimp, gimp_devices_exit (gimp); dialogs_exit (gimp); themes_exit (gimp); + gimp_canvas_styles_exit (); g_type_class_unref (g_type_class_peek (GIMP_TYPE_COLOR_SELECT)); diff --git a/app/pdb/image-grid-cmds.c b/app/pdb/image-grid-cmds.c index 557e491f0b..96ea38811e 100644 --- a/app/pdb/image-grid-cmds.c +++ b/app/pdb/image-grid-cmds.c @@ -21,14 +21,11 @@ #include "stamp-pdbgen.h" -#include - #include #include #include "libgimpbase/gimpbaseenums.h" -#include "libgimpcolor/gimpcolor.h" #include "libgimpbase/gimpbase.h" @@ -205,7 +202,7 @@ image_grid_get_foreground_color_invoker (GimpProcedure *procedure, gboolean success = TRUE; GimpValueArray *return_vals; GimpImage *image; - GimpRGB fgcolor = { 0.0, 0.0, 0.0, 1.0 }; + GeglColor *fgcolor = NULL; image = g_value_get_object (gimp_value_array_index (args, 0)); @@ -214,7 +211,7 @@ image_grid_get_foreground_color_invoker (GimpProcedure *procedure, GimpGrid *grid = gimp_image_get_grid (image); if (grid) - fgcolor = grid->fgcolor; + fgcolor = gegl_color_duplicate (grid->fgcolor); else success = FALSE; } @@ -223,7 +220,7 @@ image_grid_get_foreground_color_invoker (GimpProcedure *procedure, error ? *error : NULL); if (success) - gimp_value_set_rgb (gimp_value_array_index (return_vals, 1), &fgcolor); + g_value_take_object (gimp_value_array_index (return_vals, 1), fgcolor); return return_vals; } @@ -238,17 +235,17 @@ image_grid_set_foreground_color_invoker (GimpProcedure *procedure, { gboolean success = TRUE; GimpImage *image; - GimpRGB fgcolor; + GeglColor *fgcolor; image = g_value_get_object (gimp_value_array_index (args, 0)); - gimp_value_get_rgb (gimp_value_array_index (args, 1), &fgcolor); + fgcolor = g_value_get_object (gimp_value_array_index (args, 1)); if (success) { GimpGrid *grid = gimp_image_get_grid (image); if (grid) - g_object_set (grid, "fgcolor", &fgcolor, NULL); + g_object_set (grid, "fgcolor", fgcolor, NULL); else success = FALSE; } @@ -268,7 +265,7 @@ image_grid_get_background_color_invoker (GimpProcedure *procedure, gboolean success = TRUE; GimpValueArray *return_vals; GimpImage *image; - GimpRGB bgcolor = { 0.0, 0.0, 0.0, 1.0 }; + GeglColor *bgcolor = NULL; image = g_value_get_object (gimp_value_array_index (args, 0)); @@ -277,7 +274,7 @@ image_grid_get_background_color_invoker (GimpProcedure *procedure, GimpGrid *grid = gimp_image_get_grid (image); if (grid) - bgcolor = grid->bgcolor; + bgcolor = gegl_color_duplicate (grid->bgcolor); else success = FALSE; } @@ -286,7 +283,7 @@ image_grid_get_background_color_invoker (GimpProcedure *procedure, error ? *error : NULL); if (success) - gimp_value_set_rgb (gimp_value_array_index (return_vals, 1), &bgcolor); + g_value_take_object (gimp_value_array_index (return_vals, 1), bgcolor); return return_vals; } @@ -301,17 +298,17 @@ image_grid_set_background_color_invoker (GimpProcedure *procedure, { gboolean success = TRUE; GimpImage *image; - GimpRGB bgcolor; + GeglColor *bgcolor; image = g_value_get_object (gimp_value_array_index (args, 0)); - gimp_value_get_rgb (gimp_value_array_index (args, 1), &bgcolor); + bgcolor = g_value_get_object (gimp_value_array_index (args, 1)); if (success) { GimpGrid *grid = gimp_image_get_grid (image); if (grid) - g_object_set (grid, "bgcolor", &bgcolor, NULL); + g_object_set (grid, "bgcolor", bgcolor, NULL); else success = FALSE; } @@ -549,12 +546,11 @@ register_image_grid_procs (GimpPDB *pdb) FALSE, GIMP_PARAM_READWRITE)); gimp_procedure_add_return_value (procedure, - gimp_param_spec_rgb ("fgcolor", - "fgcolor", - "The image's grid foreground color", - TRUE, - NULL, - GIMP_PARAM_READWRITE)); + gegl_param_spec_color ("fgcolor", + "fgcolor", + "The image's grid foreground color", + NULL, + GIMP_PARAM_READWRITE)); gimp_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -579,12 +575,11 @@ register_image_grid_procs (GimpPDB *pdb) FALSE, GIMP_PARAM_READWRITE)); gimp_procedure_add_argument (procedure, - gimp_param_spec_rgb ("fgcolor", - "fgcolor", - "The new foreground color", - TRUE, - NULL, - GIMP_PARAM_READWRITE)); + gegl_param_spec_color ("fgcolor", + "fgcolor", + "The new foreground color", + NULL, + GIMP_PARAM_READWRITE)); gimp_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -609,12 +604,11 @@ register_image_grid_procs (GimpPDB *pdb) FALSE, GIMP_PARAM_READWRITE)); gimp_procedure_add_return_value (procedure, - gimp_param_spec_rgb ("bgcolor", - "bgcolor", - "The image's grid background color", - TRUE, - NULL, - GIMP_PARAM_READWRITE)); + gegl_param_spec_color ("bgcolor", + "bgcolor", + "The image's grid background color", + NULL, + GIMP_PARAM_READWRITE)); gimp_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); @@ -639,12 +633,11 @@ register_image_grid_procs (GimpPDB *pdb) FALSE, GIMP_PARAM_READWRITE)); gimp_procedure_add_argument (procedure, - gimp_param_spec_rgb ("bgcolor", - "bgcolor", - "The new background color", - TRUE, - NULL, - GIMP_PARAM_READWRITE)); + gegl_param_spec_color ("bgcolor", + "bgcolor", + "The new background color", + NULL, + GIMP_PARAM_READWRITE)); gimp_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); diff --git a/app/widgets/gimpgrideditor.c b/app/widgets/gimpgrideditor.c index 1a26835167..c7a765d26e 100644 --- a/app/widgets/gimpgrideditor.c +++ b/app/widgets/gimpgrideditor.c @@ -146,11 +146,11 @@ gimp_grid_editor_constructed (GObject *object) _("Line _style:"), 0.0, 0.5, style, 1); - color_button = gimp_prop_color_button_new (G_OBJECT (editor->grid), "fgcolor", - _("Change grid foreground color"), - GRID_EDITOR_COLOR_BUTTON_WIDTH, - GRID_EDITOR_COLOR_BUTTON_HEIGHT, - GIMP_COLOR_AREA_FLAT); + color_button = gimp_prop_gegl_color_button_new (G_OBJECT (editor->grid), "fgcolor", + _("Change grid foreground color"), + GRID_EDITOR_COLOR_BUTTON_WIDTH, + GRID_EDITOR_COLOR_BUTTON_HEIGHT, + GIMP_COLOR_AREA_FLAT); gtk_widget_set_halign (color_button, GTK_ALIGN_START); gimp_color_panel_set_context (GIMP_COLOR_PANEL (color_button), editor->context); @@ -158,11 +158,11 @@ gimp_grid_editor_constructed (GObject *object) _("_Foreground color:"), 0.0, 0.5, color_button, 1); - color_button = gimp_prop_color_button_new (G_OBJECT (editor->grid), "bgcolor", - _("Change grid background color"), - GRID_EDITOR_COLOR_BUTTON_WIDTH, - GRID_EDITOR_COLOR_BUTTON_HEIGHT, - GIMP_COLOR_AREA_FLAT); + color_button = gimp_prop_gegl_color_button_new (G_OBJECT (editor->grid), "bgcolor", + _("Change grid background color"), + GRID_EDITOR_COLOR_BUTTON_WIDTH, + GRID_EDITOR_COLOR_BUTTON_HEIGHT, + GIMP_COLOR_AREA_FLAT); gtk_widget_set_halign (color_button, GTK_ALIGN_START); gimp_color_panel_set_context (GIMP_COLOR_PANEL (color_button), editor->context); diff --git a/libgimp/gimpimagegrid_pdb.c b/libgimp/gimpimagegrid_pdb.c index 0a2971ee7e..93f2203b9c 100644 --- a/libgimp/gimpimagegrid_pdb.c +++ b/libgimp/gimpimagegrid_pdb.c @@ -221,23 +221,21 @@ gimp_image_grid_set_offset (GimpImage *image, /** * gimp_image_grid_get_foreground_color: * @image: The image. - * @fgcolor: (out caller-allocates): The image's grid foreground color. * * Sets the foreground color of an image's grid. * * This procedure gets the foreground color of an image's grid. * - * Returns: TRUE on success. + * Returns: (transfer full): The image's grid foreground color. * * Since: 2.4 **/ -gboolean -gimp_image_grid_get_foreground_color (GimpImage *image, - GimpRGB *fgcolor) +GeglColor * +gimp_image_grid_get_foreground_color (GimpImage *image) { GimpValueArray *args; GimpValueArray *return_vals; - gboolean success = TRUE; + GeglColor *fgcolor = NULL; args = gimp_value_array_new_from_types (NULL, GIMP_TYPE_IMAGE, image, @@ -248,14 +246,12 @@ gimp_image_grid_get_foreground_color (GimpImage *image, args); gimp_value_array_unref (args); - success = GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS; - - if (success) - GIMP_VALUES_GET_RGB (return_vals, 1, &*fgcolor); + if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS) + fgcolor = g_value_dup_object (gimp_value_array_index (return_vals, 1)); gimp_value_array_unref (return_vals); - return success; + return fgcolor; } /** @@ -272,8 +268,8 @@ gimp_image_grid_get_foreground_color (GimpImage *image, * Since: 2.4 **/ gboolean -gimp_image_grid_set_foreground_color (GimpImage *image, - const GimpRGB *fgcolor) +gimp_image_grid_set_foreground_color (GimpImage *image, + GeglColor *fgcolor) { GimpValueArray *args; GimpValueArray *return_vals; @@ -281,7 +277,7 @@ gimp_image_grid_set_foreground_color (GimpImage *image, args = gimp_value_array_new_from_types (NULL, GIMP_TYPE_IMAGE, image, - GIMP_TYPE_RGB, fgcolor, + GEGL_TYPE_COLOR, fgcolor, G_TYPE_NONE); return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (), @@ -299,23 +295,21 @@ gimp_image_grid_set_foreground_color (GimpImage *image, /** * gimp_image_grid_get_background_color: * @image: The image. - * @bgcolor: (out caller-allocates): The image's grid background color. * * Sets the background color of an image's grid. * * This procedure gets the background color of an image's grid. * - * Returns: TRUE on success. + * Returns: (transfer full): The image's grid background color. * * Since: 2.4 **/ -gboolean -gimp_image_grid_get_background_color (GimpImage *image, - GimpRGB *bgcolor) +GeglColor * +gimp_image_grid_get_background_color (GimpImage *image) { GimpValueArray *args; GimpValueArray *return_vals; - gboolean success = TRUE; + GeglColor *bgcolor = NULL; args = gimp_value_array_new_from_types (NULL, GIMP_TYPE_IMAGE, image, @@ -326,14 +320,12 @@ gimp_image_grid_get_background_color (GimpImage *image, args); gimp_value_array_unref (args); - success = GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS; - - if (success) - GIMP_VALUES_GET_RGB (return_vals, 1, &*bgcolor); + if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS) + bgcolor = g_value_dup_object (gimp_value_array_index (return_vals, 1)); gimp_value_array_unref (return_vals); - return success; + return bgcolor; } /** @@ -350,8 +342,8 @@ gimp_image_grid_get_background_color (GimpImage *image, * Since: 2.4 **/ gboolean -gimp_image_grid_set_background_color (GimpImage *image, - const GimpRGB *bgcolor) +gimp_image_grid_set_background_color (GimpImage *image, + GeglColor *bgcolor) { GimpValueArray *args; GimpValueArray *return_vals; @@ -359,7 +351,7 @@ gimp_image_grid_set_background_color (GimpImage *image, args = gimp_value_array_new_from_types (NULL, GIMP_TYPE_IMAGE, image, - GIMP_TYPE_RGB, bgcolor, + GEGL_TYPE_COLOR, bgcolor, G_TYPE_NONE); return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (), diff --git a/libgimp/gimpimagegrid_pdb.h b/libgimp/gimpimagegrid_pdb.h index e256944329..e0dfbdb282 100644 --- a/libgimp/gimpimagegrid_pdb.h +++ b/libgimp/gimpimagegrid_pdb.h @@ -44,14 +44,12 @@ gboolean gimp_image_grid_get_offset (GimpImage *image, gboolean gimp_image_grid_set_offset (GimpImage *image, gdouble xoffset, gdouble yoffset); -gboolean gimp_image_grid_get_foreground_color (GimpImage *image, - GimpRGB *fgcolor); +GeglColor* gimp_image_grid_get_foreground_color (GimpImage *image); gboolean gimp_image_grid_set_foreground_color (GimpImage *image, - const GimpRGB *fgcolor); -gboolean gimp_image_grid_get_background_color (GimpImage *image, - GimpRGB *bgcolor); + GeglColor *fgcolor); +GeglColor* gimp_image_grid_get_background_color (GimpImage *image); gboolean gimp_image_grid_set_background_color (GimpImage *image, - const GimpRGB *bgcolor); + GeglColor *bgcolor); GimpGridStyle gimp_image_grid_get_style (GimpImage *image); gboolean gimp_image_grid_set_style (GimpImage *image, GimpGridStyle style); diff --git a/pdb/groups/image_grid.pdb b/pdb/groups/image_grid.pdb index ae5e9bfd7a..4c42d0807a 100644 --- a/pdb/groups/image_grid.pdb +++ b/pdb/groups/image_grid.pdb @@ -177,7 +177,7 @@ HELP ); @outargs = ( - { name => 'fgcolor', type => 'color', has_alpha => 1, void_ret => 1, + { name => 'fgcolor', type => 'geglcolor', has_alpha => 1, desc => "The image's grid foreground color" } ); @@ -187,7 +187,7 @@ HELP GimpGrid *grid = gimp_image_get_grid (image); if (grid) - fgcolor = grid->fgcolor; + fgcolor = gegl_color_duplicate (grid->fgcolor); else success = FALSE; } @@ -207,7 +207,7 @@ HELP @inargs = ( { name => 'image', type => 'image', desc => 'The image' }, - { name => 'fgcolor', type => 'color', has_alpha => 1, + { name => 'fgcolor', type => 'geglcolor', has_alpha => 1, desc => "The new foreground color" } ); @@ -217,7 +217,7 @@ HELP GimpGrid *grid = gimp_image_get_grid (image); if (grid) - g_object_set (grid, "fgcolor", &fgcolor, NULL); + g_object_set (grid, "fgcolor", fgcolor, NULL); else success = FALSE; } @@ -240,7 +240,7 @@ HELP ); @outargs = ( - { name => 'bgcolor', type => 'color', has_alpha => 1, void_ret => 1, + { name => 'bgcolor', type => 'geglcolor', has_alpha => 1, desc => "The image's grid background color" } ); @@ -250,7 +250,7 @@ HELP GimpGrid *grid = gimp_image_get_grid (image); if (grid) - bgcolor = grid->bgcolor; + bgcolor = gegl_color_duplicate (grid->bgcolor); else success = FALSE; } @@ -270,7 +270,7 @@ HELP @inargs = ( { name => 'image', type => 'image', desc => 'The image' }, - { name => 'bgcolor', type => 'color', has_alpha => 1, + { name => 'bgcolor', type => 'geglcolor', has_alpha => 1, desc => "The new background color" } ); @@ -280,7 +280,7 @@ HELP GimpGrid *grid = gimp_image_get_grid (image); if (grid) - g_object_set (grid, "bgcolor", &bgcolor, NULL); + g_object_set (grid, "bgcolor", bgcolor, NULL); else success = FALSE; } diff --git a/plug-ins/common/file-psp.c b/plug-ins/common/file-psp.c index 92aa0c688c..a7e7cbd0a6 100644 --- a/plug-ins/common/file-psp.c +++ b/plug-ins/common/file-psp.c @@ -2466,11 +2466,11 @@ read_extended_block (FILE *f, { case PSP_XDATA_GRID: { - GimpRGB color; - guchar rgb[4]; - guint32 h_spacing; - guint32 v_spacing; - guint16 unit; /* Unused */ + GeglColor *color; + guchar rgb[4]; + guint32 h_spacing; + guint32 v_spacing; + guint16 unit; /* Unused */ if (field_length != 14 || fread (rgb, 4, 1, f) < 1 || @@ -2487,9 +2487,11 @@ read_extended_block (FILE *f, v_spacing = GUINT32_FROM_LE (v_spacing); gimp_image_grid_set_spacing (image, h_spacing, v_spacing); - gimp_rgba_set_uchar (&color, rgb[0], rgb[1], rgb[2], 255); - gimp_image_grid_set_foreground_color (image, &color); - gimp_image_grid_set_background_color (image, &color); + color = gegl_color_new (NULL); + gegl_color_set_pixel (color, babl_format ("R'G'B' u8"), rgb); + gimp_image_grid_set_foreground_color (image, color); + gimp_image_grid_set_background_color (image, color); + g_object_unref (color); } break;