Magic_Game/Easy2D/Node/Button/ImageButton.cpp

173 lines
2.9 KiB
C++
Raw Normal View History

2017-09-27 17:56:28 +08:00
#include "..\..\easy2d.h"
2017-09-10 23:56:52 +08:00
ImageButton::ImageButton() :
m_pNormalImage(nullptr),
m_pMouseInImage(nullptr),
m_pSelectedImage(nullptr),
m_pUnableImage(nullptr)
{
}
2017-09-18 23:59:08 +08:00
ImageButton::ImageButton(LPCTSTR image) :
ImageButton()
{
setNormal(new Image(image)); // <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ<CCAC><CAB1>ͼƬ
}
2017-09-10 23:56:52 +08:00
ImageButton::ImageButton(Image * image) :
ImageButton()
{
2017-09-12 12:53:34 +08:00
setNormal(image); // <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ<CCAC><CAB1>ͼƬ
2017-09-10 23:56:52 +08:00
}
ImageButton::~ImageButton()
{
// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
SafeRelease(m_pNormalImage);
SafeRelease(m_pMouseInImage);
SafeRelease(m_pSelectedImage);
SafeRelease(m_pUnableImage);
2017-09-10 23:56:52 +08:00
}
2017-09-27 17:56:28 +08:00
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);
}
2017-09-10 23:56:52 +08:00
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();
}
}
2017-09-12 12:53:34 +08:00
void ImageButton::setNormal(Image * image)
2017-09-10 23:56:52 +08:00
{
if (image)
{
// ԭͼƬ<CDBC><C6AC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
SafeRelease(m_pNormalImage);
2017-09-10 23:56:52 +08:00
// <20>޸<EFBFBD>ͼƬ
m_pNormalImage = image;
// <20><>ͼƬ<CDBC><C6AC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
m_pNormalImage->retain();
2017-09-27 17:56:28 +08:00
// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B6A8>ť<EFBFBD><C5A5>С
setSize(m_pNormalImage->getSize());
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ͼƬλ<C6AC><CEBB>
2017-09-27 17:56:28 +08:00
_resetPosition();
2017-09-10 23:56:52 +08:00
}
}
2017-09-12 12:53:34 +08:00
void ImageButton::setMouseIn(Image * image)
2017-09-10 23:56:52 +08:00
{
if (image)
{
SafeRelease(m_pMouseInImage);
2017-09-10 23:56:52 +08:00
m_pMouseInImage = image;
m_pMouseInImage->retain();
2017-09-27 17:56:28 +08:00
_resetPosition();
2017-09-10 23:56:52 +08:00
}
}
2017-09-12 12:53:34 +08:00
void ImageButton::setSelected(Image * image)
2017-09-10 23:56:52 +08:00
{
if (image)
{
SafeRelease(m_pSelectedImage);
2017-09-10 23:56:52 +08:00
m_pSelectedImage = image;
m_pSelectedImage->retain();
2017-09-27 17:56:28 +08:00
_resetPosition();
2017-09-10 23:56:52 +08:00
}
}
2017-09-12 12:53:34 +08:00
void ImageButton::setUnable(Image * image)
2017-09-10 23:56:52 +08:00
{
if (image)
{
SafeRelease(m_pUnableImage);
2017-09-10 23:56:52 +08:00
m_pUnableImage = image;
m_pUnableImage->retain();
2017-09-27 17:56:28 +08:00
_resetPosition();
2017-09-10 23:56:52 +08:00
}
}
2017-09-27 17:56:28 +08:00
void ImageButton::_resetPosition()
2017-09-10 23:56:52 +08:00
{
if (m_pNormalImage)
{
// <20><><EFBFBD>ݰ<EFBFBD>ťλ<C5A5>ú<EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬλ<C6AC>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>ʾ
2017-09-27 17:56:28 +08:00
m_pNormalImage->setPos(getX(), getY());
2017-09-10 23:56:52 +08:00
}
if (m_pMouseInImage)
{
m_pMouseInImage->setPos(
2017-09-27 17:56:28 +08:00
getX() + (getWidth() - m_pMouseInImage->getWidth()) / 2,
getY() + (getHeight() - m_pMouseInImage->getHeight()) / 2);
2017-09-10 23:56:52 +08:00
}
if (m_pSelectedImage)
{
m_pSelectedImage->setPos(
2017-09-27 17:56:28 +08:00
getX() + (getWidth() - m_pSelectedImage->getWidth()) / 2,
getY() + (getHeight() - m_pSelectedImage->getHeight()) / 2);
2017-09-10 23:56:52 +08:00
}
if (m_pUnableImage)
{
m_pUnableImage->setPos(
2017-09-27 17:56:28 +08:00
getX() + (getWidth() - m_pUnableImage->getWidth()) / 2,
getY() + (getHeight() - m_pUnableImage->getHeight()) / 2);
2017-09-10 23:56:52 +08:00
}
}