173 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			173 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #include "..\..\easy2d.h"
 | |||
|  | 
 | |||
|  | 
 | |||
|  | TextButton::TextButton() : | |||
|  | 	m_pNormalText(nullptr), | |||
|  | 	m_pMouseInText(nullptr), | |||
|  | 	m_pSelectedText(nullptr), | |||
|  | 	m_pUnableText(nullptr) | |||
|  | { | |||
|  | } | |||
|  | 
 | |||
|  | TextButton::TextButton(TString text) : | |||
|  | 	TextButton() | |||
|  | { | |||
|  | 	setNormal(new Text(text));	// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ<CCAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | } | |||
|  | 
 | |||
|  | TextButton::TextButton(Text * text) : | |||
|  | 	TextButton() | |||
|  | { | |||
|  | 	setNormal(text);	// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ<CCAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | } | |||
|  | 
 | |||
|  | TextButton::~TextButton() | |||
|  | { | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | |||
|  | 	SafeRelease(m_pNormalText); | |||
|  | 	SafeRelease(m_pMouseInText); | |||
|  | 	SafeRelease(m_pSelectedText); | |||
|  | 	SafeRelease(m_pUnableText); | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::_setStatus(Status status) | |||
|  | { | |||
|  | 	if (m_eStatus != status) | |||
|  | 	{ | |||
|  | 		if (status == MOUSEIN) | |||
|  | 		{ | |||
|  | 			if (m_pMouseInText) setRect(m_pMouseInText->getRect()); | |||
|  | 		} | |||
|  | 		else if (status == SELECTED) | |||
|  | 		{ | |||
|  | 			if (m_pSelectedText) setRect(m_pSelectedText->getRect()); | |||
|  | 		} | |||
|  | 		else | |||
|  | 		{ | |||
|  | 			setRect(m_pNormalText->getRect()); | |||
|  | 		} | |||
|  | 	} | |||
|  | 	MouseNode::_setStatus(status); | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::_onNormal() | |||
|  | { | |||
|  | 	if (m_pNormalText) | |||
|  | 	{ | |||
|  | 		m_pNormalText->_onDraw(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::_onMouseIn() | |||
|  | { | |||
|  | 	if (m_pMouseInText) | |||
|  | 	{ | |||
|  | 		m_pMouseInText->_onDraw(); | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		_onNormal(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::_onSelected() | |||
|  | { | |||
|  | 	if (m_pSelectedText) | |||
|  | 	{ | |||
|  | 		m_pSelectedText->_onDraw(); | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		_onNormal(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::_onDisable() | |||
|  | { | |||
|  | 	if (m_pUnableText) | |||
|  | 	{ | |||
|  | 		m_pUnableText->_onDraw(); | |||
|  | 	} | |||
|  | 	else | |||
|  | 	{ | |||
|  | 		_onNormal(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::setNormal(Text * text) | |||
|  | { | |||
|  | 	if (text) | |||
|  | 	{ | |||
|  | 		// ԭ<>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | |||
|  | 		SafeRelease(m_pNormalText); | |||
|  | 		// <20><EFBFBD><DEB8>ı<EFBFBD>
 | |||
|  | 		m_pNormalText = text; | |||
|  | 		// <20><><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | |||
|  | 		m_pNormalText->retain(); | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD>趨<EFBFBD><E8B6A8>ť<EFBFBD><C5A5>С
 | |||
|  | 		setSize(m_pNormalText->getSize()); | |||
|  | 		// <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ı<EFBFBD>λ<EFBFBD><CEBB>
 | |||
|  | 		_resetPosition(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::setMouseIn(Text * text) | |||
|  | { | |||
|  | 	if (text) | |||
|  | 	{ | |||
|  | 		SafeRelease(m_pMouseInText); | |||
|  | 		m_pMouseInText = text; | |||
|  | 		m_pMouseInText->retain(); | |||
|  | 		_resetPosition(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::setSelected(Text * text) | |||
|  | { | |||
|  | 	if (text) | |||
|  | 	{ | |||
|  | 		SafeRelease(m_pSelectedText); | |||
|  | 		m_pSelectedText = text; | |||
|  | 		m_pSelectedText->retain(); | |||
|  | 		_resetPosition(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::setUnable(Text * text) | |||
|  | { | |||
|  | 	if (text) | |||
|  | 	{ | |||
|  | 		SafeRelease(m_pUnableText); | |||
|  | 		m_pUnableText = text; | |||
|  | 		m_pUnableText->retain(); | |||
|  | 		_resetPosition(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void TextButton::_resetPosition() | |||
|  | { | |||
|  | 	if (m_pNormalText) | |||
|  | 	{ | |||
|  | 		// <20><><EFBFBD>ݰ<EFBFBD>ťλ<C5A5>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>ʾ
 | |||
|  | 		m_pNormalText->setPos(getX() , getY()); | |||
|  | 	} | |||
|  | 	if (m_pMouseInText) | |||
|  | 	{ | |||
|  | 		m_pMouseInText->setPos( | |||
|  | 			getX() + (getWidth() - m_pMouseInText->getWidth()) / 2, | |||
|  | 			getY() + (getHeight() - m_pMouseInText->getHeight()) / 2); | |||
|  | 	} | |||
|  | 	if (m_pSelectedText) | |||
|  | 	{ | |||
|  | 		m_pSelectedText->setPos( | |||
|  | 			getX() + (getWidth() - m_pSelectedText->getWidth()) / 2, | |||
|  | 			getY() + (getHeight() - m_pSelectedText->getHeight()) / 2); | |||
|  | 	} | |||
|  | 	if (m_pUnableText) | |||
|  | 	{ | |||
|  | 		m_pUnableText->setPos( | |||
|  | 			getX() + (getWidth() - m_pUnableText->getWidth()) / 2, | |||
|  | 			getY() + (getHeight() - m_pUnableText->getHeight()) / 2); | |||
|  | 	} | |||
|  | } |