168 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "..\..\Easy2d.h"
 | |
| 
 | |
| 
 | |
| ImageButton::ImageButton() :
 | |
| 	m_pNormalImage(nullptr),
 | |
| 	m_pMouseInImage(nullptr),
 | |
| 	m_pSelectedImage(nullptr),
 | |
| 	m_pUnableImage(nullptr)
 | |
| {
 | |
| 	m_nWidth = 0;
 | |
| 	m_nHeight = 0;
 | |
| }
 | |
| 
 | |
| ImageButton::ImageButton(Image * image) :
 | |
| 	ImageButton()
 | |
| {
 | |
| 	setNormalImage(image);	// 设置按钮在正常状态时的图片
 | |
| }
 | |
| 
 | |
| ImageButton::~ImageButton()
 | |
| {
 | |
| 	// 所有图片的引用计数减一
 | |
| 	SAFE_RELEASE(m_pNormalImage);
 | |
| 	SAFE_RELEASE(m_pMouseInImage);
 | |
| 	SAFE_RELEASE(m_pSelectedImage);
 | |
| 	SAFE_RELEASE(m_pUnableImage);
 | |
| }
 | |
| 
 | |
| void ImageButton::_onNormal()
 | |
| {
 | |
| 	if (m_pNormalImage)
 | |
| 	{
 | |
| 		m_pNormalImage->_onDraw();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::_onMouseIn()
 | |
| {
 | |
| 	if (m_pMouseInImage)
 | |
| 	{
 | |
| 		m_pMouseInImage->_onDraw();
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		_onNormal();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::_onSelected()
 | |
| {
 | |
| 	if (m_pSelectedImage)
 | |
| 	{
 | |
| 		m_pSelectedImage->_onDraw();
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		_onNormal();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::_onDisable()
 | |
| {
 | |
| 	if (m_pUnableImage)
 | |
| 	{
 | |
| 		m_pUnableImage->_onDraw();
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		_onNormal();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::setNormalImage(Image * image)
 | |
| {
 | |
| 	if (image)
 | |
| 	{
 | |
| 		// 原图片引用计数减一
 | |
| 		SAFE_RELEASE(m_pNormalImage);
 | |
| 		// 修改图片
 | |
| 		m_pNormalImage = image;
 | |
| 		// 现图片引用计数加一
 | |
| 		m_pNormalImage->retain();
 | |
| 		// 重新计算图片位置
 | |
| 		resetImagePosition();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::setMouseInImage(Image * image)
 | |
| {
 | |
| 	if (image)
 | |
| 	{
 | |
| 		SAFE_RELEASE(m_pMouseInImage);
 | |
| 		m_pMouseInImage = image;
 | |
| 		m_pMouseInImage->retain();
 | |
| 		resetImagePosition();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::setSelectedImage(Image * image)
 | |
| {
 | |
| 	if (image)
 | |
| 	{
 | |
| 		SAFE_RELEASE(m_pSelectedImage);
 | |
| 		m_pSelectedImage = image;
 | |
| 		m_pSelectedImage->retain();
 | |
| 		resetImagePosition();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::setUnableImage(Image * image)
 | |
| {
 | |
| 	if (image)
 | |
| 	{
 | |
| 		SAFE_RELEASE(m_pUnableImage);
 | |
| 		m_pUnableImage = image;
 | |
| 		m_pUnableImage->retain();
 | |
| 		resetImagePosition();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void ImageButton::setX(int x)
 | |
| {
 | |
| 	Node::setX(x);
 | |
| 	resetImagePosition();
 | |
| }
 | |
| 
 | |
| void ImageButton::setY(int y)
 | |
| {
 | |
| 	Node::setY(y);
 | |
| 	resetImagePosition();
 | |
| }
 | |
| 
 | |
| void ImageButton::setPos(int x, int y)
 | |
| {
 | |
| 	Node::setPos(x, y);
 | |
| 	resetImagePosition();
 | |
| }
 | |
| 
 | |
| void ImageButton::resetImagePosition()
 | |
| {
 | |
| 	if (m_pNormalImage)
 | |
| 	{
 | |
| 		// 根据图片宽高设定按钮大小
 | |
| 		m_nWidth = m_pNormalImage->getWidth();
 | |
| 		m_nHeight = m_pNormalImage->getHeight();
 | |
| 		// 根据按钮位置和图片宽高设置图片位置居中显示
 | |
| 		m_pNormalImage->setPos(m_nX, m_nY);
 | |
| 	}
 | |
| 	if (m_pMouseInImage)
 | |
| 	{
 | |
| 		m_pMouseInImage->setPos(
 | |
| 			m_nX + (m_nWidth - m_pMouseInImage->getWidth()) / 2,
 | |
| 			m_nY + (m_nHeight - m_pMouseInImage->getHeight()) / 2);
 | |
| 	}
 | |
| 	if (m_pSelectedImage)
 | |
| 	{
 | |
| 		m_pSelectedImage->setPos(
 | |
| 			m_nX + (m_nWidth - m_pSelectedImage->getWidth()) / 2,
 | |
| 			m_nY + (m_nHeight - m_pSelectedImage->getHeight()) / 2);
 | |
| 	}
 | |
| 	if (m_pUnableImage)
 | |
| 	{
 | |
| 		m_pUnableImage->setPos(
 | |
| 			m_nX + (m_nWidth - m_pUnableImage->getWidth()) / 2,
 | |
| 			m_nY + (m_nHeight - m_pUnableImage->getHeight()) / 2);
 | |
| 	}
 | |
| }
 |