From 47c1cb85048d5ef98b398535c75ddfd09f9a00fa Mon Sep 17 00:00:00 2001 From: Jehan Date: Sun, 24 Dec 2023 23:25:45 +0900 Subject: [PATCH] app: use GeglColor in GimpTextBuffer and GimpTextTag. It's actually not enough to get proper colors for inner text tags. The main color is correct, but color for subtext is currently not managed. This must be fixed. --- app/tools/gimptexttool-editor.c | 25 ++-- app/tools/gimptexttool.c | 8 +- app/widgets/gimptextbuffer.c | 140 +++++++++----------- app/widgets/gimptextbuffer.h | 212 +++++++++++++++--------------- app/widgets/gimptextstyleeditor.c | 21 +-- app/widgets/gimptexttag.c | 18 +-- app/widgets/gimptexttag.h | 16 +-- 7 files changed, 204 insertions(+), 236 deletions(-) diff --git a/app/tools/gimptexttool-editor.c b/app/tools/gimptexttool-editor.c index b789b51c97..c8ac4d5ba5 100644 --- a/app/tools/gimptexttool-editor.c +++ b/app/tools/gimptexttool-editor.c @@ -1597,24 +1597,21 @@ gimp_text_tool_im_preedit_changed (GtkIMContext *context, case PANGO_ATTR_FOREGROUND: { PangoAttrColor *color_attr = (PangoAttrColor *) attr; - GimpRGB color; + GeglColor *color; - color.r = (gdouble) color_attr->color.red / 65535.0; - color.g = (gdouble) color_attr->color.green / 65535.0; - color.b = (gdouble) color_attr->color.blue / 65535.0; + color = gegl_color_new (NULL); + gegl_color_set_pixel (color, babl_format ("R'G'B' u16"), &color_attr->color); if (attr->klass->type == PANGO_ATTR_BACKGROUND) - { - gimp_text_buffer_set_preedit_bg_color (text_tool->buffer, - &start, &end, - &color); - } + gimp_text_buffer_set_preedit_bg_color (text_tool->buffer, + &start, &end, + color); else - { - gimp_text_buffer_set_preedit_color (text_tool->buffer, - &start, &end, - &color); - } + gimp_text_buffer_set_preedit_color (text_tool->buffer, + &start, &end, + color); + + g_object_unref (color); } break; default: diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c index 4b041c39b3..cf9d4e8dd3 100644 --- a/app/tools/gimptexttool.c +++ b/app/tools/gimptexttool.c @@ -195,7 +195,7 @@ static void gimp_text_tool_buffer_end_edit (GimpTextBuffer *buffer, static void gimp_text_tool_buffer_color_applied (GimpTextBuffer *buffer, - const GimpRGB *color, + GeglColor *color, GimpTextTool *text_tool); @@ -2002,14 +2002,10 @@ gimp_text_tool_buffer_end_edit (GimpTextBuffer *buffer, static void gimp_text_tool_buffer_color_applied (GimpTextBuffer *buffer, - const GimpRGB *rgb, + GeglColor *color, GimpTextTool *text_tool) { - GeglColor *color = gegl_color_new (NULL); - - gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb); gimp_palettes_add_color_history (GIMP_TOOL (text_tool)->tool_info->gimp, color); - g_object_unref (color); } diff --git a/app/widgets/gimptextbuffer.c b/app/widgets/gimptextbuffer.c index 3ae727b3a7..06a66cbe4b 100644 --- a/app/widgets/gimptextbuffer.c +++ b/app/widgets/gimptextbuffer.c @@ -81,7 +81,7 @@ gimp_text_buffer_class_init (GimpTextBufferClass *klass) G_STRUCT_OFFSET (GimpTextBufferClass, color_applied), NULL, NULL, NULL, G_TYPE_NONE, 1, - GIMP_TYPE_RGB); + GEGL_TYPE_COLOR); } static void @@ -932,9 +932,9 @@ gimp_text_buffer_set_font (GimpTextBuffer *buffer, } GtkTextTag * -gimp_text_buffer_get_iter_color (GimpTextBuffer *buffer, - const GtkTextIter *iter, - GimpRGB *color) +gimp_text_buffer_get_iter_color (GimpTextBuffer *buffer, + const GtkTextIter *iter, + GeglColor **color) { GList *list; @@ -956,41 +956,33 @@ gimp_text_buffer_get_iter_color (GimpTextBuffer *buffer, GtkTextTag * gimp_text_buffer_get_color_tag (GimpTextBuffer *buffer, - const GimpRGB *color) + GeglColor *color) { GList *list; GtkTextTag *tag; gchar name[256]; - guchar r, g, b; - - gimp_rgb_get_uchar (color, &r, &g, &b); + gdouble rgba[4]; for (list = buffer->color_tags; list; list = g_list_next (list)) { - GimpRGB tag_color; - guchar tag_r, tag_g, tag_b; + GeglColor *tag_color; tag = list->data; gimp_text_tag_get_fg_color (tag, &tag_color); - gimp_rgb_get_uchar (&tag_color, &tag_r, &tag_g, &tag_b); - /* Do not compare the alpha channel, since it's unused */ - if (tag_r == r && - tag_g == g && - tag_b == b) - { - return tag; - } + if (gimp_color_is_perceptually_identical (color, tag_color)) + return tag; } + gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgba); g_snprintf (name, sizeof (name), "color-#%02x%02x%02x", - r, g, b); + (guint) (rgba[0] * 255), (guint) (rgba[1] * 255), (guint) (rgba[2] * 255)); tag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (buffer), name, - "foreground-rgba", (GdkRGBA *) color, + "foreground-rgba", (GdkRGBA *) rgba, "foreground-set", TRUE, NULL); @@ -1003,7 +995,7 @@ void gimp_text_buffer_set_color (GimpTextBuffer *buffer, const GtkTextIter *start, const GtkTextIter *end, - const GimpRGB *color) + GeglColor *color) { GList *list; @@ -1037,41 +1029,34 @@ gimp_text_buffer_set_color (GimpTextBuffer *buffer, GtkTextTag * gimp_text_buffer_get_preedit_color_tag (GimpTextBuffer *buffer, - const GimpRGB *color) + GeglColor *color) { GList *list; GtkTextTag *tag; gchar name[256]; - guchar r, g, b; - - gimp_rgb_get_uchar (color, &r, &g, &b); + gdouble rgba[4]; for (list = buffer->preedit_color_tags; list; list = g_list_next (list)) { - GimpRGB tag_color; - guchar tag_r, tag_g, tag_b; + GeglColor *tag_color; tag = list->data; gimp_text_tag_get_fg_color (tag, &tag_color); - gimp_rgb_get_uchar (&tag_color, &tag_r, &tag_g, &tag_b); - /* Do not compare the alpha channel, since it's unused */ - if (tag_r == r && - tag_g == g && - tag_b == b) - { - return tag; - } + if (gimp_color_is_perceptually_identical (color, tag_color)) + return tag; } + /* We save the color as unbounded sRGB. Is it right? TODO */ + gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgba); g_snprintf (name, sizeof (name), "preedit-color-#%02x%02x%02x", - r, g, b); + (guint) (rgba[0] * 255), (guint) (rgba[1] * 255), (guint) (rgba[2] * 255)); tag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (buffer), name, - "foreground-rgba", (GdkRGBA *) color, + "foreground-rgba", (GdkRGBA *) rgba, "foreground-set", TRUE, NULL); @@ -1084,7 +1069,7 @@ void gimp_text_buffer_set_preedit_color (GimpTextBuffer *buffer, const GtkTextIter *start, const GtkTextIter *end, - const GimpRGB *color) + GeglColor *color) { GList *list; @@ -1116,41 +1101,33 @@ gimp_text_buffer_set_preedit_color (GimpTextBuffer *buffer, GtkTextTag * gimp_text_buffer_get_preedit_bg_color_tag (GimpTextBuffer *buffer, - const GimpRGB *color) + GeglColor *color) { GList *list; GtkTextTag *tag; gchar name[256]; - guchar r, g, b; - - gimp_rgb_get_uchar (color, &r, &g, &b); + gdouble rgba[4]; for (list = buffer->preedit_bg_color_tags; list; list = g_list_next (list)) { - GimpRGB tag_color; - guchar tag_r, tag_g, tag_b; + GeglColor *tag_color; tag = list->data; gimp_text_tag_get_bg_color (tag, &tag_color); - gimp_rgb_get_uchar (&tag_color, &tag_r, &tag_g, &tag_b); - /* Do not compare the alpha channel, since it's unused */ - if (tag_r == r && - tag_g == g && - tag_b == b) - { - return tag; - } + if (gimp_color_is_perceptually_identical (color, tag_color)) + return tag; } + gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), rgba); g_snprintf (name, sizeof (name), "bg-color-#%02x%02x%02x", - r, g, b); + (guint) (rgba[0] * 255), (guint) (rgba[1] * 255), (guint) (rgba[2] * 255)); tag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (buffer), name, - "background-rgba", (GdkRGBA *) color, + "background-rgba", (GdkRGBA *) rgba, "background-set", TRUE, NULL); @@ -1163,7 +1140,7 @@ void gimp_text_buffer_set_preedit_bg_color (GimpTextBuffer *buffer, const GtkTextIter *start, const GtkTextIter *end, - const GimpRGB *color) + GeglColor *color) { GList *list; @@ -1283,13 +1260,13 @@ gimp_text_buffer_tag_to_name (GimpTextBuffer *buffer, if (value) { - GimpRGB color; - guchar r, g, b; + GeglColor *color; + guchar rgb[3]; gimp_text_tag_get_fg_color (tag, &color); - gimp_rgb_get_uchar (&color, &r, &g, &b); - - *value = g_strdup_printf ("#%02x%02x%02x", r, g, b); + gegl_color_get_pixel (color, babl_format ("R'G'B' u8"), rgb); + *value = g_strdup_printf ("#%02x%02x%02x", rgb[0], rgb[1], rgb[2]); + g_object_unref (color); } return "span"; @@ -1304,13 +1281,13 @@ gimp_text_buffer_tag_to_name (GimpTextBuffer *buffer, if (value) { - GimpRGB color; - guchar r, g, b; + GeglColor *color; + guchar rgb[3]; gimp_text_tag_get_fg_color (tag, &color); - gimp_rgb_get_uchar (&color, &r, &g, &b); - - *value = g_strdup_printf ("#%02x%02x%02x", r, g, b); + gegl_color_get_pixel (color, babl_format ("R'G'B' u8"), rgb); + *value = g_strdup_printf ("#%02x%02x%02x", rgb[0], rgb[1], rgb[2]); + g_object_unref (color); } return "span"; @@ -1322,13 +1299,13 @@ gimp_text_buffer_tag_to_name (GimpTextBuffer *buffer, if (value) { - GimpRGB color; - guchar r, g, b; + GeglColor *color; + guchar rgb[3]; gimp_text_tag_get_bg_color (tag, &color); - gimp_rgb_get_uchar (&color, &r, &g, &b); - - *value = g_strdup_printf ("#%02x%02x%02x", r, g, b); + gegl_color_get_pixel (color, babl_format ("R'G'B' u8"), rgb); + *value = g_strdup_printf ("#%02x%02x%02x", rgb[0], rgb[1], rgb[2]); + g_object_unref (color); } return "span"; @@ -1394,15 +1371,23 @@ gimp_text_buffer_name_to_tag (GimpTextBuffer *buffer, } else if (! strcmp (attribute, GIMP_TEXT_ATTR_NAME_COLOR)) { - GimpRGB color; - guint r, g, b; + GtkTextTag *tag; + GeglColor *color; + guint r, g, b; + guchar rgb[3]; sscanf (value, "#%02x%02x%02x", &r, &g, &b); + rgb[0] = r; + rgb[1] = g; + rgb[2] = b; - gimp_rgb_set_alpha (&color, 1.0); - gimp_rgb_set_uchar (&color, r, g, b); + color = gegl_color_new (NULL); + gegl_color_set_pixel (color, babl_format ("R'G'B' u8"), rgb); - return gimp_text_buffer_get_color_tag (buffer, &color); + tag = gimp_text_buffer_get_color_tag (buffer, color); + g_object_unref (color); + + return tag; } } @@ -1447,7 +1432,7 @@ gimp_text_buffer_insert (GimpTextBuffer *buffer, GList *insert_tags; GList *remove_tags; GSList *tags_off = NULL; - GimpRGB color; + GeglColor *color; g_return_if_fail (GIMP_IS_TEXT_BUFFER (buffer)); @@ -1518,7 +1503,8 @@ gimp_text_buffer_insert (GimpTextBuffer *buffer, if (gimp_text_buffer_get_iter_color (buffer, &start, &color)) { - g_signal_emit (buffer, buffer_signals[COLOR_APPLIED], 0, &color); + g_signal_emit (buffer, buffer_signals[COLOR_APPLIED], 0, color); + g_object_unref (color); } gtk_text_buffer_end_user_action (GTK_TEXT_BUFFER (buffer)); diff --git a/app/widgets/gimptextbuffer.h b/app/widgets/gimptextbuffer.h index 87898bbbd7..2ee8e100c2 100644 --- a/app/widgets/gimptextbuffer.h +++ b/app/widgets/gimptextbuffer.h @@ -62,129 +62,129 @@ struct _GimpTextBufferClass GtkTextBufferClass parent_class; void (* color_applied) (GimpTextBuffer *buffer, - const GimpRGB *color); + GeglColor *color); }; -GType gimp_text_buffer_get_type (void) G_GNUC_CONST; +GType gimp_text_buffer_get_type (void) G_GNUC_CONST; -GimpTextBuffer * gimp_text_buffer_new (void); +GimpTextBuffer * gimp_text_buffer_new (void); -void gimp_text_buffer_set_text (GimpTextBuffer *buffer, - const gchar *text); -gchar * gimp_text_buffer_get_text (GimpTextBuffer *buffer); +void gimp_text_buffer_set_text (GimpTextBuffer *buffer, + const gchar *text); +gchar * gimp_text_buffer_get_text (GimpTextBuffer *buffer); -void gimp_text_buffer_set_markup (GimpTextBuffer *buffer, - const gchar *markup); -gchar * gimp_text_buffer_get_markup (GimpTextBuffer *buffer); +void gimp_text_buffer_set_markup (GimpTextBuffer *buffer, + const gchar *markup); +gchar * gimp_text_buffer_get_markup (GimpTextBuffer *buffer); -gboolean gimp_text_buffer_has_markup (GimpTextBuffer *buffer); +gboolean gimp_text_buffer_has_markup (GimpTextBuffer *buffer); -GtkTextTag * gimp_text_buffer_get_iter_size (GimpTextBuffer *buffer, - const GtkTextIter *iter, - gint *size); -GtkTextTag * gimp_text_buffer_get_size_tag (GimpTextBuffer *buffer, - gint size); -void gimp_text_buffer_set_size (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - gint size); -void gimp_text_buffer_change_size (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - gint amount); +GtkTextTag * gimp_text_buffer_get_iter_size (GimpTextBuffer *buffer, + const GtkTextIter *iter, + gint *size); +GtkTextTag * gimp_text_buffer_get_size_tag (GimpTextBuffer *buffer, + gint size); +void gimp_text_buffer_set_size (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + gint size); +void gimp_text_buffer_change_size (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + gint amount); -GtkTextTag * gimp_text_buffer_get_iter_baseline (GimpTextBuffer *buffer, - const GtkTextIter *iter, - gint *baseline); -void gimp_text_buffer_set_baseline (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - gint count); -void gimp_text_buffer_change_baseline (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - gint count); +GtkTextTag * gimp_text_buffer_get_iter_baseline (GimpTextBuffer *buffer, + const GtkTextIter *iter, + gint *baseline); +void gimp_text_buffer_set_baseline (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + gint count); +void gimp_text_buffer_change_baseline (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + gint count); -GtkTextTag * gimp_text_buffer_get_iter_kerning (GimpTextBuffer *buffer, - const GtkTextIter *iter, - gint *kerning); -void gimp_text_buffer_set_kerning (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - gint count); -void gimp_text_buffer_change_kerning (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - gint count); +GtkTextTag * gimp_text_buffer_get_iter_kerning (GimpTextBuffer *buffer, + const GtkTextIter *iter, + gint *kerning); +void gimp_text_buffer_set_kerning (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + gint count); +void gimp_text_buffer_change_kerning (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + gint count); -GtkTextTag * gimp_text_buffer_get_iter_font (GimpTextBuffer *buffer, - const GtkTextIter *iter, - gchar **font); -GtkTextTag * gimp_text_buffer_get_font_tag (GimpTextBuffer *buffer, - const gchar *font); -void gimp_text_buffer_set_font (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - const gchar *font); +GtkTextTag * gimp_text_buffer_get_iter_font (GimpTextBuffer *buffer, + const GtkTextIter *iter, + gchar **font); +GtkTextTag * gimp_text_buffer_get_font_tag (GimpTextBuffer *buffer, + const gchar *font); +void gimp_text_buffer_set_font (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + const gchar *font); -GtkTextTag * gimp_text_buffer_get_iter_color (GimpTextBuffer *buffer, - const GtkTextIter *iter, - GimpRGB *color); -GtkTextTag * gimp_text_buffer_get_color_tag (GimpTextBuffer *buffer, - const GimpRGB *color); -void gimp_text_buffer_set_color (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - const GimpRGB *color); +GtkTextTag * gimp_text_buffer_get_iter_color (GimpTextBuffer *buffer, + const GtkTextIter *iter, + GeglColor **color); +GtkTextTag * gimp_text_buffer_get_color_tag (GimpTextBuffer *buffer, + GeglColor *color); +void gimp_text_buffer_set_color (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + GeglColor *color); -GtkTextTag * gimp_text_buffer_get_preedit_color_tag (GimpTextBuffer *buffer, - const GimpRGB *color); -void gimp_text_buffer_set_preedit_color (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - const GimpRGB *color); -GtkTextTag * gimp_text_buffer_get_preedit_bg_color_tag (GimpTextBuffer *buffer, - const GimpRGB *color); -void gimp_text_buffer_set_preedit_bg_color (GimpTextBuffer *buffer, - const GtkTextIter *start, - const GtkTextIter *end, - const GimpRGB *color); +GtkTextTag * gimp_text_buffer_get_preedit_color_tag (GimpTextBuffer *buffer, + GeglColor *color); +void gimp_text_buffer_set_preedit_color (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + GeglColor *color); +GtkTextTag * gimp_text_buffer_get_preedit_bg_color_tag (GimpTextBuffer *buffer, + GeglColor *color); +void gimp_text_buffer_set_preedit_bg_color (GimpTextBuffer *buffer, + const GtkTextIter *start, + const GtkTextIter *end, + GeglColor *color); -const gchar * gimp_text_buffer_tag_to_name (GimpTextBuffer *buffer, - GtkTextTag *tag, - const gchar **attribute, - gchar **value); -GtkTextTag * gimp_text_buffer_name_to_tag (GimpTextBuffer *buffer, - const gchar *name, - const gchar *attribute, - const gchar *value); +const gchar * gimp_text_buffer_tag_to_name (GimpTextBuffer *buffer, + GtkTextTag *tag, + const gchar **attribute, + gchar **value); +GtkTextTag * gimp_text_buffer_name_to_tag (GimpTextBuffer *buffer, + const gchar *name, + const gchar *attribute, + const gchar *value); -void gimp_text_buffer_set_insert_tags (GimpTextBuffer *buffer, - GList *insert_tags, - GList *remove_tags); -void gimp_text_buffer_clear_insert_tags (GimpTextBuffer *buffer); -void gimp_text_buffer_insert (GimpTextBuffer *buffer, - const gchar *text); +void gimp_text_buffer_set_insert_tags (GimpTextBuffer *buffer, + GList *insert_tags, + GList *remove_tags); +void gimp_text_buffer_clear_insert_tags (GimpTextBuffer *buffer); +void gimp_text_buffer_insert (GimpTextBuffer *buffer, + const gchar *text); -gint gimp_text_buffer_get_iter_index (GimpTextBuffer *buffer, - GtkTextIter *iter, - gboolean layout_index); -void gimp_text_buffer_get_iter_at_index (GimpTextBuffer *buffer, - GtkTextIter *iter, - gint index, - gboolean layout_index); +gint gimp_text_buffer_get_iter_index (GimpTextBuffer *buffer, + GtkTextIter *iter, + gboolean layout_index); +void gimp_text_buffer_get_iter_at_index (GimpTextBuffer *buffer, + GtkTextIter *iter, + gint index, + gboolean layout_index); -gboolean gimp_text_buffer_load (GimpTextBuffer *buffer, - GFile *file, - GError **error); -gboolean gimp_text_buffer_save (GimpTextBuffer *buffer, - GFile *file, - gboolean selection_only, - GError **error); +gboolean gimp_text_buffer_load (GimpTextBuffer *buffer, + GFile *file, + GError **error); +gboolean gimp_text_buffer_save (GimpTextBuffer *buffer, + GFile *file, + gboolean selection_only, + GError **error); -GList * gimp_text_buffer_get_tags_on_iter (GimpTextBuffer *buffer, - const GtkTextIter *iter); -GList * gimp_text_buffer_get_all_tags (GimpTextBuffer *buffer); +GList * gimp_text_buffer_get_tags_on_iter (GimpTextBuffer *buffer, + const GtkTextIter *iter); +GList * gimp_text_buffer_get_all_tags (GimpTextBuffer *buffer); #endif /* __GIMP_TEXT_BUFFER_H__ */ diff --git a/app/widgets/gimptextstyleeditor.c b/app/widgets/gimptextstyleeditor.c index 6c22fd18e6..6630024148 100644 --- a/app/widgets/gimptextstyleeditor.c +++ b/app/widgets/gimptextstyleeditor.c @@ -607,10 +607,8 @@ gimp_text_style_editor_list_tags (GimpTextStyleEditor *editor, if (TRUE) /* FIXME should have "inconsistent" state as for font and size */ { GtkTextTag *tag; - GimpRGB rgb; - gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb); - tag = gimp_text_buffer_get_color_tag (editor->buffer, &rgb); + tag = gimp_text_buffer_get_color_tag (editor->buffer, color); tags = g_list_prepend (tags, tag); } @@ -745,15 +743,11 @@ gimp_text_style_editor_color_changed (GimpColorButton *button, if (gtk_text_buffer_get_has_selection (buffer)) { GeglColor *color; - GimpRGB rgb; GtkTextIter start, end; gtk_text_buffer_get_selection_bounds (buffer, &start, &end); - color = gimp_color_button_get_color (button); - - gegl_color_get_pixel (color, babl_format ("R'G'B'A double"), &rgb); - gimp_text_buffer_set_color (editor->buffer, &start, &end, &rgb); + gimp_text_buffer_set_color (editor->buffer, &start, &end, color); g_object_unref (color); } @@ -766,22 +760,17 @@ static void gimp_text_style_editor_set_color (GimpTextStyleEditor *editor, GtkTextTag *color_tag) { - GeglColor *color; - GimpRGB rgb; - - gimp_rgba_set (&rgb, 0.0, 0.0, 0.0, 1.0); + GeglColor *color = NULL; if (color_tag) - gimp_text_tag_get_fg_color (color_tag, &rgb); + gimp_text_tag_get_fg_color (color_tag, &color); g_signal_handlers_block_by_func (editor->color_button, gimp_text_style_editor_color_changed, editor); - color = gegl_color_new (NULL); - gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), &rgb); gimp_color_button_set_color (GIMP_COLOR_BUTTON (editor->color_button), color); - g_object_unref (color); + g_clear_object (&color); /* FIXME should have "inconsistent" state as for font and size */ diff --git a/app/widgets/gimptexttag.c b/app/widgets/gimptexttag.c index c3b5cddfd5..d0c4870286 100644 --- a/app/widgets/gimptexttag.c +++ b/app/widgets/gimptexttag.c @@ -81,10 +81,10 @@ gimp_text_tag_get_font (GtkTextTag *tag) } gboolean -gimp_text_tag_get_fg_color (GtkTextTag *tag, - GimpRGB *color) +gimp_text_tag_get_fg_color (GtkTextTag *tag, + GeglColor **color) { - GdkRGBA *rgba; + GdkRGBA *rgba = NULL; gboolean set; g_object_get (tag, @@ -92,16 +92,16 @@ gimp_text_tag_get_fg_color (GtkTextTag *tag, GIMP_TEXT_PROP_NAME_FG_COLOR, &rgba, NULL); - gimp_rgb_set (color, rgba->red, rgba->green, rgba->blue); - + *color = gegl_color_new (NULL); + gegl_color_set_pixel (*color, babl_format ("R'G'B'A double"), rgba); gdk_rgba_free (rgba); return set; } gboolean -gimp_text_tag_get_bg_color (GtkTextTag *tag, - GimpRGB *color) +gimp_text_tag_get_bg_color (GtkTextTag *tag, + GeglColor **color) { GdkRGBA *rgba; gboolean set; @@ -111,8 +111,8 @@ gimp_text_tag_get_bg_color (GtkTextTag *tag, GIMP_TEXT_PROP_NAME_BG_COLOR, &rgba, NULL); - gimp_rgb_set (color, rgba->red, rgba->green, rgba->blue); - + *color = gegl_color_new (NULL); + gegl_color_set_pixel (*color, babl_format ("R'G'B'A double"), rgba); gdk_rgba_free (rgba); return set; diff --git a/app/widgets/gimptexttag.h b/app/widgets/gimptexttag.h index e638c0c3d0..440575146e 100644 --- a/app/widgets/gimptexttag.h +++ b/app/widgets/gimptexttag.h @@ -32,14 +32,14 @@ #define GIMP_TEXT_PROP_NAME_BG_COLOR "background-rgba" -gint gimp_text_tag_get_size (GtkTextTag *tag); -gint gimp_text_tag_get_baseline (GtkTextTag *tag); -gint gimp_text_tag_get_kerning (GtkTextTag *tag); -gchar * gimp_text_tag_get_font (GtkTextTag *tag); -gboolean gimp_text_tag_get_fg_color (GtkTextTag *tag, - GimpRGB *color); -gboolean gimp_text_tag_get_bg_color (GtkTextTag *tag, - GimpRGB *color); +gint gimp_text_tag_get_size (GtkTextTag *tag); +gint gimp_text_tag_get_baseline (GtkTextTag *tag); +gint gimp_text_tag_get_kerning (GtkTextTag *tag); +gchar * gimp_text_tag_get_font (GtkTextTag *tag); +gboolean gimp_text_tag_get_fg_color (GtkTextTag *tag, + GeglColor **color); +gboolean gimp_text_tag_get_bg_color (GtkTextTag *tag, + GeglColor **color); #endif /* __GIMP_TEXT_TAG_H__ */