#pragma once

//! @file Utility/UI/Button.h
//! @brief ボタンクラスインクルードファイル

#include "Utility/UI/Control.h"

namespace Utility{ namespace UI {

	//! @class Button
	//! @brief ボタンクラス
	class Button : public UI::Control
	{
	private:
		Mix::RectangleF m_Rect;
		Mix::RectangleF m_BackgroundRect;

		Mix::StringW m_Text;
		Mix::Vector2 m_TextPos;
		Mix::RectangleF m_TextRect;

		Boolean m_bDown;

	public:
		//! @brief コンストラクタ
		Button( void );
		//! @brief デストラクタ
		virtual ~Button( void );

		//! @brief テキストを設定します
		//! @param[in] pText テキスト
		void SetText( const wchar_t* pText );
		//! @brief テキストを取得します
		//! @return テキストを返します
		const wchar_t* GetText( void ) const;

	protected:
		virtual void Update( const Control::UPDATE_EVENT_ARGS& args );
		virtual const Mix::RectangleF& GetRectangle( void ) const;

		virtual void OnMouseEnter( Mix::HID::IMouse* pMouse );
		virtual void OnMouseLeave( Mix::HID::IMouse* pMouse );
		virtual void OnMouseDown( Mix::HID::IMouse* pMouse );
		virtual void OnMouseUp( Mix::HID::IMouse* pMouse );
		virtual void OnDraw( const Control::DRAW_EVENT_ARGS& args );
	};
}}
