ソースを参照

Removed mouse over element for GUIMouseEvent

Marko Pintera 12 年 前
コミット
1f149c571e

+ 1 - 0
BansheeEngine/Include/BsGUIInputBox.h

@@ -68,6 +68,7 @@ namespace BansheeEngine
 		bool mIsMultiline;
 		bool mIsMultiline;
 		CM::Vector2I mTextOffset;
 		CM::Vector2I mTextOffset;
 		bool mHasFocus;
 		bool mHasFocus;
+		bool mIsMouseOver;
 
 
 		HSpriteTexture mActiveTexture;
 		HSpriteTexture mActiveTexture;
 		IMAGE_SPRITE_DESC mImageDesc;
 		IMAGE_SPRITE_DESC mImageDesc;

+ 10 - 0
BansheeEngine/Include/BsGUIManager.h

@@ -46,6 +46,16 @@ namespace BansheeEngine
 			GUIWidget* widget;
 			GUIWidget* widget;
 		};
 		};
 
 
+		struct ElementInfo
+		{
+			ElementInfo(GUIElement* element, GUIWidget* widget)
+				:element(element), widget(widget)
+			{ }
+
+			GUIElement* element;
+			GUIWidget* widget;
+		};
+
 	public:
 	public:
 		GUIManager();
 		GUIManager();
 		~GUIManager();
 		~GUIManager();

+ 12 - 14
BansheeEngine/Include/BsGUIMouseEvent.h

@@ -38,7 +38,6 @@ namespace BansheeEngine
 		CM::Vector2I getDragAmount() const { return mDragAmount; }
 		CM::Vector2I getDragAmount() const { return mDragAmount; }
 		float getWheelScrollAmount() const { return mWheelScrollAmount; }
 		float getWheelScrollAmount() const { return mWheelScrollAmount; }
 		bool isButtonDown(GUIMouseButton button) const { return mButtonStates[(int)button]; }
 		bool isButtonDown(GUIMouseButton button) const { return mButtonStates[(int)button]; }
-		GUIElement* getMouseOverElement() const { return mMouseOverElement; }
 		CM::UINT32 getDragAndDropTypeId() const { return mDragTypeId; }
 		CM::UINT32 getDragAndDropTypeId() const { return mDragTypeId; }
 		void* getDragAndDropData() const { return mDragData; }
 		void* getDragAndDropData() const { return mDragData; }
 
 
@@ -54,7 +53,6 @@ namespace BansheeEngine
 		float mWheelScrollAmount;
 		float mWheelScrollAmount;
 		GUIMouseEventType mType;
 		GUIMouseEventType mType;
 		GUIMouseButton mButton;
 		GUIMouseButton mButton;
-		GUIElement* mMouseOverElement;
 		CM::UINT32 mDragTypeId;
 		CM::UINT32 mDragTypeId;
 		void* mDragData;
 		void* mDragData;
 
 
@@ -62,19 +60,19 @@ namespace BansheeEngine
 		bool mCtrl;
 		bool mCtrl;
 		bool mAlt;
 		bool mAlt;
 
 
-		void setMouseOverData(GUIElement* mouseOverElement, const CM::Vector2I& position);
-		void setMouseOutData(GUIElement* mouseOverElement, const CM::Vector2I& position);
-		void setMouseMoveData(GUIElement* mouseOverElement, const CM::Vector2I& position);
-		void setMouseWheelScrollData(GUIElement* mouseOverElement, float scrollAmount);
-		void setMouseUpData(GUIElement* mouseOverElement, const CM::Vector2I& position, GUIMouseButton button);
-		void setMouseDownData(GUIElement* mouseOverElement, const CM::Vector2I& position, GUIMouseButton button);
-		void setMouseDoubleClickData(GUIElement* mouseOverElement, const CM::Vector2I& position, GUIMouseButton button);
+		void setMouseOverData(const CM::Vector2I& position);
+		void setMouseOutData(const CM::Vector2I& position);
+		void setMouseMoveData(const CM::Vector2I& position);
+		void setMouseWheelScrollData(float scrollAmount);
+		void setMouseUpData(const CM::Vector2I& position, GUIMouseButton button);
+		void setMouseDownData(const CM::Vector2I& position, GUIMouseButton button);
+		void setMouseDoubleClickData(const CM::Vector2I& position, GUIMouseButton button);
 
 
-		void setMouseDragData(GUIElement* mouseOverElement, const CM::Vector2I& position, const CM::Vector2I& dragAmount);
-		void setMouseDragStartData(GUIElement* mouseOverElement, const CM::Vector2I& position);
-		void setMouseDragEndData(GUIElement* mouseOverElement, const CM::Vector2I& position);
+		void setMouseDragData(const CM::Vector2I& position, const CM::Vector2I& dragAmount);
+		void setMouseDragStartData(const CM::Vector2I& position);
+		void setMouseDragEndData(const CM::Vector2I& position);
 
 
-		void setDragAndDropDroppedData(GUIElement* mouseOverElement, const CM::Vector2I& position, CM::UINT32 dragTypeId, void* dragData);
-		void setDragAndDropDraggedData(GUIElement* mouseOverElement, const CM::Vector2I& position, CM::UINT32 dragTypeId, void* dragData);
+		void setDragAndDropDroppedData(const CM::Vector2I& position, CM::UINT32 dragTypeId, void* dragData);
+		void setDragAndDropDraggedData(const CM::Vector2I& position, CM::UINT32 dragTypeId, void* dragData);
 	};
 	};
 }
 }

+ 6 - 2
BansheeEngine/Source/BsGUIInputBox.cpp

@@ -31,7 +31,7 @@ namespace BansheeEngine
 
 
 	GUIInputBox::GUIInputBox(GUIWidget& parent, const GUIElementStyle* style, const GUILayoutOptions& layoutOptions, bool multiline)
 	GUIInputBox::GUIInputBox(GUIWidget& parent, const GUIElementStyle* style, const GUILayoutOptions& layoutOptions, bool multiline)
 		:GUIElement(parent, style, layoutOptions), mInputCursorSet(false), mDragInProgress(false),
 		:GUIElement(parent, style, layoutOptions), mInputCursorSet(false), mDragInProgress(false),
-		mCaretShown(false), mSelectionShown(false), mIsMultiline(multiline), mHasFocus(false)
+		mCaretShown(false), mSelectionShown(false), mIsMultiline(multiline), mHasFocus(false), mIsMouseOver(false)
 	{
 	{
 		mImageSprite = cm_new<ImageSprite, PoolAlloc>();
 		mImageSprite = cm_new<ImageSprite, PoolAlloc>();
 		mTextSprite = cm_new<TextSprite, PoolAlloc>();
 		mTextSprite = cm_new<TextSprite, PoolAlloc>();
@@ -390,6 +390,8 @@ namespace BansheeEngine
 				mInputCursorSet = true;
 				mInputCursorSet = true;
 			}
 			}
 
 
+			mIsMouseOver = true;
+
 			return true;
 			return true;
 		}
 		}
 		else if(ev.getType() == GUIMouseEventType::MouseOut)
 		else if(ev.getType() == GUIMouseEventType::MouseOut)
@@ -406,6 +408,8 @@ namespace BansheeEngine
 				mInputCursorSet = false;
 				mInputCursorSet = false;
 			}
 			}
 
 
+			mIsMouseOver = false;
+
 			return true;
 			return true;
 		}
 		}
 		else if(ev.getType() == GUIMouseEventType::MouseDoubleClick && ev.getButton() == GUIMouseButton::Left)
 		else if(ev.getType() == GUIMouseEventType::MouseDoubleClick && ev.getButton() == GUIMouseButton::Left)
@@ -472,7 +476,7 @@ namespace BansheeEngine
 			{
 			{
 				mDragInProgress = false;
 				mDragInProgress = false;
 
 
-				if(ev.getMouseOverElement() != this && mInputCursorSet)
+				if(!mIsMouseOver && mInputCursorSet)
 				{
 				{
 					Platform::setCursor(CursorType::Arrow);
 					Platform::setCursor(CursorType::Arrow);
 					mInputCursorSet = false;
 					mInputCursorSet = false;

+ 13 - 14
BansheeEngine/Source/BsGUIManager.cpp

@@ -581,7 +581,7 @@ namespace BansheeEngine
 				if(mWidgetUnderCursor != nullptr)
 				if(mWidgetUnderCursor != nullptr)
 					localPos = getWidgetRelativePos(*mWidgetUnderCursor, event.screenPos);
 					localPos = getWidgetRelativePos(*mWidgetUnderCursor, event.screenPos);
 
 
-				mMouseEvent.setDragAndDropDroppedData(mElementUnderCursor, localPos, DragAndDropManager::instance().getDragTypeId(), DragAndDropManager::instance().getDragData());
+				mMouseEvent.setDragAndDropDroppedData(localPos, DragAndDropManager::instance().getDragTypeId(), DragAndDropManager::instance().getDragData());
 				bool processed = sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent);
 				bool processed = sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent);
 
 
 				return processed;
 				return processed;
@@ -615,7 +615,7 @@ namespace BansheeEngine
 
 
 			if(dist > DRAG_DISTANCE)
 			if(dist > DRAG_DISTANCE)
 			{
 			{
-				mMouseEvent.setMouseDragStartData(mElementUnderCursor, localPos);
+				mMouseEvent.setMouseDragStartData(localPos);
 				if(sendMouseEvent(mActiveWidget, mActiveElement, mMouseEvent))
 				if(sendMouseEvent(mActiveWidget, mActiveElement, mMouseEvent))
 					event.markAsUsed();
 					event.markAsUsed();
 
 
@@ -630,7 +630,7 @@ namespace BansheeEngine
 
 
 			if(mLastCursorLocalPos != curLocalPos)
 			if(mLastCursorLocalPos != curLocalPos)
 			{
 			{
-				mMouseEvent.setMouseDragData(mElementUnderCursor, curLocalPos, curLocalPos - mLastCursorLocalPos);
+				mMouseEvent.setMouseDragData(curLocalPos, curLocalPos - mLastCursorLocalPos);
 				if(sendMouseEvent(mActiveWidget, mActiveElement, mMouseEvent))
 				if(sendMouseEvent(mActiveWidget, mActiveElement, mMouseEvent))
 					event.markAsUsed();
 					event.markAsUsed();
 
 
@@ -644,7 +644,7 @@ namespace BansheeEngine
 				// Send MouseMove event
 				// Send MouseMove event
 				if(mLastCursorLocalPos != localPos)
 				if(mLastCursorLocalPos != localPos)
 				{
 				{
-					mMouseEvent.setMouseMoveData(mElementUnderCursor, localPos);
+					mMouseEvent.setMouseMoveData(localPos);
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 						event.markAsUsed();
 						event.markAsUsed();
 
 
@@ -654,14 +654,14 @@ namespace BansheeEngine
 				// Also if drag is in progress send DragAndDrop events
 				// Also if drag is in progress send DragAndDrop events
 				if(DragAndDropManager::instance().isDragInProgress())
 				if(DragAndDropManager::instance().isDragInProgress())
 				{
 				{
-					mMouseEvent.setDragAndDropDraggedData(mElementUnderCursor, localPos, DragAndDropManager::instance().getDragTypeId(), DragAndDropManager::instance().getDragData());
+					mMouseEvent.setDragAndDropDraggedData(localPos, DragAndDropManager::instance().getDragTypeId(), DragAndDropManager::instance().getDragData());
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 						event.markAsUsed();
 						event.markAsUsed();
 				}
 				}
 
 
 				if(Math::abs(event.mouseWheelScrollAmount) > 0.00001f)
 				if(Math::abs(event.mouseWheelScrollAmount) > 0.00001f)
 				{
 				{
-					mMouseEvent.setMouseWheelScrollData(mElementUnderCursor, event.mouseWheelScrollAmount);
+					mMouseEvent.setMouseWheelScrollData(event.mouseWheelScrollAmount);
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 						event.markAsUsed();
 						event.markAsUsed();
 				}
 				}
@@ -697,7 +697,7 @@ namespace BansheeEngine
 		bool acceptMouseUp = mActiveMouseButton == guiButton && (mElementUnderCursor != nullptr && mActiveElement == mElementUnderCursor);
 		bool acceptMouseUp = mActiveMouseButton == guiButton && (mElementUnderCursor != nullptr && mActiveElement == mElementUnderCursor);
 		if(acceptMouseUp)
 		if(acceptMouseUp)
 		{
 		{
-			mMouseEvent.setMouseUpData(mElementUnderCursor, localPos, guiButton);
+			mMouseEvent.setMouseUpData(localPos, guiButton);
 
 
 			if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 			if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 				event.markAsUsed();
 				event.markAsUsed();
@@ -709,7 +709,7 @@ namespace BansheeEngine
 
 
 		if(acceptEndDrag)
 		if(acceptEndDrag)
 		{
 		{
-			mMouseEvent.setMouseDragEndData(mElementUnderCursor, localPos);
+			mMouseEvent.setMouseDragEndData(localPos);
 			if(sendMouseEvent(mActiveWidget, mActiveElement, mMouseEvent))
 			if(sendMouseEvent(mActiveWidget, mActiveElement, mMouseEvent))
 				event.markAsUsed();
 				event.markAsUsed();
 
 
@@ -754,7 +754,7 @@ namespace BansheeEngine
 		{
 		{
 			Vector2I localPos = getWidgetRelativePos(*mWidgetUnderCursor, event.screenPos);
 			Vector2I localPos = getWidgetRelativePos(*mWidgetUnderCursor, event.screenPos);
 
 
-			mMouseEvent.setMouseDownData(mElementUnderCursor, localPos, guiButton);
+			mMouseEvent.setMouseDownData(localPos, guiButton);
 			if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 			if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 				event.markAsUsed();
 				event.markAsUsed();
 
 
@@ -821,7 +821,7 @@ namespace BansheeEngine
 		{
 		{
 			Vector2I localPos = getWidgetRelativePos(*mWidgetUnderCursor, event.screenPos);
 			Vector2I localPos = getWidgetRelativePos(*mWidgetUnderCursor, event.screenPos);
 
 
-			mMouseEvent.setMouseDoubleClickData(mElementUnderCursor, localPos, guiButton);
+			mMouseEvent.setMouseDoubleClickData(localPos, guiButton);
 			if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 			if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 				event.markAsUsed();
 				event.markAsUsed();
 		}
 		}
@@ -1026,8 +1026,7 @@ namespace BansheeEngine
 
 
 		mMouseEvent = GUIMouseEvent(buttonStates, shift, control, alt);
 		mMouseEvent = GUIMouseEvent(buttonStates, shift, control, alt);
 
 
-		// Send MouseOver/MouseOut events to any elements the mouse passes over, except when
-		// mouse is being held down, in which we only send them to the active element
+		// Send MouseOver/MouseOut events to any elements the mouse passes over
 		if(element != mElementUnderCursor)
 		if(element != mElementUnderCursor)
 		{
 		{
 			if(mElementUnderCursor != nullptr)
 			if(mElementUnderCursor != nullptr)
@@ -1037,7 +1036,7 @@ namespace BansheeEngine
 				{
 				{
 					Vector2I curLocalPos = getWidgetRelativePos(*mWidgetUnderCursor, screenPos);
 					Vector2I curLocalPos = getWidgetRelativePos(*mWidgetUnderCursor, screenPos);
 
 
-					mMouseEvent.setMouseOutData(element, curLocalPos);
+					mMouseEvent.setMouseOutData(curLocalPos);
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 					if(sendMouseEvent(mWidgetUnderCursor, mElementUnderCursor, mMouseEvent))
 						eventProcessed = true;
 						eventProcessed = true;
 				}
 				}
@@ -1048,7 +1047,7 @@ namespace BansheeEngine
 				// Send MouseOver event
 				// Send MouseOver event
 				if(mActiveElement == nullptr || element == mActiveElement)
 				if(mActiveElement == nullptr || element == mActiveElement)
 				{
 				{
-					mMouseEvent.setMouseOverData(element, localPos);
+					mMouseEvent.setMouseOverData(localPos);
 					if(sendMouseEvent(widget, element, mMouseEvent))
 					if(sendMouseEvent(widget, element, mMouseEvent))
 						eventProcessed = true;
 						eventProcessed = true;
 				}
 				}

+ 14 - 26
BansheeEngine/Source/BsGUIMouseEvent.cpp

@@ -5,124 +5,113 @@ using namespace CamelotFramework;
 namespace BansheeEngine
 namespace BansheeEngine
 {
 {
 	GUIMouseEvent::GUIMouseEvent()
 	GUIMouseEvent::GUIMouseEvent()
-		:mType(GUIMouseEventType::MouseMove), mButton(GUIMouseButton::Left), mMouseOverElement(nullptr),
+		:mType(GUIMouseEventType::MouseMove), mButton(GUIMouseButton::Left), 
 		mShift(false), mCtrl(false), mAlt(false), mWheelScrollAmount(0.0f)
 		mShift(false), mCtrl(false), mAlt(false), mWheelScrollAmount(0.0f)
 	{
 	{
 
 
 	}
 	}
 
 
 	GUIMouseEvent::GUIMouseEvent(bool buttonStates[GUIMouseButton::Count], bool shift, bool ctrl, bool alt)
 	GUIMouseEvent::GUIMouseEvent(bool buttonStates[GUIMouseButton::Count], bool shift, bool ctrl, bool alt)
-		:mType(GUIMouseEventType::MouseMove), mButton(GUIMouseButton::Left), mMouseOverElement(nullptr),
+		:mType(GUIMouseEventType::MouseMove), mButton(GUIMouseButton::Left),
 		mShift(shift), mCtrl(ctrl), mAlt(alt)
 		mShift(shift), mCtrl(ctrl), mAlt(alt)
 	{
 	{
 		memcpy(mButtonStates, buttonStates, sizeof(mButtonStates));
 		memcpy(mButtonStates, buttonStates, sizeof(mButtonStates));
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseOverData(GUIElement* mouseOverElement, const Vector2I& position)
+	void GUIMouseEvent::setMouseOverData(const Vector2I& position)
 	{
 	{
 		mType = GUIMouseEventType::MouseOver;
 		mType = GUIMouseEventType::MouseOver;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseOutData(GUIElement* mouseOverElement, const Vector2I& position)
+	void GUIMouseEvent::setMouseOutData(const Vector2I& position)
 	{
 	{
 		mType = GUIMouseEventType::MouseOut;
 		mType = GUIMouseEventType::MouseOut;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseMoveData(GUIElement* mouseOverElement, const Vector2I& position)
+	void GUIMouseEvent::setMouseMoveData(const Vector2I& position)
 	{
 	{
 		mType = GUIMouseEventType::MouseMove;
 		mType = GUIMouseEventType::MouseMove;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseWheelScrollData(GUIElement* mouseOverElement, float scrollAmount)
+	void GUIMouseEvent::setMouseWheelScrollData(float scrollAmount)
 	{
 	{
 		mType = GUIMouseEventType::MouseWheelScroll;
 		mType = GUIMouseEventType::MouseWheelScroll;
 		mPosition = Vector2I();
 		mPosition = Vector2I();
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = scrollAmount;
 		mWheelScrollAmount = scrollAmount;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseUpData(GUIElement* mouseOverElement, const Vector2I& position, GUIMouseButton button)
+	void GUIMouseEvent::setMouseUpData(const Vector2I& position, GUIMouseButton button)
 	{
 	{
 		mType = GUIMouseEventType::MouseUp;
 		mType = GUIMouseEventType::MouseUp;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = button;
 		mButton = button;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseDownData(GUIElement* mouseOverElement, const Vector2I& position, GUIMouseButton button)
+	void GUIMouseEvent::setMouseDownData(const Vector2I& position, GUIMouseButton button)
 	{
 	{
 		mType = GUIMouseEventType::MouseDown;
 		mType = GUIMouseEventType::MouseDown;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = button;
 		mButton = button;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseDoubleClickData(GUIElement* mouseOverElement, const Vector2I& position, GUIMouseButton button)
+	void GUIMouseEvent::setMouseDoubleClickData(const Vector2I& position, GUIMouseButton button)
 	{
 	{
 		mType = GUIMouseEventType::MouseDoubleClick;
 		mType = GUIMouseEventType::MouseDoubleClick;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = button;
 		mButton = button;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseDragData(GUIElement* mouseOverElement, const Vector2I& position, const Vector2I& dragAmount)
+	void GUIMouseEvent::setMouseDragData(const Vector2I& position, const Vector2I& dragAmount)
 	{
 	{
 		mType = GUIMouseEventType::MouseDrag;
 		mType = GUIMouseEventType::MouseDrag;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = dragAmount;
 		mDragAmount = dragAmount;
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseDragStartData(GUIElement* mouseOverElement, const Vector2I& position)
+	void GUIMouseEvent::setMouseDragStartData(const Vector2I& position)
 	{
 	{
 		mType = GUIMouseEventType::MouseDragStart;
 		mType = GUIMouseEventType::MouseDragStart;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setMouseDragEndData(GUIElement* mouseOverElement, const Vector2I& position)
+	void GUIMouseEvent::setMouseDragEndData(const Vector2I& position)
 	{
 	{
 		mType = GUIMouseEventType::MouseDragEnd;
 		mType = GUIMouseEventType::MouseDragEnd;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
 	}
 	}
 
 
-	void GUIMouseEvent::setDragAndDropDroppedData(GUIElement* mouseOverElement, const Vector2I& position, CM::UINT32 dragTypeId, void* dragData)
+	void GUIMouseEvent::setDragAndDropDroppedData(const Vector2I& position, CM::UINT32 dragTypeId, void* dragData)
 	{
 	{
 		mType = GUIMouseEventType::MouseDragAndDropDropped;
 		mType = GUIMouseEventType::MouseDragAndDropDropped;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;
@@ -130,11 +119,10 @@ namespace BansheeEngine
 		mDragData = dragData;
 		mDragData = dragData;
 	}
 	}
 
 
-	void GUIMouseEvent::setDragAndDropDraggedData(GUIElement* mouseOverElement, const Vector2I& position, CM::UINT32 dragTypeId, void* dragData)
+	void GUIMouseEvent::setDragAndDropDraggedData(const Vector2I& position, CM::UINT32 dragTypeId, void* dragData)
 	{
 	{
 		mType = GUIMouseEventType::MouseDragAndDropDragged;
 		mType = GUIMouseEventType::MouseDragAndDropDragged;
 		mPosition = position;
 		mPosition = position;
-		mMouseOverElement = mouseOverElement;
 		mButton = GUIMouseButton::Left;
 		mButton = GUIMouseButton::Left;
 		mDragAmount = Vector2I();
 		mDragAmount = Vector2I();
 		mWheelScrollAmount = 0.0f;
 		mWheelScrollAmount = 0.0f;

+ 1 - 2
EditorWindowDock.txt

@@ -1,6 +1,5 @@
 TODO:
 TODO:
- - Add GUIElementContainer, a class that does no rendering but contains other GUIElements. Use it for GUIScrolArea, GUITabbedTitleBar and GUIDockManager
- - Change DockManager into a GUIElement
+ - Dock manager currently eats all mouse input. Modify GUIManager so it will recursively try to send input to all elements under the cursor until one processes it
 
 
 Resize sliders
 Resize sliders
  - Add a button between docked windows
  - Add a button between docked windows