[pango/better-space-size] Use a better size for missing space
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/better-space-size] Use a better size for missing space
- Date: Wed, 22 Dec 2021 02:06:29 +0000 (UTC)
commit 9fe2853692bb64ded58a507d87508dc8536cd386
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Dec 21 07:51:41 2021 -0500
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
pango/pangocairo-font.c | 43 ++++---------------------------------------
tests/layouts/no-space.layout | 10 +++++-----
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
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]