فهرست منبع

MouseOut event now properly gets sent before MouseOver

Marko Pintera 12 سال پیش
والد
کامیت
ea13813c80
2فایلهای تغییر یافته به همراه18 افزوده شده و 19 حذف شده
  1. 18 18
      BansheeEngine/Source/BsGUIManager.cpp
  2. 0 1
      EditorWindowDock.txt

+ 18 - 18
BansheeEngine/Source/BsGUIManager.cpp

@@ -1103,54 +1103,54 @@ namespace BansheeEngine
 
 
 		// Send MouseOut and MouseOver events
 		// Send MouseOut and MouseOver events
 		bool eventProcessed = false;
 		bool eventProcessed = false;
-		for(auto& elementInfo : mNewElementsUnderCursor)
+		for(auto& elementInfo : mElementsUnderCursor)
 		{
 		{
 			GUIElement* element = elementInfo.element;
 			GUIElement* element = elementInfo.element;
 			GUIWidget* widget = elementInfo.widget;
 			GUIWidget* widget = elementInfo.widget;
 
 
-			auto iterFind = std::find_if(begin(mElementsUnderCursor), end(mElementsUnderCursor), 
+			auto iterFind = std::find_if(mNewElementsUnderCursor.begin(), mNewElementsUnderCursor.end(), 
 				[=] (const ElementInfo& x) { return x.element == element; });
 				[=] (const ElementInfo& x) { return x.element == element; });
 
 
-			if(iterFind == mElementsUnderCursor.end())
+			if(iterFind == mNewElementsUnderCursor.end())
 			{
 			{
 				auto iterFind2 = std::find_if(mActiveElements.begin(), mActiveElements.end(), 
 				auto iterFind2 = std::find_if(mActiveElements.begin(), mActiveElements.end(), 
-					[&](const ElementInfo& x) { return x.element == element; });
+					[=](const ElementInfo& x) { return x.element == element; });
 
 
-				// Send MouseOver event
+				// Send MouseOut event
 				if(mActiveElements.size() == 0 || iterFind2 != mActiveElements.end())
 				if(mActiveElements.size() == 0 || iterFind2 != mActiveElements.end())
 				{
 				{
-					Vector2I localPos;
-					if(widget != nullptr)
-						localPos = getWidgetRelativePos(*widget, cursorScreenPos);
-
-					mMouseEvent = GUIMouseEvent(buttonStates, shift, control, alt);
+					Vector2I curLocalPos = getWidgetRelativePos(*widget, cursorScreenPos);
 
 
-					mMouseEvent.setMouseOverData(localPos);
+					mMouseEvent.setMouseOutData(curLocalPos);
 					if(sendMouseEvent(widget, element, mMouseEvent))
 					if(sendMouseEvent(widget, element, mMouseEvent))
 						eventProcessed = true;
 						eventProcessed = true;
 				}
 				}
 			}
 			}
 		}
 		}
 
 
-		for(auto& elementInfo : mElementsUnderCursor)
+		for(auto& elementInfo : mNewElementsUnderCursor)
 		{
 		{
 			GUIElement* element = elementInfo.element;
 			GUIElement* element = elementInfo.element;
 			GUIWidget* widget = elementInfo.widget;
 			GUIWidget* widget = elementInfo.widget;
 
 
-			auto iterFind = std::find_if(mNewElementsUnderCursor.begin(), mNewElementsUnderCursor.end(), 
+			auto iterFind = std::find_if(begin(mElementsUnderCursor), end(mElementsUnderCursor), 
 				[=] (const ElementInfo& x) { return x.element == element; });
 				[=] (const ElementInfo& x) { return x.element == element; });
 
 
-			if(iterFind == mNewElementsUnderCursor.end())
+			if(iterFind == mElementsUnderCursor.end())
 			{
 			{
 				auto iterFind2 = std::find_if(mActiveElements.begin(), mActiveElements.end(), 
 				auto iterFind2 = std::find_if(mActiveElements.begin(), mActiveElements.end(), 
-					[=](const ElementInfo& x) { return x.element == element; });
+					[&](const ElementInfo& x) { return x.element == element; });
 
 
-				// Send MouseOut event
+				// Send MouseOver event
 				if(mActiveElements.size() == 0 || iterFind2 != mActiveElements.end())
 				if(mActiveElements.size() == 0 || iterFind2 != mActiveElements.end())
 				{
 				{
-					Vector2I curLocalPos = getWidgetRelativePos(*widget, cursorScreenPos);
+					Vector2I localPos;
+					if(widget != nullptr)
+						localPos = getWidgetRelativePos(*widget, cursorScreenPos);
 
 
-					mMouseEvent.setMouseOutData(curLocalPos);
+					mMouseEvent = GUIMouseEvent(buttonStates, shift, control, alt);
+
+					mMouseEvent.setMouseOverData(localPos);
 					if(sendMouseEvent(widget, element, mMouseEvent))
 					if(sendMouseEvent(widget, element, mMouseEvent))
 						eventProcessed = true;
 						eventProcessed = true;
 				}
 				}

+ 0 - 1
EditorWindowDock.txt

@@ -1,7 +1,6 @@
 TODO:
 TODO:
  - Closing all docked widgets causes an exception
  - Closing all docked widgets causes an exception
  - Test out minimum dock container size and maybe increase it a bit
  - Test out minimum dock container size and maybe increase it a bit
- - (Unrelated) Can't click and drag a scroll handle
 
 
 Polish TOOD:
 Polish TOOD:
  - Change cursor icon when window is dragged
  - Change cursor icon when window is dragged