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);	// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ʱ<CCAC><CAB1>ͼƬ
 | |||
|  | } | |||
|  | 
 | |||
|  | ImageButton::~ImageButton() | |||
|  | { | |||
|  | 	// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | |||
|  | 	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) | |||
|  | 	{ | |||
|  | 		// ԭͼƬ<CDBC><C6AC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | |||
|  | 		SAFE_RELEASE(m_pNormalImage); | |||
|  | 		// <20><EFBFBD>ͼƬ
 | |||
|  | 		m_pNormalImage = image; | |||
|  | 		// <20><>ͼƬ<CDBC><C6AC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | |||
|  | 		m_pNormalImage->retain(); | |||
|  | 		// <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ͼƬλ<C6AC><CEBB>
 | |||
|  | 		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) | |||
|  | 	{ | |||
|  | 		// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD>趨<EFBFBD><E8B6A8>ť<EFBFBD><C5A5>С
 | |||
|  | 		m_nWidth = m_pNormalImage->getWidth(); | |||
|  | 		m_nHeight = m_pNormalImage->getHeight(); | |||
|  | 		// <20><><EFBFBD>ݰ<EFBFBD>ťλ<C5A5>ú<EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬλ<C6AC>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>ʾ
 | |||
|  | 		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); | |||
|  | 	} | |||
|  | } |