1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 08:27:45 +00:00

LibWeb: Clip descendants of boxes with overflow:hidden

This is a very limited implementation of overflow:hidden, but since it's
easy to cover this common scenario, let's do it.
This commit is contained in:
Andreas Kling 2021-10-28 17:08:42 +02:00
parent df3cd2fd56
commit ec49c8fefd
2 changed files with 21 additions and 0 deletions

View file

@ -234,4 +234,22 @@ StackingContext* Box::enclosing_stacking_context()
VERIFY_NOT_REACHED();
}
void Box::before_children_paint(PaintContext& context, PaintPhase phase)
{
NodeWithStyleAndBoxModelMetrics::before_children_paint(context, phase);
// FIXME: Support more overflow variations.
if (computed_values().overflow_x() == CSS::Overflow::Hidden && computed_values().overflow_y() == CSS::Overflow::Hidden) {
context.painter().save();
context.painter().add_clip_rect(enclosing_int_rect(bordered_rect()));
}
}
void Box::after_children_paint(PaintContext& context, PaintPhase phase)
{
NodeWithStyleAndBoxModelMetrics::after_children_paint(context, phase);
// FIXME: Support more overflow variations.
if (computed_values().overflow_x() == CSS::Overflow::Hidden && computed_values().overflow_y() == CSS::Overflow::Hidden)
context.painter().restore();
}
}

View file

@ -150,6 +150,9 @@ public:
void clear_overflow_data() { m_overflow_data = nullptr; }
virtual void before_children_paint(PaintContext&, PaintPhase);
virtual void after_children_paint(PaintContext&, PaintPhase);
protected:
Box(DOM::Document& document, DOM::Node* node, NonnullRefPtr<CSS::StyleProperties> style)
: NodeWithStyleAndBoxModelMetrics(document, node, move(style))