mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 13:17:44 +00:00
LibWeb: Remove is<BlockContainer> check for fragments in hit testing
This change introduces a method for direct access to the paintable of a PaintableFragment. This method is intended to replace the usage of the layout node pointer. Currently, we are only eliminating the use of `layout_node()` in hit testing. Additionally, we no longer check if a fragment's layout node is a `BlockContainer` before recursing into its children during hit testing. This check was likely relevant when all fragments were owned by `PaintableWithLines`, but now it should be safe to remove this check.
This commit is contained in:
parent
09124fc3a5
commit
270bbf43ab
3 changed files with 13 additions and 12 deletions
|
@ -163,13 +163,13 @@ void InlinePaintable::for_each_fragment(Callback callback) const
|
|||
Optional<HitTestResult> InlinePaintable::hit_test(CSSPixelPoint position, HitTestType type) const
|
||||
{
|
||||
for (auto& fragment : m_fragments) {
|
||||
if (is<Layout::Box>(fragment.layout_node()) && static_cast<Layout::Box const&>(fragment.layout_node()).paintable_box()->stacking_context())
|
||||
if (fragment.paintable().stacking_context())
|
||||
continue;
|
||||
auto fragment_absolute_rect = fragment.absolute_rect();
|
||||
if (fragment_absolute_rect.contains(position)) {
|
||||
if (is<Layout::BlockContainer>(fragment.layout_node()) && fragment.layout_node().paintable())
|
||||
return fragment.layout_node().paintable()->hit_test(position, type);
|
||||
return HitTestResult { const_cast<Paintable&>(const_cast<Paintable&>(*fragment.layout_node().paintable())),
|
||||
if (auto result = fragment.paintable().hit_test(position, type); result.has_value())
|
||||
return result;
|
||||
return HitTestResult { const_cast<Paintable&>(fragment.paintable()),
|
||||
fragment.text_index_at(position.x()) };
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue