[pango/underline-kerning] renderer: Use ink rects for line lengths




commit ada1bc9385d638e4c42a5aa58706c0a6874779e7
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Aug 27 15:27:04 2021 -0400

    renderer: Use ink rects for line lengths
    
    When rendering underlines and the like, we should use
    ink extents, since the logical extents will get shortened
    by kerning, which can be pretty noticable when underlining
    individual glyphs, such as the T in To.
    
    Fixes: #139

 pango/pango-renderer.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
---
diff --git a/pango/pango-renderer.c b/pango/pango-renderer.c
index c91cb6ee..055cdd97 100644
--- a/pango/pango-renderer.c
+++ b/pango/pango-renderer.c
@@ -362,8 +362,8 @@ add_underline (PangoRenderer    *renderer,
   int underline_thickness = pango_font_metrics_get_underline_thickness (metrics);
   int underline_position = pango_font_metrics_get_underline_position (metrics);
 
-  new_rect.x = base_x + logical_rect->x;
-  new_rect.width = logical_rect->width;
+  new_rect.x = base_x + ink_rect->x;
+  new_rect.width = ink_rect->width;
   new_rect.height = underline_thickness;
   new_rect.y = base_y;
 
@@ -425,8 +425,8 @@ add_overline (PangoRenderer    *renderer,
   int underline_thickness = pango_font_metrics_get_underline_thickness (metrics);
   int ascent = pango_font_metrics_get_ascent (metrics);
 
-  new_rect.x = base_x + logical_rect->x;
-  new_rect.width = logical_rect->width;
+  new_rect.x = base_x + ink_rect->x;
+  new_rect.width = ink_rect->width;
   new_rect.height = underline_thickness;
   new_rect.y = base_y;
 
@@ -480,8 +480,8 @@ add_strikethrough (PangoRenderer    *renderer,
   int strikethrough_thickness = pango_font_metrics_get_strikethrough_thickness (metrics);
   int strikethrough_position = pango_font_metrics_get_strikethrough_position (metrics);
 
-  new_rect.x = base_x + logical_rect->x;
-  new_rect.width = logical_rect->width;
+  new_rect.x = base_x + ink_rect->x;
+  new_rect.width = ink_rect->width;
   new_rect.y = (base_y - strikethrough_position) * num_glyphs;
   new_rect.height = strikethrough_thickness * num_glyphs;
 


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