diff --git a/gtk/gtktextdisplay.c b/gtk/gtktextdisplay.c index f817801880..c2e911ad64 100644 --- a/gtk/gtktextdisplay.c +++ b/gtk/gtktextdisplay.c @@ -107,13 +107,10 @@ struct _GtkTextRenderer GtkWidget *widget; cairo_t *cr; - + GdkRGBA *error_color; /* Error underline color for this widget */ GList *widgets; /* widgets encountered when drawing */ - GdkRGBA rgba[4]; - guint8 rgba_set[4]; - guint state : 2; }; @@ -132,17 +129,23 @@ text_renderer_set_rgba (GtkTextRenderer *text_renderer, const GdkRGBA *rgba) { PangoRenderer *renderer = PANGO_RENDERER (text_renderer); - PangoColor dummy = { 0, }; + PangoColor color = { 0, }; + guint16 alpha; if (rgba) { - text_renderer->rgba[part] = *rgba; - pango_renderer_set_color (renderer, part, &dummy); + color.red = (guint16)(rgba->red * 65535); + color.green = (guint16)(rgba->green * 65535); + color.blue = (guint16)(rgba->blue * 65535); + alpha = (guint16)(rgba->alpha * 65535); + pango_renderer_set_color (renderer, part, &color); + pango_renderer_set_alpha (renderer, part, alpha); } else - pango_renderer_set_color (renderer, part, NULL); - - text_renderer->rgba_set[part] = (rgba != NULL); + { + pango_renderer_set_color (renderer, part, NULL); + pango_renderer_set_alpha (renderer, part, 0); + } } static GtkTextAppearance * @@ -267,10 +270,22 @@ static void set_color (GtkTextRenderer *text_renderer, PangoRenderPart part) { + PangoColor *color; + GdkRGBA rgba; + guint16 alpha; + cairo_save (text_renderer->cr); - if (text_renderer->rgba_set[part]) - gdk_cairo_set_source_rgba (text_renderer->cr, &text_renderer->rgba[part]); + color = pango_renderer_get_color (PANGO_RENDERER (text_renderer), part); + alpha = pango_renderer_get_alpha (PANGO_RENDERER (text_renderer), part); + if (color) + { + rgba.red = color->red / 65535.; + rgba.green = color->green / 65535.; + rgba.blue = color->blue / 65535.; + rgba.alpha = alpha / 65535.; + gdk_cairo_set_source_rgba (text_renderer->cr, &rgba); + } } static void