summaryrefslogtreecommitdiff
path: root/src/cairo-quartz-font.c
diff options
context:
space:
mode:
authorJohn Ralls <jralls@ceridwen.us>2022-04-23 14:36:15 -0700
committerJohn Ralls <jralls@ceridwen.us>2022-04-25 11:30:10 -0700
commit2784159d0e57b409477cfcb25ddcce3227379a6f (patch)
treeefb9f27951255999935a61cc3266f03e89caa004 /src/cairo-quartz-font.c
parentc755e48c2e5da7f10956de1c3560180510e84d1f (diff)
downloadcairo-2784159d0e57b409477cfcb25ddcce3227379a6f.tar.gz
[quartz] Adjust x_extents metric.
CoreText uses different advances depending on the font size, with very small point sizes sometimes getting advances that are smaller than the glyph's width. This is manifested in the Apple Color Emoji font with the Emoji glyphs having a width of 1.25 and an advance width of 1.0. That results in overlapping emoji when they're in a string. The small spacing difference also affects 3 tests so updated reference images are included in this commit. # Please enter the commit message for your changes. Lines starting
Diffstat (limited to 'src/cairo-quartz-font.c')
-rw-r--r--src/cairo-quartz-font.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/cairo-quartz-font.c b/src/cairo-quartz-font.c
index 000a0e237..641a2dfc7 100644
--- a/src/cairo-quartz-font.c
+++ b/src/cairo-quartz-font.c
@@ -412,7 +412,12 @@ _cairo_quartz_init_glyph_metrics (cairo_quartz_scaled_font_t *font,
extents.y_bearing = - ymax;
extents.width = xmax - xmin;
extents.height = ymax - ymin;
- extents.x_advance = advance.width;
+/* At the necessary 1.0pt ctFont size some glyphs get a reduced
+ * advance that causes overlaps when scaled up. We can avoid that by
+ * using the width instead if it's wider. Since cairo doesn't support
+ * vertical font layout we don't do the same for y_advance.
+ */
+ extents.x_advance = MAX(extents.width, advance.width);
extents.y_advance = advance.height;
#ifdef DEBUG