GtkTextDisplay: Use pango renderer alpha support

We don't need to store our own copy of the colors anymore,
now that PangoRenderer can do alpha.
This commit is contained in:
Matthias Clasen 2015-08-11 21:25:51 -04:00
parent 0de600c9dd
commit e02acc7d71

View File

@ -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