From dab7ec190e55a6d0a3e9e2ceb695e4534d2f4011 Mon Sep 17 00:00:00 2001 From: FrHun <28605587+frhun@users.noreply.github.com> Date: Sun, 19 Sep 2021 00:45:42 +0200 Subject: [PATCH] LibGUI: Margins for AbstractScrollableWidget Implement, and use internally, content_margins() from Widget. Since AbstractScrollableWidget already has a method called content_size, the convenience method, with the same name, in Widget has to be explicitly called. --- .../Libraries/LibGUI/AbstractScrollableWidget.cpp | 15 +++++++++++---- .../Libraries/LibGUI/AbstractScrollableWidget.h | 2 ++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibGUI/AbstractScrollableWidget.cpp b/Userland/Libraries/LibGUI/AbstractScrollableWidget.cpp index 5c5203f49e..702079c5e1 100644 --- a/Userland/Libraries/LibGUI/AbstractScrollableWidget.cpp +++ b/Userland/Libraries/LibGUI/AbstractScrollableWidget.cpp @@ -93,8 +93,9 @@ void AbstractScrollableWidget::resize_event(ResizeEvent& event) Gfx::IntSize AbstractScrollableWidget::available_size() const { - unsigned available_width = max(frame_inner_rect().width() - m_size_occupied_by_fixed_elements.width() - width_occupied_by_vertical_scrollbar(), 0); - unsigned available_height = max(frame_inner_rect().height() - m_size_occupied_by_fixed_elements.height() - height_occupied_by_horizontal_scrollbar(), 0); + auto inner_size = Widget::content_size(); + unsigned available_width = max(inner_size.width() - m_size_occupied_by_fixed_elements.width(), 0); + unsigned available_height = max(inner_size.height() - m_size_occupied_by_fixed_elements.height(), 0); return { available_width, available_height }; } @@ -159,13 +160,19 @@ int AbstractScrollableWidget::width_occupied_by_vertical_scrollbar() const return m_vertical_scrollbar->is_visible() ? m_vertical_scrollbar->width() : 0; } +Margins AbstractScrollableWidget::content_margins() const +{ + return Frame::content_margins() + Margins { 0, width_occupied_by_vertical_scrollbar(), height_occupied_by_horizontal_scrollbar(), 0 }; +} + Gfx::IntRect AbstractScrollableWidget::visible_content_rect() const { + auto inner_size = Widget::content_size(); Gfx::IntRect rect { m_horizontal_scrollbar->value(), m_vertical_scrollbar->value(), - min(m_content_size.width(), frame_inner_rect().width() - width_occupied_by_vertical_scrollbar() - m_size_occupied_by_fixed_elements.width()), - min(m_content_size.height(), frame_inner_rect().height() - height_occupied_by_horizontal_scrollbar() - m_size_occupied_by_fixed_elements.height()) + min(m_content_size.width(), inner_size.width() - m_size_occupied_by_fixed_elements.width()), + min(m_content_size.height(), inner_size.height() - m_size_occupied_by_fixed_elements.height()) }; if (rect.is_empty()) return {}; diff --git a/Userland/Libraries/LibGUI/AbstractScrollableWidget.h b/Userland/Libraries/LibGUI/AbstractScrollableWidget.h index daea99ee97..01a6647abb 100644 --- a/Userland/Libraries/LibGUI/AbstractScrollableWidget.h +++ b/Userland/Libraries/LibGUI/AbstractScrollableWidget.h @@ -57,6 +57,8 @@ public: int width_occupied_by_vertical_scrollbar() const; int height_occupied_by_horizontal_scrollbar() const; + virtual Margins content_margins() const override; + void set_should_hide_unnecessary_scrollbars(bool b) { m_should_hide_unnecessary_scrollbars = b; } bool should_hide_unnecessary_scrollbars() const { return m_should_hide_unnecessary_scrollbars; }