Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e1b0c991f15929b735801f04b579638cf2c6ed96
https://github.com/WebKit/WebKit/commit/e1b0c991f15929b735801f04b579638cf2c6ed96
Author: Alan Baradlay <[email protected]>
Date: 2026-01-07 (Wed, 07 Jan 2026)
Changed paths:
M
LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg-text-expected.txt
A LayoutTests/svg/hittest/text-overlapped-expected.txt
A LayoutTests/svg/hittest/text-overlapped.html
M Source/WebCore/layout/integration/inline/InlineIteratorBox.cpp
M Source/WebCore/layout/integration/inline/InlineIteratorBox.h
M Source/WebCore/layout/integration/inline/InlineIteratorBoxLegacyPath.h
M Source/WebCore/layout/integration/inline/InlineIteratorBoxModernPath.h
M Source/WebCore/layout/integration/inline/InlineIteratorLineBox.cpp
M Source/WebCore/layout/integration/inline/InlineIteratorSVGTextBox.cpp
M Source/WebCore/layout/integration/inline/InlineIteratorSVGTextBox.h
M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp
M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.h
M Source/WebCore/rendering/svg/RenderSVGText.cpp
Log Message:
-----------
Reverse traversal order in `hitTestInlineBoxes` for SVG Text
https://bugs.webkit.org/show_bug.cgi?id=304805
Reviewed by Antti Koivisto.
(Test case, implementation logic and commit message credits go to Ahmad Saleem)
This patch aligns WebKit with Gecko / Firefox and Blink / Chromium.
Inspired by (Test - Merge):
https://chromium.googlesource.com/chromium/src.git/+/9bb752c62627ce6584b6834d4f9e3ad0ed303a78
Text painted later should make the top-most node, so line boxes should
be visited front-to-back. This will generally only make a difference for
text nodes that overlap.
This will also make a difference when elementsFromPoint is fixed, since
then we'll add the hit elements in the required "innermost to outermost"
order.
Test: svg/hittest/text-overlapped.html
*
LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg-text-expected.txt:
* LayoutTests/svg/hittest/text-overlapped-expected.txt: Added.
* LayoutTests/svg/hittest/text-overlapped.html: Added.
* Source/WebCore/layout/integration/inline/InlineIteratorBox.cpp: Implement
bidirectional traversal for BoxIterator to support hittest use case.
(WebCore::InlineIterator::BoxIterator::traverseLineLeftwardOnLine):
* Source/WebCore/layout/integration/inline/InlineIteratorBox.h:
(WebCore::InlineIterator::BoxIterator::operator--):
* Source/WebCore/layout/integration/inline/InlineIteratorBoxLegacyPath.h:
(WebCore::InlineIterator::BoxLegacyPath::traversePreviousBoxOnLine):
(WebCore::InlineIterator::BoxLegacyPath::traversePreviousBoxOnLineSkippingChildren):
* Source/WebCore/layout/integration/inline/InlineIteratorBoxModernPath.h:
(WebCore::InlineIterator::BoxModernPath::traversePreviousBoxOnLine):
* Source/WebCore/layout/integration/inline/InlineIteratorLineBox.cpp:
* Source/WebCore/layout/integration/inline/InlineIteratorSVGTextBox.cpp:
(WebCore::InlineIterator::lastBoxFor):
* Source/WebCore/layout/integration/inline/InlineIteratorSVGTextBox.h:
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::firstRootInlineBox const):
(WebCore::LayoutIntegration::LineLayout::lastRootInlineBox const):
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.h:
* Source/WebCore/rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::hitTestInlineChildren):
Canonical link: https://commits.webkit.org/305221@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications