mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:48:10 +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:
parent
85a1bd6803
commit
c953e5d98a
3 changed files with 20 additions and 11 deletions
|
@ -93,9 +93,7 @@ void Node::paint(PaintContext& context, PaintPhase phase)
|
|||
|
||||
before_children_paint(context, phase);
|
||||
|
||||
for_each_child([&](auto& child) {
|
||||
if (child.is_box() && downcast<Box>(child).stacking_context())
|
||||
return;
|
||||
for_each_child_in_paint_order([&](auto& child) {
|
||||
child.paint(context, phase);
|
||||
});
|
||||
|
||||
|
@ -105,11 +103,7 @@ void Node::paint(PaintContext& context, PaintPhase phase)
|
|||
HitTestResult Node::hit_test(const Gfx::IntPoint& position, HitTestType type) const
|
||||
{
|
||||
HitTestResult result;
|
||||
for_each_child([&](auto& child) {
|
||||
// Skip over children that establish their own stacking context.
|
||||
// The outer loop who called us will take care of those.
|
||||
if (is<Box>(child) && downcast<Box>(child).stacking_context())
|
||||
return;
|
||||
for_each_child_in_paint_order([&](auto& child) {
|
||||
auto child_result = child.hit_test(position, type);
|
||||
if (child_result.layout_node)
|
||||
result = child_result;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue