1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:07:34 +00:00

LibWeb: Paint positioned elements after non-positioned ones

Within the same stacking context, positioned elements must be painted
after non-positioned ones.

I added a Layout::Node::for_each_child_in_paint_order() to help with
this since it's also needed for hit testing.
This commit is contained in:
Andreas Kling 2020-12-06 19:59:28 +01:00
parent 85a1bd6803
commit c953e5d98a
3 changed files with 20 additions and 11 deletions

View file

@ -177,6 +177,23 @@ public:
SelectionState selection_state() const { return m_selection_state; }
void set_selection_state(SelectionState state) { m_selection_state = state; }
template<typename Callback>
void for_each_child_in_paint_order(Callback callback) const
{
for_each_child([&](auto& child) {
if (is<Box>(child) && downcast<Box>(child).stacking_context())
return;
if (!child.is_positioned())
callback(child);
});
for_each_child([&](auto& child) {
if (is<Box>(child) && downcast<Box>(child).stacking_context())
return;
if (child.is_positioned())
callback(child);
});
}
protected:
Node(DOM::Document&, DOM::Node*);