[gtk+/wip/matthiasc/gskpango] Simplify



commit 11ffd733dbb30ef993657251ed0cfb31beb12c0a
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Aug 30 14:22:42 2017 -0400

    Simplify
    
    Remove all the do_path code paths - we're not using them.

 gtk/gskpango.c |  192 +++++++++-----------------------------------------------
 1 files changed, 29 insertions(+), 163 deletions(-)
---
diff --git a/gtk/gskpango.c b/gtk/gskpango.c
index 0715c21..ef8aab3 100644
--- a/gtk/gskpango.c
+++ b/gtk/gskpango.c
@@ -52,7 +52,6 @@ struct _GskPangoRenderer
 
   GtkSnapshot *snapshot;
   const GdkRGBA *fg_color;
-  gboolean do_path;
   gboolean has_show_text_glyphs;
   double x_offset, y_offset;
 
@@ -123,81 +122,6 @@ gsk_pango_renderer_draw_frame (GskPangoRenderer *crenderer,
 {
   cairo_t *cr = crenderer->cr;
 
-  if (crenderer->do_path)
-    {
-      double d2 = line_width * .5, d = line_width;
-
-      /* we draw an outer box in one winding direction and an inner one in the
-       * opposite direction.  This works for both cairo windings rules.
-       *
-       * what we really want is cairo_stroke_to_path(), but that's not
-       * implemented in cairo yet.
-       */
-
-      /* outer */
-      cairo_rectangle (cr, x-d2, y-d2, width+d, height+d);
-
-      /* inner */
-      if (invalid)
-        {
-          /* delicacies of computing the joint... this is REALLY slow */
-
-          double alpha, tan_alpha2, cos_alpha;
-          double sx, sy;
-
-          alpha = atan2 (height, width);
-
-          tan_alpha2 = tan (alpha * .5);
-          if (tan_alpha2 < 1e-5 || (sx = d2 / tan_alpha2, 2. * sx > width - d))
-            sx = (width - d) * .5;
-
-          cos_alpha = cos (alpha);
-          if (cos_alpha < 1e-5 || (sy = d2 / cos_alpha, 2. * sy > height - d))
-            sy = (height - d) * .5;
-
-          /* top triangle */
-          cairo_new_sub_path (cr);
-          cairo_line_to (cr, x+width-sx, y+d2);
-          cairo_line_to (cr, x+sx, y+d2);
-          cairo_line_to (cr, x+.5*width, y+.5*height-sy);
-          cairo_close_path (cr);
-
-          /* bottom triangle */
-          cairo_new_sub_path (cr);
-          cairo_line_to (cr, x+width-sx, y+height-d2);
-          cairo_line_to (cr, x+.5*width, y+.5*height+sy);
-          cairo_line_to (cr, x+sx, y+height-d2);
-          cairo_close_path (cr);
-
-
-          alpha = G_PI_2 - alpha;
-          tan_alpha2 = tan (alpha * .5);
-          if (tan_alpha2 < 1e-5 || (sy = d2 / tan_alpha2, 2. * sy > height - d))
-            sy = (height - d) * .5;
-
-          cos_alpha = cos (alpha);
-          if (cos_alpha < 1e-5 || (sx = d2 / cos_alpha, 2. * sx > width - d))
-            sx = (width - d) * .5;
-
-          /* left triangle */
-          cairo_new_sub_path (cr);
-          cairo_line_to (cr, x+d2, y+sy);
-          cairo_line_to (cr, x+d2, y+height-sy);
-          cairo_line_to (cr, x+.5*width-sx, y+.5*height);
-          cairo_close_path (cr);
-
-          /* right triangle */
-          cairo_new_sub_path (cr);
-          cairo_line_to (cr, x+width-d2, y+sy);
-          cairo_line_to (cr, x+.5*width+sx, y+.5*height);
-          cairo_line_to (cr, x+width-d2, y+height-sy);
-          cairo_close_path (cr);
-        }
-      else
-        cairo_rectangle (cr, x+width-d2, y+d2, - (width-d), height-d);
-    }
-  else
-    {
       cairo_rectangle (cr, x, y, width, height);
 
       if (invalid)
@@ -219,7 +143,6 @@ gsk_pango_renderer_draw_frame (GskPangoRenderer *crenderer,
       cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
       cairo_set_miter_limit (cr, 2.);
       cairo_stroke (cr);
-    }
 }
 
 static void
@@ -327,11 +250,7 @@ gsk_pango_renderer_draw_unknown_glyph (GskPangoRenderer *crenderer,
 
           hexbox_string[0] = buf[row * cols + col];
 
-          if (crenderer->do_path)
-              cairo_text_path (crenderer->cr, hexbox_string);
-          else
-              cairo_show_text (crenderer->cr, hexbox_string);
-        }
+          cairo_show_text (crenderer->cr, hexbox_string);
     }
 
 done:
@@ -372,8 +291,7 @@ gsk_pango_renderer_show_text_glyphs (PangoRenderer        *renderer,
 
   gdk_cairo_set_source_rgba (cr, crenderer->fg_color);
 
-  if (!crenderer->do_path)
-    set_color (crenderer, cr, PANGO_RENDER_PART_FOREGROUND);
+  set_color (crenderer, cr, PANGO_RENDER_PART_FOREGROUND);
 
   if (!_pango_cairo_font_install (font, cr))
     {
@@ -426,16 +344,13 @@ gsk_pango_renderer_show_text_glyphs (PangoRenderer        *renderer,
       x_position += gi->geometry.width;
     }
 
-  if (G_UNLIKELY (crenderer->do_path))
-    cairo_glyph_path (cr, cairo_glyphs, count);
-  else
-    if (G_UNLIKELY (clusters))
+  if (G_UNLIKELY (clusters))
       cairo_show_text_glyphs (cr,
                               text, text_len,
                               cairo_glyphs, count,
                               clusters, num_clusters,
                               backward ? CAIRO_TEXT_CLUSTER_FLAG_BACKWARD : 0);
-    else
+  else
       cairo_show_glyphs (cr, cairo_glyphs, count);
 
   if (cairo_glyphs != stack_glyphs)
@@ -473,7 +388,7 @@ gsk_pango_renderer_draw_glyph_item (PangoRenderer  *renderer,
   cairo_text_cluster_t stack_clusters[STACK_ARRAY_LENGTH (cairo_text_cluster_t)];
   int num_clusters;
 
-  if (!crenderer->has_show_text_glyphs || crenderer->do_path)
+  if (!crenderer->has_show_text_glyphs)
     {
       gsk_pango_renderer_show_text_glyphs (renderer, NULL, 0, glyphs, NULL, 0, FALSE, font, x, y);
       return;
@@ -539,24 +454,16 @@ gsk_pango_renderer_draw_rectangle (PangoRenderer     *renderer,
 #if 0
   GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
 
-  if (!crenderer->do_path)
-    {
-      cairo_save (crenderer->cr);
-
-      set_color (crenderer, part);
-    }
+  cairo_save (crenderer->cr);
+  set_color (crenderer, part);
 
   cairo_rectangle (crenderer->cr,
                    crenderer->x_offset + (double)x / PANGO_SCALE,
                    crenderer->y_offset + (double)y / PANGO_SCALE,
                    (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
 
-  if (!crenderer->do_path)
-    {
-      cairo_fill (crenderer->cr);
-
-      cairo_restore (crenderer->cr);
-    }
+  cairo_fill (crenderer->cr);
+  cairo_restore (crenderer->cr);
 #endif
 }
 
@@ -579,8 +486,7 @@ gsk_pango_renderer_draw_trapezoid (PangoRenderer     *renderer,
 
   cairo_save (cr);
 
-  if (!crenderer->do_path)
-    set_color (crenderer, part);
+  set_color (crenderer, part);
 
   x = crenderer->x_offset,
   y = crenderer->y_offset;
@@ -594,8 +500,7 @@ gsk_pango_renderer_draw_trapezoid (PangoRenderer     *renderer,
   cairo_line_to (cr, x12, y2);
   cairo_close_path (cr);
 
-  if (!crenderer->do_path)
-    cairo_fill (cr);
+  cairo_fill (cr);
 
   cairo_restore (cr);
 #endif
@@ -685,26 +590,20 @@ gsk_pango_renderer_draw_error_underline (PangoRenderer *renderer,
   GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer);
   cairo_t *cr = crenderer->cr;
 
-  if (!crenderer->do_path)
-    {
-      cairo_save (cr);
+  cairo_save (cr);
 
-      set_color (crenderer, PANGO_RENDER_PART_UNDERLINE);
+  set_color (crenderer, PANGO_RENDER_PART_UNDERLINE);
 
-      cairo_new_path (cr);
-    }
+  cairo_new_path (cr);
 
   draw_error_underline (cr,
                         crenderer->x_offset + (double)x / PANGO_SCALE,
                         crenderer->y_offset + (double)y / PANGO_SCALE,
                         (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
 
-  if (!crenderer->do_path)
-    {
-      cairo_fill (cr);
+  cairo_fill (cr);
 
-      cairo_restore (cr);
-    }
+  cairo_restore (cr);
 #endif
 }
 
@@ -737,12 +636,11 @@ gsk_pango_renderer_draw_shape (PangoRenderer  *renderer,
   base_y = crenderer->y_offset + (double)y / PANGO_SCALE;
 
   cairo_save (cr);
-  if (!crenderer->do_path)
-    set_color (crenderer, PANGO_RENDER_PART_FOREGROUND);
+  set_color (crenderer, PANGO_RENDER_PART_FOREGROUND);
 
   cairo_move_to (cr, base_x, base_y);
 
-  shape_renderer (cr, attr, crenderer->do_path, shape_renderer_data);
+  shape_renderer (cr, attr, FALSE, shape_renderer_data);
 
   cairo_restore (cr);
 #endif
@@ -798,7 +696,6 @@ release_renderer (GskPangoRenderer *renderer)
   if (G_LIKELY (renderer->is_cached_renderer))
     {
       renderer->snapshot = NULL;
-      renderer->do_path = FALSE;
       renderer->has_show_text_glyphs = FALSE;
       renderer->x_offset = 0.;
       renderer->y_offset = 0.;
@@ -809,60 +706,29 @@ release_renderer (GskPangoRenderer *renderer)
     g_object_unref (renderer);
 }
 
-#if 0
-static void
-save_current_point (GskPangoRenderer *renderer)
-{
-  renderer->cr_had_current_point = cairo_has_current_point (renderer->cr);
-  cairo_get_current_point (renderer->cr, &renderer->x_offset, &renderer->y_offset);
-
-  /* abuse save_current_point() to cache cairo_has_show_text_glyphs() result */
-  renderer->has_show_text_glyphs = cairo_surface_has_show_text_glyphs (cairo_get_target (renderer->cr));
-}
-
-static void
-restore_current_point (GskPangoRenderer *renderer)
-{
-  if (renderer->cr_had_current_point)
-    /* XXX should do cairo_set_current_point() when we have that function */
-    cairo_move_to (renderer->cr, renderer->x_offset, renderer->y_offset);
-  else
-    cairo_new_sub_path (renderer->cr);
-}
-#endif
-
 /* convenience wrappers using the default renderer */
 
-static void
-gsk_pango_do_layout (GtkSnapshot   *snapshot,
-                     const GdkRGBA *fg_color,
-                     PangoLayout   *layout,
-                     gboolean       do_path)
+void
+gsk_pango_show_layout (GtkSnapshot   *snapshot,
+                       const GdkRGBA *fg_color,
+                       PangoLayout   *layout)
 {
-  GskPangoRenderer *crenderer = acquire_renderer ();
-  PangoRenderer *renderer = (PangoRenderer *) crenderer;
+  GskPangoRenderer *crenderer;
   PangoRectangle ink_rect;
 
+  g_return_if_fail (snapshot != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  crenderer = acquire_renderer ();
+
   crenderer->snapshot = snapshot;
   crenderer->fg_color = fg_color;
-  crenderer->do_path = do_path;
   crenderer->x_offset = crenderer->y_offset = 0;
 
   pango_layout_get_pixel_extents (layout, &ink_rect, NULL);
   graphene_rect_init (&crenderer->bounds, ink_rect.x, ink_rect.y, ink_rect.width, ink_rect.height);
 
-  pango_renderer_draw_layout (renderer, layout, 0, 0);
+  pango_renderer_draw_layout (PANGO_RENDERER (crenderer), layout, 0, 0);
 
   release_renderer (crenderer);
 }
-
-void
-gsk_pango_show_layout (GtkSnapshot   *snapshot,
-                       const GdkRGBA *fg_color,
-                       PangoLayout   *layout)
-{
-  g_return_if_fail (snapshot != NULL);
-  g_return_if_fail (PANGO_IS_LAYOUT (layout));
-
-  gsk_pango_do_layout (snapshot, fg_color, layout, FALSE);
-}


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