mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:52:45 +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
	
	 Nico Weber
						Nico Weber