diff options
author | Andreas Kling <kling@serenityos.org> | 2020-08-25 21:24:45 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-08-26 00:51:35 +0200 |
commit | a265d40d6e2300cb008f73c627ed43fda1fa17eb (patch) | |
tree | 6154ce89ca82b5e14220a404fefc90a6e9f0e66c /Libraries/LibGUI | |
parent | 965ccf5242452dd2ffe296522a789463744ed9da (diff) | |
download | serenity-a265d40d6e2300cb008f73c627ed43fda1fa17eb.zip |
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().
Diffstat (limited to 'Libraries/LibGUI')
-rw-r--r-- | Libraries/LibGUI/Widget.cpp | 8 | ||||
-rw-r--r-- | Libraries/LibGUI/Widget.h | 2 |
2 files changed, 9 insertions, 1 deletions
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(); |