summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-12-21 07:51:41 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-12-21 21:06:09 -0500
commit9fe2853692bb64ded58a507d87508dc8536cd386 (patch)
tree14cf437b74f69c172ecf8bf90e274639391e3e26
parent93cb50d4438d2d60db4c1d0251db556da278e6fd (diff)
downloadpango-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.c43
-rw-r--r--tests/layouts/no-space.layout10
-rw-r--r--tests/layouts/valid-14.layout4
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
}