From cbcc3c8866a68c54273d0dc87bfd7534aae957e5 Mon Sep 17 00:00:00 2001 From: Sebastian Mohr Date: Fri, 2 Feb 2024 16:55:10 +0100 Subject: [PATCH 1/2] Added HANGING, IDEOGRAPHIC and TOP textBaseline to adjustments see #2343 --- src/CanvasRenderingContext2d.cc | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index 56e68d899..d33282beb 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -2479,20 +2479,34 @@ inline double getBaselineAdjustment(PangoLayout* layout, short baseline) { PangoRectangle logical_rect; pango_layout_line_get_extents(pango_layout_get_line(layout, 0), NULL, &logical_rect); - double scale = 1.0 / PANGO_SCALE; - double ascent = scale * pango_layout_get_baseline(layout); - double descent = scale * logical_rect.height - ascent; + double ascent = pango_layout_get_baseline(layout); + double descent = logical_rect.height - ascent; + + double adjustment; switch (baseline) { case TEXT_BASELINE_ALPHABETIC: - return ascent; + adjustment = ascent; + break; case TEXT_BASELINE_MIDDLE: - return (ascent + descent) / 2.0; + adjustment = logical_rect.height / 2.0 + (logical_rect.height - ascent) / 2.0; + break; case TEXT_BASELINE_BOTTOM: - return ascent + descent; + adjustment = ascent + descent; + break; + case TEXT_BASELINE_TOP: + adjustment = descent; + break; + case TEXT_BASELINE_HANGING: + adjustment = 1.5 * descent; + break; + case TEXT_BASELINE_IDEOGRAPHIC: + adjustment = (ascent + logical_rect.height) / 2.0; + break; default: return 0; } + return 1.0 / PANGO_SCALE * adjustment; } /* From b7c900327aa27da4ba0fe57f028571852f9335c2 Mon Sep 17 00:00:00 2001 From: Sebastian Mohr Date: Sat, 11 May 2024 20:46:12 +0200 Subject: [PATCH 2/2] Added fix to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73ad0b00b..e1620230d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ project adheres to [Semantic Versioning](http://semver.org/). ### Changed ### Added ### Fixed +* TextBaseline `top`, `middle` and `hanging` did not align with javascript canvas api 3.0.0 ==================