1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 14:45:07 +00:00

LibGUI: Make scrollbar thumb size relative to content size

In order to calculate a thumb size that is a representation
of the visible portion (page) of the content, that information
needs to be taken into account.
This commit is contained in:
Tom 2020-07-08 22:12:24 -06:00 committed by Andreas Kling
parent 6df87b51f7
commit fc568ea13a
3 changed files with 22 additions and 8 deletions

View file

@ -115,14 +115,17 @@ ScrollBar::~ScrollBar()
{
}
void ScrollBar::set_range(int min, int max)
void ScrollBar::set_range(int min, int max, int page)
{
ASSERT(min <= max);
if (m_min == min && m_max == max)
if (page < 0)
page = 0;
if (m_min == min && m_max == max && m_page == page)
return;
m_min = min;
m_max = max;
m_page = page;
int old_value = m_value;
m_value = clamp(m_value, m_min, m_max);
@ -190,7 +193,14 @@ int ScrollBar::scrubber_size() const
{
int pixel_range = length(orientation()) - button_size() * 2;
int value_range = m_max - m_min;
return ::max(pixel_range - value_range, button_size());
int scrubber_size = 0;
if (value_range > 0) {
// Scrubber size should be proportional to the visible portion
// (page) in relation to the content (value range + page)
scrubber_size = (m_page * pixel_range) / (value_range + m_page);
}
return ::max(scrubber_size, button_size());
}
Gfx::IntRect ScrollBar::scrubber_rect() const