173 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
#include "..\..\easy2d.h"
 | 
						|
 | 
						|
 | 
						|
ImageButton::ImageButton() :
 | 
						|
	m_pNormalImage(nullptr),
 | 
						|
	m_pMouseInImage(nullptr),
 | 
						|
	m_pSelectedImage(nullptr),
 | 
						|
	m_pUnableImage(nullptr)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
ImageButton::ImageButton(LPCTSTR image) :
 | 
						|
	ImageButton()
 | 
						|
{
 | 
						|
	setNormal(new Image(image));	// 设置按钮在正常状态时的图片
 | 
						|
}
 | 
						|
 | 
						|
ImageButton::ImageButton(Image * image) :
 | 
						|
	ImageButton()
 | 
						|
{
 | 
						|
	setNormal(image);	// 设置按钮在正常状态时的图片
 | 
						|
}
 | 
						|
 | 
						|
ImageButton::~ImageButton()
 | 
						|
{
 | 
						|
	// 所有图片的引用计数减一
 | 
						|
	SAFE_RELEASE(m_pNormalImage);
 | 
						|
	SAFE_RELEASE(m_pMouseInImage);
 | 
						|
	SAFE_RELEASE(m_pSelectedImage);
 | 
						|
	SAFE_RELEASE(m_pUnableImage);
 | 
						|
}
 | 
						|
 | 
						|
void ImageButton::_setStatus(Status status)
 | 
						|
{
 | 
						|
	if (m_eStatus != status)
 | 
						|
	{
 | 
						|
		if (status == MOUSEIN)
 | 
						|
		{
 | 
						|
			if (m_pMouseInImage) setRect(m_pMouseInImage->getRect());
 | 
						|
		}
 | 
						|
		else if (status == SELECTED)
 | 
						|
		{
 | 
						|
			if (m_pSelectedImage) setRect(m_pSelectedImage->getRect());
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			setRect(m_pNormalImage->getRect());
 | 
						|
		}
 | 
						|
	}
 | 
						|
	MouseNode::_setStatus(status);
 | 
						|
}
 | 
						|
 | 
						|
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::setNormal(Image * image)
 | 
						|
{
 | 
						|
	if (image)
 | 
						|
	{
 | 
						|
		// 原图片引用计数减一
 | 
						|
		SAFE_RELEASE(m_pNormalImage);
 | 
						|
		// 修改图片
 | 
						|
		m_pNormalImage = image;
 | 
						|
		// 现图片引用计数加一
 | 
						|
		m_pNormalImage->retain();
 | 
						|
		// 根据图片宽高设定按钮大小
 | 
						|
		setSize(m_pNormalImage->getSize());
 | 
						|
		// 重新计算图片位置
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void ImageButton::setMouseIn(Image * image)
 | 
						|
{
 | 
						|
	if (image)
 | 
						|
	{
 | 
						|
		SAFE_RELEASE(m_pMouseInImage);
 | 
						|
		m_pMouseInImage = image;
 | 
						|
		m_pMouseInImage->retain();
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void ImageButton::setSelected(Image * image)
 | 
						|
{
 | 
						|
	if (image)
 | 
						|
	{
 | 
						|
		SAFE_RELEASE(m_pSelectedImage);
 | 
						|
		m_pSelectedImage = image;
 | 
						|
		m_pSelectedImage->retain();
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void ImageButton::setUnable(Image * image)
 | 
						|
{
 | 
						|
	if (image)
 | 
						|
	{
 | 
						|
		SAFE_RELEASE(m_pUnableImage);
 | 
						|
		m_pUnableImage = image;
 | 
						|
		m_pUnableImage->retain();
 | 
						|
		_resetPosition();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void ImageButton::_resetPosition()
 | 
						|
{
 | 
						|
	if (m_pNormalImage)
 | 
						|
	{
 | 
						|
		// 根据按钮位置和图片宽高设置图片位置居中显示
 | 
						|
		m_pNormalImage->setPos(getX(), getY());
 | 
						|
	}
 | 
						|
	if (m_pMouseInImage)
 | 
						|
	{
 | 
						|
		m_pMouseInImage->setPos(
 | 
						|
			getX() + (getWidth() - m_pMouseInImage->getWidth()) / 2,
 | 
						|
			getY() + (getHeight() - m_pMouseInImage->getHeight()) / 2);
 | 
						|
	}
 | 
						|
	if (m_pSelectedImage)
 | 
						|
	{
 | 
						|
		m_pSelectedImage->setPos(
 | 
						|
			getX() + (getWidth() - m_pSelectedImage->getWidth()) / 2,
 | 
						|
			getY() + (getHeight() - m_pSelectedImage->getHeight()) / 2);
 | 
						|
	}
 | 
						|
	if (m_pUnableImage)
 | 
						|
	{
 | 
						|
		m_pUnableImage->setPos(
 | 
						|
			getX() + (getWidth() - m_pUnableImage->getWidth()) / 2,
 | 
						|
			getY() + (getHeight() - m_pUnableImage->getHeight()) / 2);
 | 
						|
	}
 | 
						|
}
 |