LibWeb: Make hit-testing work with display: inline-block;
When hit testing encountered a block with inline children, we assumed that the inline children are nothing but text boxes. An inline-block box is actually a block child of a block with inline children, so we have to handle that scenario as well. :^) Fixes #2353.
This commit is contained in:
parent
a01fd7ecc5
commit
634ce37663
Notes:
sideshowbarker
2024-07-19 06:12:09 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/634ce37663e
3 changed files with 18 additions and 0 deletions
15
Base/home/anon/www/inline-block-link.html
Normal file
15
Base/home/anon/www/inline-block-link.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
<html>
|
||||
<head>
|
||||
<style>
|
||||
p {
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Here is some test text.
|
||||
Here is a <a href="http://example.com">test link</a>.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -28,6 +28,7 @@ span#ua {
|
|||
<p>Your user agent is: <b><span id="ua"></span></b></p>
|
||||
<p>Some small test pages:</p>
|
||||
<ul>
|
||||
<li><a href="inline-block-link.html">link inside display: inline-block</a></li>
|
||||
<li><a href="set-interval.html">setInterval() test</a></li>
|
||||
<li><a href="html-escape-test.html">html character escape test</a></li>
|
||||
<li><a href="location.html">window.location property</a></li>
|
||||
|
|
|
@ -391,6 +391,8 @@ HitTestResult LayoutBlock::hit_test(const Gfx::Point& position) const
|
|||
for (auto& line_box : m_line_boxes) {
|
||||
for (auto& fragment : line_box.fragments()) {
|
||||
if (enclosing_int_rect(fragment.rect()).contains(position)) {
|
||||
if (fragment.layout_node().is_block())
|
||||
return to<LayoutBlock>(fragment.layout_node()).hit_test(position);
|
||||
return { fragment.layout_node(), fragment.text_index_at(position.x()) };
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue