mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 14:55:08 +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
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()));
|
painter.fill_rect(event.rect(), palette().color(background_role()));
|
||||||
}
|
}
|
||||||
paint_event(event);
|
paint_event(event);
|
||||||
|
auto children_clip_rect = this->children_clip_rect();
|
||||||
for_each_child_widget([&](auto& child) {
|
for_each_child_widget([&](auto& child) {
|
||||||
if (!child.is_visible())
|
if (!child.is_visible())
|
||||||
return IterationDecision::Continue;
|
return IterationDecision::Continue;
|
||||||
if (child.relative_rect().intersects(event.rect())) {
|
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);
|
child.dispatch_event(local_event, this);
|
||||||
}
|
}
|
||||||
return IterationDecision::Continue;
|
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);
|
Application::the()->show_tooltip(m_tooltip, screen_relative_rect().center().translated(0, height() / 2), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Gfx::IntRect Widget::children_clip_rect() const
|
||||||
|
{
|
||||||
|
return rect();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,6 +274,8 @@ public:
|
||||||
void set_accepts_emoji_input(bool b) { m_accepts_emoji_input = b; }
|
void set_accepts_emoji_input(bool b) { m_accepts_emoji_input = b; }
|
||||||
bool accepts_emoji_input() const { return m_accepts_emoji_input; }
|
bool accepts_emoji_input() const { return m_accepts_emoji_input; }
|
||||||
|
|
||||||
|
virtual Gfx::IntRect children_clip_rect() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Widget();
|
Widget();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue