[gtk+/wip/matthiasc/gskpango] Use GL to render underlines



commit 55a7caa1a6780da38b642d07dfb61109e8878423
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Aug 30 15:06:13 2017 -0400

    Use GL to render underlines
    
    Translate draw_rectangle calls to color nodes.

 gtk/gskpango.c |   55 +++++++++++++++++++++++++++++++------------------------
 1 files changed, 31 insertions(+), 24 deletions(-)
---
diff --git a/gtk/gskpango.c b/gtk/gskpango.c
index ef8aab3..48a1071 100644
--- a/gtk/gskpango.c
+++ b/gtk/gskpango.c
@@ -69,17 +69,17 @@ struct _GskPangoRendererClass
 
 G_DEFINE_TYPE (GskPangoRenderer, gsk_pango_renderer, PANGO_TYPE_RENDERER)
 
-static void
-set_color (GskPangoRenderer *crenderer,
-           cairo_t          *cr,
-           PangoRenderPart   part)
+static gboolean
+get_color (GskPangoRenderer *crenderer,
+           PangoRenderPart   part,
+           GdkRGBA          *rgba)
 {
   PangoColor *color = pango_renderer_get_color ((PangoRenderer *) (crenderer), part);
   guint16 a = pango_renderer_get_alpha ((PangoRenderer *) (crenderer), part);
   gdouble red, green, blue, alpha;
 
   if (!a && !color)
-    return;
+    return FALSE;
 
   if (color)
     {
@@ -89,24 +89,17 @@ set_color (GskPangoRenderer *crenderer,
       alpha = 1.;
     }
   else
-    {
-      cairo_pattern_t *pattern = cairo_get_source (cr);
-
-      if (pattern && cairo_pattern_get_type (pattern) == CAIRO_PATTERN_TYPE_SOLID)
-        cairo_pattern_get_rgba (pattern, &red, &green, &blue, &alpha);
-      else
-        {
-          red = 0.;
-          green = 0.;
-          blue = 0.;
-          alpha = 1.;
-        }
-    }
+    return FALSE;
 
   if (a)
     alpha = a / 65535.;
 
-  cairo_set_source_rgba (cr, red, green, blue, alpha);
+  rgba->red = red;
+  rgba->green = green;
+  rgba->blue = blue;
+  rgba->alpha = alpha;
+
+  return TRUE;
 }
 
 #if 0
@@ -285,13 +278,14 @@ gsk_pango_renderer_show_text_glyphs (PangoRenderer        *renderer,
   cairo_glyph_t stack_glyphs[STACK_ARRAY_LENGTH (cairo_glyph_t)];
   double base_x = crenderer->x_offset + (double)x / PANGO_SCALE;
   double base_y = crenderer->y_offset + (double)y / PANGO_SCALE;
-
+  GdkRGBA rgba;
 
   cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds, "Text<%dglyphs>", 
glyphs->num_glyphs);
 
-  gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
-
-  set_color (crenderer, cr, PANGO_RENDER_PART_FOREGROUND);
+  if (get_color (crenderer, PANGO_RENDER_PART_FOREGROUND, &rgba))
+    gdk_cairo_set_source_rgba (cr, &rgba);
+  else
+    gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
 
   if (!_pango_cairo_font_install (font, cr))
     {
@@ -451,8 +445,21 @@ gsk_pango_renderer_draw_rectangle (PangoRenderer     *renderer,
                                      int                width,
                                      int                height)
 {
-#if 0
   GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
+  GdkRGBA rgba;
+  graphene_rect_t bounds;
+
+//g_print ("draw rectangle %d %d %d %d\n", x, y, width, height);
+  if (!get_color (crenderer, PANGO_RENDER_PART_FOREGROUND, &rgba))
+    rgba = *crenderer->fg_color;
+
+  graphene_rect_init (&bounds,
+                      crenderer->x_offset + (double)x / PANGO_SCALE,
+                      crenderer->y_offset + (double)y / PANGO_SCALE,
+                      (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
+
+  gtk_snapshot_append_color (crenderer->snapshot, &rgba, &bounds, "DrawRectangle");
+#if 0
 
   cairo_save (crenderer->cr);
   set_color (crenderer, part);


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