[gtk+/wip/matthiasc/alpha: 1/2] GtkTextDisplay: Use pango renderer alpha support



commit 712834868b05b222545dcce561222e1fcc46278e
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Aug 11 21:25:51 2015 -0400

    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.

 gtk/gtktextdisplay.c |   39 +++++++++++++++++++++++++++------------
 1 files changed, 27 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtktextdisplay.c b/gtk/gtktextdisplay.c
index f817801..c2e911a 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]