1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:17:44 +00:00

LibGUI: Extract ScrollBar::component_at_position() method

...and use it in mousedown_event(), which allows putting in
stricter asserts.
This commit is contained in:
Nico Weber 2020-08-25 10:31:20 -04:00 committed by Andreas Kling
parent 10c6f062b3
commit bf0b5c3c5a
2 changed files with 26 additions and 14 deletions

View file

@ -278,20 +278,25 @@ void ScrollBar::mousedown_event(MouseEvent& event)
if (!has_scrubber()) if (!has_scrubber())
return; return;
if (decrement_button_rect().contains(event.position())) { Component clicked_component = component_at_position(event.position());
if (clicked_component == Component::DecrementButton) {
set_automatic_scrolling_active(true, AutomaticScrollingKind::DecrementButton); set_automatic_scrolling_active(true, AutomaticScrollingKind::DecrementButton);
update(); update();
return; return;
} }
if (increment_button_rect().contains(event.position())) { if (clicked_component == Component::IncrementButton) {
set_automatic_scrolling_active(true, AutomaticScrollingKind::IncrementButton); set_automatic_scrolling_active(true, AutomaticScrollingKind::IncrementButton);
update(); update();
return; return;
} }
if (event.shift()) if (event.shift()) {
scroll_to_position(event.position()); scroll_to_position(event.position());
if (scrubber_rect().contains(event.position())) { clicked_component = component_at_position(event.position());
ASSERT(clicked_component == Component::Scrubber);
}
if (clicked_component == Component::Scrubber) {
m_scrubber_in_use = true; m_scrubber_in_use = true;
m_scrubbing = true; m_scrubbing = true;
m_scrub_start_value = value(); m_scrub_start_value = value();
@ -301,6 +306,7 @@ void ScrollBar::mousedown_event(MouseEvent& event)
} }
ASSERT(!event.shift()); ASSERT(!event.shift());
ASSERT(clicked_component == Component::Gutter);
// FIXME: If scrolling by page, scroll every second or so while mouse is down. // FIXME: If scrolling by page, scroll every second or so while mouse is down.
scroll_by_page(event.position()); scroll_by_page(event.position());
} }
@ -358,19 +364,23 @@ void ScrollBar::scroll_to_position(const Gfx::IntPoint& click_position)
set_value(m_min + rel_x_or_y * range_size); set_value(m_min + rel_x_or_y * range_size);
} }
ScrollBar::Component ScrollBar::component_at_position(const Gfx::IntPoint& position)
{
if (scrubber_rect().contains(position))
return Component::Scrubber;
if (decrement_button_rect().contains(position))
return Component::DecrementButton;
if (increment_button_rect().contains(position))
return Component::IncrementButton;
if (rect().contains(position))
return Component::Gutter;
return Component::Invalid;
}
void ScrollBar::mousemove_event(MouseEvent& event) void ScrollBar::mousemove_event(MouseEvent& event)
{ {
auto old_hovered_component = m_hovered_component; auto old_hovered_component = m_hovered_component;
if (scrubber_rect().contains(event.position())) m_hovered_component = component_at_position(event.position());
m_hovered_component = Component::Scrubber;
else if (decrement_button_rect().contains(event.position()))
m_hovered_component = Component::DecrementButton;
else if (increment_button_rect().contains(event.position()))
m_hovered_component = Component::IncrementButton;
else if (rect().contains(event.position()))
m_hovered_component = Component::Gutter;
else
m_hovered_component = Component::Invalid;
if (old_hovered_component != m_hovered_component) { if (old_hovered_component != m_hovered_component) {
update(); update();

View file

@ -102,6 +102,8 @@ private:
void scroll_to_position(const Gfx::IntPoint&); void scroll_to_position(const Gfx::IntPoint&);
void scroll_by_page(const Gfx::IntPoint&); void scroll_by_page(const Gfx::IntPoint&);
Component component_at_position(const Gfx::IntPoint&);
int m_min { 0 }; int m_min { 0 };
int m_max { 0 }; int m_max { 0 };
int m_page { 0 }; int m_page { 0 };