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:
parent
10c6f062b3
commit
bf0b5c3c5a
2 changed files with 26 additions and 14 deletions
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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 };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue