From da564e86cf15b9692fa4dc3f2cae445de750a870 Mon Sep 17 00:00:00 2001 From: Kamil Chojnowski Date: Mon, 1 Jul 2019 17:36:25 +0200 Subject: [PATCH] Improve mouse move event propagation --- src/framework/ui/uimanager.cpp | 6 ++++++ src/framework/ui/uiwidget.cpp | 13 ++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/framework/ui/uimanager.cpp b/src/framework/ui/uimanager.cpp index bc0575be..6b1d57eb 100644 --- a/src/framework/ui/uimanager.cpp +++ b/src/framework/ui/uimanager.cpp @@ -142,6 +142,12 @@ void UIManager::inputEvent(const InputEvent& event) break; } + if(m_pressedWidget) { + if(m_pressedWidget->onMouseMove(event.mousePos, event.mouseMoved)) { + break; + } + } + m_mouseReceiver->propagateOnMouseMove(event.mousePos, event.mouseMoved, widgetList); for(const UIWidgetPtr& widget : widgetList) { if(widget->onMouseMove(event.mousePos, event.mouseMoved)) diff --git a/src/framework/ui/uiwidget.cpp b/src/framework/ui/uiwidget.cpp index 10891e82..15d16ead 100644 --- a/src/framework/ui/uiwidget.cpp +++ b/src/framework/ui/uiwidget.cpp @@ -1712,12 +1712,15 @@ bool UIWidget::propagateOnMouseEvent(const Point& mousePos, UIWidgetList& widget bool UIWidget::propagateOnMouseMove(const Point& mousePos, const Point& mouseMoved, UIWidgetList& widgetList) { - for(auto it = m_children.begin(); it != m_children.end(); ++it) { - const UIWidgetPtr& child = *it; - if(child->isExplicitlyVisible() && child->isExplicitlyEnabled()) - child->propagateOnMouseMove(mousePos, mouseMoved, widgetList); + if(containsPaddingPoint(mousePos)) { + for(auto it = m_children.begin(); it != m_children.end(); ++it) { + const UIWidgetPtr& child = *it; + if(child->isExplicitlyVisible() && child->isExplicitlyEnabled() && child->containsPoint(mousePos)) + child->propagateOnMouseMove(mousePos, mouseMoved, widgetList); + + widgetList.push_back(static_self_cast()); + } } - widgetList.push_back(static_self_cast()); return true; }