mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 01:07:36 +00:00
WindowServer: Simplify WSMenu MouseWheel event
A mouse move event needs to do a bit more work than what a mouse wheel event does. Mouse wheel just needs to update the hovered item, and update for a new hovered item. This also stops us from calling redraw() twice on a wheel event.
This commit is contained in:
parent
3e05c83591
commit
68d5b39942
2 changed files with 12 additions and 11 deletions
|
@ -300,11 +300,9 @@ void WSMenu::decend_into_submenu_at_hovered_item()
|
|||
m_in_submenu = true;
|
||||
}
|
||||
|
||||
void WSMenu::handle_hover_event(const WSMouseEvent& event)
|
||||
void WSMenu::handle_mouse_move_event(const WSMouseEvent& mouse_event)
|
||||
{
|
||||
ASSERT(menu_window());
|
||||
auto mouse_event = static_cast<const WSMouseEvent&>(event);
|
||||
|
||||
if (hovered_item() && hovered_item()->is_submenu()) {
|
||||
|
||||
auto item = *hovered_item();
|
||||
|
@ -333,7 +331,7 @@ void WSMenu::handle_hover_event(const WSMouseEvent& event)
|
|||
void WSMenu::event(CEvent& event)
|
||||
{
|
||||
if (event.type() == WSEvent::MouseMove) {
|
||||
handle_hover_event(static_cast<const WSMouseEvent&>(event));
|
||||
handle_mouse_move_event(static_cast<const WSMouseEvent&>(event));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -343,14 +341,17 @@ void WSMenu::event(CEvent& event)
|
|||
}
|
||||
|
||||
if (event.type() == WSEvent::MouseWheel && is_scrollable()) {
|
||||
ASSERT(menu_window());
|
||||
auto& mouse_event = static_cast<const WSMouseEvent&>(event);
|
||||
m_scroll_offset += mouse_event.wheel_delta();
|
||||
if (m_scroll_offset < 0)
|
||||
m_scroll_offset = 0;
|
||||
if (m_scroll_offset >= m_max_scroll_offset)
|
||||
m_scroll_offset = m_max_scroll_offset;
|
||||
handle_hover_event(mouse_event);
|
||||
redraw();
|
||||
m_scroll_offset = clamp(m_scroll_offset, 0, m_max_scroll_offset);
|
||||
|
||||
int index = item_index_at(mouse_event.position());
|
||||
if (m_hovered_item_index == index)
|
||||
return;
|
||||
|
||||
m_hovered_item_index = index;
|
||||
update_for_new_hovered_item();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ public:
|
|||
private:
|
||||
virtual void event(CEvent&) override;
|
||||
|
||||
void handle_hover_event(const WSMouseEvent&);
|
||||
void handle_mouse_move_event(const WSMouseEvent&);
|
||||
int visible_item_count() const;
|
||||
|
||||
int item_index_at(const Point&);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue