#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() { // 所有图片的引用计数减一 SafeRelease(m_pNormalImage); SafeRelease(m_pMouseInImage); SafeRelease(m_pSelectedImage); SafeRelease(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) { // 原图片引用计数减一 SafeRelease(m_pNormalImage); // 修改图片 m_pNormalImage = image; // 现图片引用计数加一 m_pNormalImage->retain(); // 根据图片宽高设定按钮大小 setSize(m_pNormalImage->getSize()); // 重新计算图片位置 _resetPosition(); } } void ImageButton::setMouseIn(Image * image) { if (image) { SafeRelease(m_pMouseInImage); m_pMouseInImage = image; m_pMouseInImage->retain(); _resetPosition(); } } void ImageButton::setSelected(Image * image) { if (image) { SafeRelease(m_pSelectedImage); m_pSelectedImage = image; m_pSelectedImage->retain(); _resetPosition(); } } void ImageButton::setUnable(Image * image) { if (image) { SafeRelease(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); } }