| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | #include "..\easy2d.h"
 | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | #include "..\e2dobj.h"
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | MouseNode::MouseNode() : | 
					
						
							|  |  |  |  | 	m_bBlock(true), | 
					
						
							|  |  |  |  | 	m_bTarget(false), | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	m_ClickCallback([]() {}), | 
					
						
							|  |  |  |  | 	m_OnMouseInCallback([]() {}), | 
					
						
							|  |  |  |  | 	m_OnMouseOutCallback([]() {}), | 
					
						
							|  |  |  |  | 	m_OnSelectCallback([]() {}), | 
					
						
							|  |  |  |  | 	m_OnUnselectCallback([]() {}) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | MouseNode::~MouseNode() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool MouseNode::_exec(bool active) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 	// <20><> display <20><><EFBFBD><EFBFBD>Ϊ false<73><65><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	if (!m_bDisplay) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return false; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ý<EFBFBD><C3BD>㣬<EFBFBD><E3A3AC><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD>Բ<EFBFBD><D4B2>˳<EFBFBD>
 | 
					
						
							|  |  |  |  | 	if (!active) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 		reset(); | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		return false; | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	// <20>жϽڵ㵱ǰ<E3B5B1><C7B0>״̬
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ڵ<EFBFBD>δȡ<CEB4>ý<EFBFBD><C3BD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϽڵ<CFBD>״̬
 | 
					
						
							|  |  |  |  | 	if (!m_bTarget) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ڽڵ<DABD><DAB5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 		if (_isMouseIn()) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 			// ״̬<D7B4><CCAC>Ϊ MOUSEIN
 | 
					
						
							|  |  |  |  | 			_setStatus(MOUSEIN); | 
					
						
							|  |  |  |  | 			// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 			if (MouseMsg::isOnLButtonDown()) | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				m_bTarget = true;		// ȡ<>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 				_setStatus(SELECTED);	// ״̬<D7B4><CCAC>Ϊ SELECTED
 | 
					
						
							|  |  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 			// <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ȡ<EFBFBD>û<EFBFBD><C3BB>潹<EFBFBD><E6BDB9>
 | 
					
						
							|  |  |  |  | 			if (m_bBlock) return true; | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			reset();		// <20>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬
 | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20>ڵ<EFBFBD>ȡ<EFBFBD>ý<EFBFBD><C3BD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>
 | 
					
						
							|  |  |  |  | 		if (MouseMsg::isOnLButtonUp()) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽڵ<DABD><DAB5><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 			if (_isMouseIn()) | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				m_ClickCallback();	// ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 			reset();				// <20>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | 		// <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ȡ<EFBFBD>û<EFBFBD><C3BB>潹<EFBFBD><E6BDB9>
 | 
					
						
							|  |  |  |  | 		if (m_bBlock) return true; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 	return false; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void MouseNode::_onDraw() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
 | 
					
						
							|  |  |  |  | 	if (!m_bDisplay) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	// <20>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ<EFBFBD><D1A1>
 | 
					
						
							|  |  |  |  | 	if (m_eStatus == SELECTED) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		_onSelected(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ڽڵ<DABD><DAB5><EFBFBD>
 | 
					
						
							|  |  |  |  | 		if (m_eStatus == MOUSEIN) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			_onMouseIn(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			_onNormal(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | bool MouseNode::_isMouseIn() | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	return isPointIn(MouseMsg::getPos()); | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | void MouseNode::_setStatus(Status status) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	if (m_eStatus != status) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20>˳<EFBFBD>ij<EFBFBD><C4B3>״̬<D7B4>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		if (m_eStatus == MOUSEIN) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_OnMouseOutCallback(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else if (m_eStatus == SELECTED) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_OnUnselectCallback(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>״̬<D7B4>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		if (status == MOUSEIN) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_OnMouseInCallback(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else if (status == SELECTED) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_OnSelectCallback(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		m_eStatus = status; | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | bool MouseNode::isMouseIn() | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	return m_eStatus == MOUSEIN || m_eStatus == SELECTED; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | bool MouseNode::isSelected() | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	return m_eStatus == SELECTED; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | void MouseNode::setClickedCallback(const CLICK_CALLBACK & callback) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	m_ClickCallback = callback; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | void MouseNode::setMouseInCallback(const CLICK_CALLBACK & callback) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	m_OnMouseInCallback = callback; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void MouseNode::setMouseOutCallback(const CLICK_CALLBACK & callback) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_OnMouseOutCallback = callback; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | void MouseNode::setSelectCallback(const CLICK_CALLBACK & callback) | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	m_OnSelectCallback = callback; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void MouseNode::setUnselectCallback(const CLICK_CALLBACK & callback) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_OnUnselectCallback = callback; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void MouseNode::reset() | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-16 23:09:11 +08:00
										 |  |  |  | 	m_bTarget = false;		// ʧȥ<CAA7><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	_setStatus(NORMAL);		// <20>ָ<EFBFBD>Ĭ<EFBFBD><C4AC>״̬
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void MouseNode::setBlock(bool block) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_bBlock = block; | 
					
						
							|  |  |  |  | } |