diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-12-21 07:51:41 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-12-21 21:06:09 -0500 |
commit | 9fe2853692bb64ded58a507d87508dc8536cd386 (patch) | |
tree | 14cf437b74f69c172ecf8bf90e274639391e3e26 | |
parent | 93cb50d4438d2d60db4c1d0251db556da278e6fd (diff) | |
download | pango-9fe2853692bb64ded58a507d87508dc8536cd386.tar.gz |
Use a better size for missing space
Follow the Microsoft Typography recommendations from
https://docs.microsoft.com/en-us/typography/develop/character-design-standards/whitespace
and use half of an em for missing space.
Update affected tests.
Fixes: #647
-rw-r--r-- | pango/pangocairo-font.c | 43 | ||||
-rw-r--r-- | tests/layouts/no-space.layout | 10 | ||||
-rw-r--r-- | tests/layouts/valid-14.layout | 4 |
3 files changed, 11 insertions, 46 deletions
diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c index 02a976d8..5eb385d9 100644 --- a/pango/pangocairo-font.c +++ b/pango/pangocairo-font.c @@ -671,50 +671,15 @@ _pango_cairo_font_private_is_metrics_hinted (PangoCairoFontPrivate *cf_priv) return cf_priv->is_hinted; } + static void get_space_extents (PangoCairoFontPrivate *cf_priv, PangoRectangle *ink_rect, PangoRectangle *logical_rect) { - cairo_scaled_font_t *scaled_font; - const char hexdigits[] = "0123456789ABCDEF"; - char c[2] = {0, 0}; - int i; - double hex_width; - int width; - int n_chars; - - /* we don't render missing spaces as hex boxes, - * so come up with some width to use. For lack - * of anything better, use average hex digit width. - */ - - scaled_font = _pango_cairo_font_private_get_scaled_font (cf_priv); - hex_width = 0; - n_chars = 0; - for (i = 0 ; i < 16 ; i++) - { - cairo_text_extents_t extents; - - c[0] = hexdigits[i]; - cairo_scaled_font_text_extents (scaled_font, c, &extents); - if (extents.width > 0) - { - hex_width += extents.width; - n_chars++; - } - } - - if (n_chars == 0) - { - cairo_font_extents_t extents; - - cairo_scaled_font_extents (scaled_font, &extents); - hex_width += extents.max_x_advance; - n_chars++; - } + /* See https://docs.microsoft.com/en-us/typography/develop/character-design-standards/whitespace */ - width = pango_units_from_double (hex_width / n_chars); + int width = pango_font_get_absolute_size (PANGO_FONT (cf_priv->cfont)) / 2; if (ink_rect) { @@ -934,7 +899,7 @@ _pango_cairo_font_private_get_glyph_extents (PangoCairoFontPrivate *cf_priv, } else if (glyph & PANGO_GLYPH_UNKNOWN_FLAG) { - _pango_cairo_font_private_get_glyph_extents_missing(cf_priv, glyph, ink_rect, logical_rect); + _pango_cairo_font_private_get_glyph_extents_missing (cf_priv, glyph, ink_rect, logical_rect); return; } diff --git a/tests/layouts/no-space.layout b/tests/layouts/no-space.layout index 7b62c2e1..646450c1 100644 --- a/tests/layouts/no-space.layout +++ b/tests/layouts/no-space.layout @@ -21,7 +21,7 @@ "is-wrapped" : false, "is-ellipsized" : false, "unknown-glyphs" : 4, - "width" : 261120, + "width" : 130048, "height" : 45056, "log-attrs" : [ { @@ -105,13 +105,13 @@ "glyphs" : [ { "glyph" : 268435488, - "width" : 54272, + "width" : 21504, "is-cluster-start" : true, "log-cluster" : 0 }, { "glyph" : 268435488, - "width" : 54272, + "width" : 21504, "is-cluster-start" : true, "log-cluster" : 1 }, @@ -123,13 +123,13 @@ }, { "glyph" : 268435488, - "width" : 54272, + "width" : 21504, "is-cluster-start" : true, "log-cluster" : 5 }, { "glyph" : 268435488, - "width" : 54272, + "width" : 21504, "is-cluster-start" : true, "log-cluster" : 6 } diff --git a/tests/layouts/valid-14.layout b/tests/layouts/valid-14.layout index 593e538e..07c80f17 100644 --- a/tests/layouts/valid-14.layout +++ b/tests/layouts/valid-14.layout @@ -235,7 +235,7 @@ }, { "glyph" : 1058, - "width" : 6144, + "width" : 14336, "log-cluster" : 0 } ] @@ -267,7 +267,7 @@ "glyphs" : [ { "glyph" : 268435488, - "width" : 15360, + "width" : 7168, "is-cluster-start" : true, "log-cluster" : 0 } |