1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:48:11 +00:00

LibGUI: Set correct ranges for hidable scrollbars

Fixes vertical and horizontal overscroll in widgets that allow
unnecessary scrollbars to be hidden.
This commit is contained in:
thankyouverycool 2021-02-16 08:58:01 -05:00 committed by Andreas Kling
parent f24287e0e1
commit 01e00bac9d

View file

@ -111,19 +111,26 @@ void ScrollableWidget::update_scrollbar_ranges()
auto available_size = this->available_size();
int excess_height = max(0, m_content_size.height() - available_size.height());
m_vertical_scrollbar->set_range(0, excess_height);
m_vertical_scrollbar->set_page_step(available_size.height());
if (should_hide_unnecessary_scrollbars())
m_vertical_scrollbar->set_visible(excess_height > 0);
int excess_width = max(0, m_content_size.width() - available_size.width());
m_horizontal_scrollbar->set_range(0, excess_width);
m_horizontal_scrollbar->set_page_step(available_size.width());
if (should_hide_unnecessary_scrollbars())
auto vertical_initial_visibility = m_vertical_scrollbar->is_visible();
auto horizontal_initial_visibility = m_horizontal_scrollbar->is_visible();
if (should_hide_unnecessary_scrollbars()) {
m_vertical_scrollbar->set_visible(excess_height > 0);
m_horizontal_scrollbar->set_visible(excess_width > 0);
}
if (m_vertical_scrollbar->is_visible() != vertical_initial_visibility || m_horizontal_scrollbar->is_visible() != horizontal_initial_visibility) {
available_size = this->available_size();
excess_height = max(0, m_content_size.height() - available_size.height());
excess_width = max(0, m_content_size.width() - available_size.width());
}
m_horizontal_scrollbar->set_range(0, excess_width);
m_horizontal_scrollbar->set_page_step(visible_content_rect().width() - m_horizontal_scrollbar->step());
m_vertical_scrollbar->set_range(0, excess_height);
m_vertical_scrollbar->set_page_step(visible_content_rect().height() - m_vertical_scrollbar->step());
}