diff --git a/Libraries/LibGUI/Widget.cpp b/Libraries/LibGUI/Widget.cpp index 2719acd92d..52ae9e82e5 100644 --- a/Libraries/LibGUI/Widget.cpp +++ b/Libraries/LibGUI/Widget.cpp @@ -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(); +} + } diff --git a/Libraries/LibGUI/Widget.h b/Libraries/LibGUI/Widget.h index 712c7e789d..c158cea697 100644 --- a/Libraries/LibGUI/Widget.h +++ b/Libraries/LibGUI/Widget.h @@ -274,6 +274,8 @@ public: void set_accepts_emoji_input(bool b) { m_accepts_emoji_input = b; } bool accepts_emoji_input() const { return m_accepts_emoji_input; } + virtual Gfx::IntRect children_clip_rect() const; + protected: Widget();