#pragma once

//! @file Mix/Graphics/Utility/IFont.h
//! @brief フォントインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace Graphics{ namespace Utility{

	//! @class IFont
	//! @brief フォントインターフェース
	class IFont : public Mix::Reference
	{
	public:
		//! @enum EFFECTS
		//! @brief 効果列挙定数
		enum EFFECTS
		{
			EF_ITALIC		= 0x00000001,	//!< 斜体
			EF_BORDERING	= 0x00000002,	//!< 縁取り
		};

		//! @struct GLYPH
		//! @brief グリフ構造体
		struct GLYPH
		{
			const void* pImg;	//!< イメージポインタ( このポインタは解放してはいけません )
			UInt16 cellWidth;	//!< セルの幅
			UInt16 cellHeight;	//!< セルの高さ
			Int16 x;			//!< Ｘ座標 ( セルの左上を基点としたローカル座標 )
			Int16 y;			//!< Ｙ座標 ( セルの左上を基点としたローカル座標 )
			UInt16 width;		//!< 幅
			UInt16 height;		//!< 高さ
		};

	protected:
		//! @brief デストラクタ
		virtual ~IFont( void ){}

	public:
		//! @brief フォントグリフを取得します
		//! @param[in] code キャラクターコード
		//! @param[out] glyph グリフを渡す Mix::Graphics::Utility::IFont::GLYPH 構造体
		//! @return 成功した場合は True を返します
		virtual Boolean GetGlyph( wchar_t code, Mix::Graphics::Utility::IFont::GLYPH& glyph ) = 0;
		//! @brief 効果を取得します
		//! @return 効果を表す Mix::Graphics::Utility::IFont::EFFECTS 列挙定数の組み合わせ
		virtual UInt32 GetEffects( void ) const = 0;
		//! @brief フォントのサイズを取得します
		//! @return サイズを返します
		virtual UInt32 GetHeight( void ) const = 0;
		//! @brief フォントの太さを取得します
		//! @return 太さを返します
		virtual UInt32 GetWeight( void ) const = 0;
		//! @brief 縁のサイズを取得します
		//! @return サイズを返します
		virtual UInt32 GetBorderSize( void ) const = 0;
	};

}}}
