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));	// 设置按钮在正常状态时的文字
 | 
						|
}
 | 
						|
 | 
						|
TextButton::TextButton(Text * text) :
 | 
						|
	TextButton()
 | 
						|
{
 | 
						|
	setNormal(text);	// 设置按钮在正常状态时的文字
 | 
						|
}
 | 
						|
 | 
						|
TextButton::~TextButton()
 | 
						|
{
 | 
						|
	// 所有文本的引用计数减一
 | 
						|
	SAFE_RELEASE(m_pNormalText);
 | 
						|
	SAFE_RELEASE(m_pMouseInText);
 | 
						|
	SAFE_RELEASE(m_pSelectedText);
 | 
						|
	SAFE_RELEASE(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)
 | 
						|
	{
 | 
						|
		// 原文本引用计数减一
 | 
						|
		SAFE_RELEASE(m_pNormalText);
 | 
						|
		// 修改文本
 | 
						|
		m_pNormalText = text;
 | 
						|
		// 现文本引用计数加一
 | 
						|
		m_pNormalText->retain();
 | 
						|
		// 根据文字宽高设定按钮大小
 | 
						|
		setSize(m_pNormalText->getSize());
 | 
						|
		// 重新计算文本位置
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void TextButton::setMouseIn(Text * text)
 | 
						|
{
 | 
						|
	if (text)
 | 
						|
	{
 | 
						|
		SAFE_RELEASE(m_pMouseInText);
 | 
						|
		m_pMouseInText = text;
 | 
						|
		m_pMouseInText->retain();
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void TextButton::setSelected(Text * text)
 | 
						|
{
 | 
						|
	if (text)
 | 
						|
	{
 | 
						|
		SAFE_RELEASE(m_pSelectedText);
 | 
						|
		m_pSelectedText = text;
 | 
						|
		m_pSelectedText->retain();
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void TextButton::setUnable(Text * text)
 | 
						|
{
 | 
						|
	if (text)
 | 
						|
	{
 | 
						|
		SAFE_RELEASE(m_pUnableText);
 | 
						|
		m_pUnableText = text;
 | 
						|
		m_pUnableText->retain();
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void TextButton::_resetPosition()
 | 
						|
{
 | 
						|
	if (m_pNormalText)
 | 
						|
	{
 | 
						|
		// 根据按钮位置和文字宽高设置文字位置居中显示
 | 
						|
		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);
 | 
						|
	}
 | 
						|
}
 |