summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-08-11 21:25:51 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-08-11 21:25:51 -0400
commit712834868b05b222545dcce561222e1fcc46278e (patch)
treed2bc1788a3d6d1c9056a3f852c3c41b1086ccf90
parent12e98498f6aa687a07034d9c054d20a2f74159e4 (diff)
downloadgtk+-712834868b05b222545dcce561222e1fcc46278e.tar.gz
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.
-rw-r--r--gtk/gtktextdisplay.c39
1 files changed, 27 insertions, 12 deletions
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