110 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #include "..\easy2d.h"
 | |||
|  | 
 | |||
|  | 
 | |||
|  | MouseNode::MouseNode() : | |||
|  | 	m_bBlock(true), | |||
|  | 	m_bTarget(false), | |||
|  | 	m_callback([]() {}) | |||
|  | { | |||
|  | } | |||
|  | 
 | |||
|  | MouseNode::~MouseNode() | |||
|  | { | |||
|  | } | |||
|  | 
 | |||
|  | bool MouseNode::_exec(bool active) | |||
|  | { | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ý<EFBFBD><C3BD>㣬<EFBFBD><E3A3AC> display <20><><EFBFBD><EFBFBD>Ϊ false<73><65><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	if (!active || !m_bDisplay) | |||
|  | 	{ | |||
|  | 		return false; | |||
|  | 	} | |||
|  | 	// <20>жϽڵ<CFBD>״̬
 | |||
|  | 	_judge(); | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ڽڵ<DABD><DAB5>ϣ<EFBFBD><CFA3><EFBFBD>ѡ<EFBFBD><D1A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҳ<EFBFBD>ڽڵ<DABD><DAB5>ϣ<EFBFBD>
 | |||
|  | 	if (m_eStatus == MOUSEIN || m_eStatus == SELECTED) | |||
|  | 	{ | |||
|  | 		// <20>ڵ㱻<DAB5><E3B1BB><EFBFBD><EFBFBD>ѡ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>
 | |||
|  | 		if (m_bTarget && MouseMsg::getLButtonUpMsg()) | |||
|  | 		{ | |||
|  | 			onClicked();	// ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 		} | |||
|  | 		// <20><><EFBFBD>ڵ㲻<DAB5><E3B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ȡ<EFBFBD>û<EFBFBD><C3BB>潹<EFBFBD><E6BDB9>
 | |||
|  | 		if (!m_bBlock) return true; | |||
|  | 	} | |||
|  | 	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(); | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void MouseNode::_setNormal() | |||
|  | { | |||
|  | 	m_bTarget = false;		// ʧȥ<CAA7><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	m_eStatus = NORMAL; | |||
|  | } | |||
|  | 
 | |||
|  | void MouseNode::_setMouseIn() | |||
|  | { | |||
|  | 	m_eStatus = MOUSEIN; | |||
|  | } | |||
|  | 
 | |||
|  | void MouseNode::_setSelected() | |||
|  | { | |||
|  | 	m_bTarget = true;		// ȡ<>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	m_eStatus = SELECTED; | |||
|  | } | |||
|  | 
 | |||
|  | void MouseNode::onClicked() | |||
|  | { | |||
|  | 	m_callback(); | |||
|  | } | |||
|  | 
 | |||
|  | bool MouseNode::isMouseIn() | |||
|  | { | |||
|  | 	return m_eStatus == MOUSEIN || m_eStatus == SELECTED; | |||
|  | } | |||
|  | 
 | |||
|  | bool MouseNode::isSelected() | |||
|  | { | |||
|  | 	return m_eStatus == SELECTED; | |||
|  | } | |||
|  | 
 | |||
|  | void MouseNode::setOnMouseClicked(const CLICK_CALLBACK & callback) | |||
|  | { | |||
|  | 	m_callback = callback; | |||
|  | } | |||
|  | 
 | |||
|  | void MouseNode::reset() | |||
|  | { | |||
|  | 	m_eStatus = NORMAL; | |||
|  | } | |||
|  | 
 | |||
|  | void MouseNode::setBlock(bool block) | |||
|  | { | |||
|  | 	m_bBlock = block; | |||
|  | } |