[pango/more-space-tweaks: 1/2] shape: More tweaks to space handling
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/more-space-tweaks: 1/2] shape: More tweaks to space handling
- Date: Sat, 18 Dec 2021 00:13:40 +0000 (UTC)
commit fba7e54e1a7f250ce9bb939ad96b8b72d112f8a1
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Dec 17 18:06:31 2021 -0500
shape: More tweaks to space handling
It is a difficult dance between HarfBuzz and pango
which glyphs we let hb synthesize, and which ones
we need to fake ourselves.
HarfBuzz knows how to create other spaces from 0x20,
so if the font is lacking spaces, we want to tell
HarfBuzz that we don't have that glyph *except* for
0x20 where we need to fake one, and provide HarfBuzz
with a suitable width.
pango/shape.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
---
diff --git a/pango/shape.c b/pango/shape.c
index 90334cc1..30bceb80 100644
--- a/pango/shape.c
+++ b/pango/shape.c
@@ -137,12 +137,24 @@ pango_hb_font_get_nominal_glyph (hb_font_t *font,
if (hb_font_get_nominal_glyph (context->parent, unicode, glyph))
return TRUE;
- /* HarfBuzz knows how to synthesize spaces, so never replace them
- * with unknown glyphs, but we do need to tell HarfBuzz that the
- * font does not have a glyph.
+ /* HarfBuzz knows how to synthesize other spaces from 0x20, so never
+ * replace them with unknown glyphs, just tell HarfBuzz that we don't
+ * have a glyph.
+ *
+ * For 0x20, on the other hand, we need to pretend that we have a glyph
+ * and rely on our glyph extents code to provide a reasonable width for
+ * PANGO_GET_UNKNOWN_WIDTH (0x20).
*/
if (g_unichar_type (unicode) == G_UNICODE_SPACE_SEPARATOR)
- return FALSE;
+ {
+ if (unicode == 0x20)
+ {
+ *glyph = PANGO_GET_UNKNOWN_GLYPH (0x20);
+ return TRUE;
+ }
+
+ return FALSE;
+ }
*glyph = PANGO_GET_UNKNOWN_GLYPH (unicode);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]