summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFujii Hironori <Hironori.Fujii@sony.com>2023-02-17 09:33:02 +0900
committerFujii Hironori <Hironori.Fujii@sony.com>2023-02-20 14:16:30 +0900
commit5ae029c2ccc92cb72bb4b23510dc819a0c364a33 (patch)
treeef03672d786836d7cecf8c07aa5800b0444745dc
parent83db2efe0a6109ac4fcc9fd561f8b65c52b65fb6 (diff)
downloadcairo-5ae029c2ccc92cb72bb4b23510dc819a0c364a33.tar.gz
DWrite: Inflate glyph bounds 1px vertically too
The most top and bottom lines of glyphs were clipped in some fonts and conditions. The glyph bounds were inflated 1px horizontally. It should inflate vertically too. Fixes cairo/cairo#569
-rw-r--r--src/win32/cairo-dwrite-font.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/win32/cairo-dwrite-font.cpp b/src/win32/cairo-dwrite-font.cpp
index 438bfb15d..33c976e08 100644
--- a/src/win32/cairo-dwrite-font.cpp
+++ b/src/win32/cairo-dwrite-font.cpp
@@ -716,10 +716,15 @@ _cairo_dwrite_scaled_font_init_glyph_metrics(cairo_dwrite_scaled_font_t *scaled_
// We pad the extents here because GetDesignGlyphMetrics returns "ideal" metrics
// for the glyph outline, without accounting for hinting/gridfitting/antialiasing,
// and therefore it does not always cover all pixels that will actually be touched.
- if (scaled_font->base.options.antialias != CAIRO_ANTIALIAS_NONE &&
- extents.width > 0 && extents.height > 0) {
- extents.width += scaled_font->mat_inverse.xx * 2;
- extents.x_bearing -= scaled_font->mat_inverse.xx;
+ if (extents.width > 0 && extents.height > 0) {
+ double x = 1, y = 1;
+ cairo_matrix_transform_distance (&scaled_font->mat_inverse, &x, &y);
+ x = fabs(x);
+ y = fabs(y);
+ extents.width += x * 2;
+ extents.x_bearing -= x;
+ extents.height += y * 2;
+ extents.y_bearing -= y;
}
_cairo_scaled_glyph_set_metrics (scaled_glyph,