mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-28 07:18:51 +00:00
LibGUI: Allow widgets to clip their child widgets
This patch adds Widget::children_clip_rect() which can be overridden to tighten clipping of a widget's children. The default implementation simply returns Widget::rect().
This commit is contained in:
parent
965ccf5242
commit
a265d40d6e
Notes:
sideshowbarker
2024-07-19 03:09:32 +09:00
Author: https://github.com/awesomekling
Commit: a265d40d6e
2 changed files with 9 additions and 1 deletions
|
@ -229,11 +229,12 @@ void Widget::handle_paint_event(PaintEvent& event)
|
|||
painter.fill_rect(event.rect(), palette().color(background_role()));
|
||||
}
|
||||
paint_event(event);
|
||||
auto children_clip_rect = this->children_clip_rect();
|
||||
for_each_child_widget([&](auto& child) {
|
||||
if (!child.is_visible())
|
||||
return IterationDecision::Continue;
|
||||
if (child.relative_rect().intersects(event.rect())) {
|
||||
PaintEvent local_event(event.rect().intersected(child.relative_rect()).translated(-child.relative_position()));
|
||||
PaintEvent local_event(event.rect().intersected(children_clip_rect).intersected(child.relative_rect()).translated(-child.relative_position()));
|
||||
child.dispatch_event(local_event, this);
|
||||
}
|
||||
return IterationDecision::Continue;
|
||||
|
@ -872,4 +873,9 @@ void Widget::show_tooltip()
|
|||
Application::the()->show_tooltip(m_tooltip, screen_relative_rect().center().translated(0, height() / 2), this);
|
||||
}
|
||||
|
||||
Gfx::IntRect Widget::children_clip_rect() const
|
||||
{
|
||||
return rect();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue