diff --git a/Tests/LibWeb/Text/expected/hit_testing/nested-inline-paintables.txt b/Tests/LibWeb/Text/expected/hit_testing/nested-inline-paintables.txt new file mode 100644 index 0000000000..dc14cd8a0f --- /dev/null +++ b/Tests/LibWeb/Text/expected/hit_testing/nested-inline-paintables.txt @@ -0,0 +1,2 @@ + lang "en" + diff --git a/Tests/LibWeb/Text/input/hit_testing/nested-inline-paintables.html b/Tests/LibWeb/Text/input/hit_testing/nested-inline-paintables.html new file mode 100644 index 0000000000..1b52896840 --- /dev/null +++ b/Tests/LibWeb/Text/input/hit_testing/nested-inline-paintables.html @@ -0,0 +1,15 @@ + + + + + lang + "en" + + + + diff --git a/Tests/LibWeb/Text/input/include.js b/Tests/LibWeb/Text/input/include.js index ee1e976412..1b786ed53f 100644 --- a/Tests/LibWeb/Text/input/include.js +++ b/Tests/LibWeb/Text/input/include.js @@ -17,6 +17,13 @@ function println(s) { __outputElement.appendChild(document.createTextNode(s + "\n")); } +function printElement(e) { + let element_string = `<${e.nodeName} `; + if (e.id) element_string += `id="${e.id}" `; + element_string += ">"; + println(element_string); +} + document.addEventListener("DOMContentLoaded", function () { __outputElement = document.createElement("pre"); __outputElement.setAttribute("id", "out"); diff --git a/Userland/Libraries/LibWeb/Painting/InlinePaintable.cpp b/Userland/Libraries/LibWeb/Painting/InlinePaintable.cpp index 83bf2ce821..0b05535493 100644 --- a/Userland/Libraries/LibWeb/Painting/InlinePaintable.cpp +++ b/Userland/Libraries/LibWeb/Painting/InlinePaintable.cpp @@ -173,7 +173,19 @@ Optional InlinePaintable::hit_test(CSSPixelPoint position, HitTes fragment.text_index_at(position.x()) }; } } - return {}; + + Optional hit_test_result; + for_each_child([&](Paintable const& child) { + if (child.stacking_context()) + return IterationDecision::Continue; + if (auto result = child.hit_test(position, type); result.has_value()) { + hit_test_result = result; + return IterationDecision::Break; + } + return IterationDecision::Continue; + }); + + return hit_test_result; } CSSPixelRect InlinePaintable::bounding_rect() const