From 3049d779793cd1abdbd028a63f636e037c6cbaec Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Wed, 27 May 2026 03:58:29 +0100 Subject: [PATCH] LibWeb: Use advance width for canvas text alignment Previously, `text_path() used the glyph outline bounding box width to compute text alignment offsets and maxWidth scaling. The bounding box only covers visible glyph outlines, excluding the advance of spaces and glyph side bearings. This caused text with `textAlign` "end", "right", or "center" to be mispositioned. We now use the sum of glyph run advance widths instead. --- .../LibWeb/HTML/CanvasRenderingContext2D.cpp | 4 +- .../Screenshot/expected/canvas-text.png | Bin 28760 -> 28861 bytes .../text/2d.text.draw.align.center.txt | 6 +++ .../text/2d.text.draw.align.end.ltr.txt | 6 +++ .../element/text/2d.text.draw.align.right.txt | 6 +++ .../text/2d.text.draw.fill.maxWidth.bound.txt | 6 +++ .../text/2d.text.draw.space.collapse.end.txt | 6 +++ .../text/2d.text.draw.align.center.html | 48 ++++++++++++++++++ .../text/2d.text.draw.align.end.ltr.html | 48 ++++++++++++++++++ .../text/2d.text.draw.align.right.html | 48 ++++++++++++++++++ .../2d.text.draw.fill.maxWidth.bound.html | 45 ++++++++++++++++ .../text/2d.text.draw.space.collapse.end.html | 44 ++++++++++++++++ 12 files changed, 265 insertions(+), 2 deletions(-) create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.center.txt create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.txt create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.right.txt create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.txt create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.txt create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.center.html create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.html create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.right.html create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.html create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.html diff --git a/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp index e266e0b81a..1e50fb5727 100644 --- a/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp +++ b/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp @@ -311,11 +311,11 @@ Gfx::Path CanvasRenderingContext2D::text_path(Utf16String const& text, float x, auto glyph_runs = Gfx::shape_text({ x, y }, text.utf16_view(), *font_cascade_list, resolved_letter_spacing(drawing_state, canvas_element())); Gfx::Path path; + float text_width = 0; for (auto const& glyph_run : glyph_runs) { path.glyph_run(glyph_run); + text_width += glyph_run->width(); } - - auto text_width = path.bounding_box().width(); Gfx::AffineTransform transform = {}; // https://html.spec.whatwg.org/multipage/canvas.html#text-preparation-algorithm: diff --git a/Tests/LibWeb/Screenshot/expected/canvas-text.png b/Tests/LibWeb/Screenshot/expected/canvas-text.png index 8ecdfb383dd3591741cf02d309e4cd856765474b..c9056042af16f3c0e0bc396ed2b87ce071dbdfae 100644 GIT binary patch literal 28861 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­Og^h1}I*Ae1_Pb3-GuwRvA4H6K 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 O5?oSLznG_h@%t~3n9oQ6 literal 28760 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 diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.center.txt b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.center.txt new file mode 100644 index 0000000000..71a7f198fe --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.center.txt @@ -0,0 +1,6 @@ +Harness status: OK + +Found 1 tests + +1 Pass +Pass textAlign center is the center of the em squares (not the bounding box) \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.txt b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.txt new file mode 100644 index 0000000000..f6a962bb6e --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.txt @@ -0,0 +1,6 @@ +Harness status: OK + +Found 1 tests + +1 Pass +Pass textAlign end with ltr is the right edge \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.right.txt b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.right.txt new file mode 100644 index 0000000000..da38024c62 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.align.right.txt @@ -0,0 +1,6 @@ +Harness status: OK + +Found 1 tests + +1 Pass +Pass textAlign right is the right of the last em square (not the bounding box) \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.txt b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.txt new file mode 100644 index 0000000000..a97ed69a8c --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.txt @@ -0,0 +1,6 @@ +Harness status: OK + +Found 1 tests + +1 Pass +Pass fillText handles maxWidth based on line size, not bounding box size \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.txt b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.txt new file mode 100644 index 0000000000..e0d65f5391 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.txt @@ -0,0 +1,6 @@ +Harness status: OK + +Found 1 tests + +1 Pass +Pass Space characters at the end of a line are NOT collapsed \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.center.html b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.center.html new file mode 100644 index 0000000000..20ab6b6d59 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.center.html @@ -0,0 +1,48 @@ + + + +Canvas test: 2d.text.draw.align.center + + + + + + + +

2d.text.draw.align.center

+

textAlign center is the center of the em squares (not the bounding box)

+ + +A +

Actual output:

+

FAIL (fallback content)

+

Expected output:

+

    + + diff --git a/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.html b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.html new file mode 100644 index 0000000000..c0cf2acb8e --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.end.ltr.html @@ -0,0 +1,48 @@ + + + +Canvas test: 2d.text.draw.align.end.ltr + + + + + + + +

    2d.text.draw.align.end.ltr

    +

    textAlign end with ltr is the right edge

    + + +A +

    Actual output:

    +

    FAIL (fallback content)

    +

    Expected output:

    +

      + + diff --git a/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.right.html b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.right.html new file mode 100644 index 0000000000..c9a1a46d89 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.align.right.html @@ -0,0 +1,48 @@ + + + +Canvas test: 2d.text.draw.align.right + + + + + + + +

      2d.text.draw.align.right

      +

      textAlign right is the right of the last em square (not the bounding box)

      + + +A +

      Actual output:

      +

      FAIL (fallback content)

      +

      Expected output:

      +

        + + diff --git a/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.html b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.html new file mode 100644 index 0000000000..773ebc2d91 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.fill.maxWidth.bound.html @@ -0,0 +1,45 @@ + + + +Canvas test: 2d.text.draw.fill.maxWidth.bound + + + + + + + +

        2d.text.draw.fill.maxWidth.bound

        +

        fillText handles maxWidth based on line size, not bounding box size

        + + +A +

        Actual output:

        +

        FAIL (fallback content)

        +

        Expected output:

        +

          + + diff --git a/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.html b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.html new file mode 100644 index 0000000000..99d1184b7f --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/canvas/element/text/2d.text.draw.space.collapse.end.html @@ -0,0 +1,44 @@ + + + +Canvas test: 2d.text.draw.space.collapse.end + + + + + + + +

          2d.text.draw.space.collapse.end

          +

          Space characters at the end of a line are NOT collapsed

          + + +A +

          Actual output:

          +

          FAIL (fallback content)

          +

          Expected output:

          +

            + +