mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
LibWeb: Fix hit testing for text inside stacking context roots
When an element creates a stacking context (e.g. via position: relative with z-index), its text fragments were not being hit tested. This was because PaintableBox::hit_test() returns early when it has a stacking context, and StackingContext::hit_test() only iterated child paintables, not the stacking context root's own fragments. Fix this by extracting fragment hit testing into a new method hit_test_fragments() on PaintableWithLines, and calling it from StackingContext::hit_test() when the stacking context root is a PaintableWithLines.
This commit is contained in:
committed by
Alexander Kalenik
parent
afdde488c3
commit
d91c646788
Notes:
github-actions[bot]
2026-02-06 11:07:59 +00:00
Author: https://github.com/awesomekling Commit: https://github.com/LadybirdBrowser/ladybird/commit/d91c6467881 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/7613 Reviewed-by: https://github.com/kalenikaliaksandr ✅
@@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
body {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
font-size: 100px;
|
||||
}
|
||||
</style>
|
||||
<body>LMAO</body>
|
||||
<script src="../include.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
// Hit test in the middle of the text
|
||||
const result = internals.hitTest(100, 50);
|
||||
if (result) {
|
||||
println(`node: ${result.node.nodeName}`);
|
||||
println(`text: ${result.node.textContent}`);
|
||||
println(`indexInNode: ${result.indexInNode}`);
|
||||
} else {
|
||||
println("FAIL: no hit test result");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user