/*!
 	@file
 	@brief	フォントを管理しているベースクラス
 */
#ifndef CFontDriver_h
#define CFontDriver_h

#include"../../../Setup/CompileMode.h"
#include"../../../Auxiliary/mstring.h"
#include"../../../template/Mathematics.h"
#include<boost/smart_ptr.hpp>

#include"../../CFont.h"
#include"CSurfaceBuffer.h"

namespace Maid
{
	/*!
	 	@brief	フォントを管理しているベースクラス
	\n			このクラスを継承して各種使えるようにします
	 */
	class IFontDriver
	{
	public:
		virtual ~IFontDriver(){}	//!<	デストラクタ

		//! フォントの作成
		/*!
		 	@param	FontNo		[i ]	作成するフォント番号 0<=FontNo<=GetFontNum() であること（０は必ず作成できる)
		 	@param	FontW		[i ]	フォント１文字の横幅(Pixel単位)
		 	@param	FontH		[i ]	フォント１文字の縦幅(Pixel単位)
		 	@param	IsAntialias	[i ]	アンチエイリアスをかけるか？
		 	@param	IsBold		[i ]	太字にするか？
		 	@param	IsItalic	[i ]	イタリックにするか？
		 
		 	@return	作成されたフォント
		 */
		virtual SPFONT Create( int FontNo, int FontW, int FontH, bool IsAntialias, bool IsBold, bool IsItalic ) const=0;


		//! フォントの作成
		/*!
		 	@param	FontName	[i ]	作成するフォント名
		 	@param	FontW		[i ]	フォント１文字の横幅(Pixel単位)
		 	@param	FontH		[i ]	フォント１文字の縦幅(Pixel単位)
		 	@param	IsAntialias	[i ]	アンチエイリアスをかけるか？
		 	@param	IsBold		[i ]	太字にするか？
		 	@param	IsItalic	[i ]	イタリックにするか？
		 
		 	@return	作成されたフォント
		 */
		virtual SPFONT Create( const mstring& FontName, int FontW, int FontH, bool IsAntialias, bool IsBold, bool IsItalic ) const=0;

		//! 全部でいくつのフォントがあるか取得する
		/*!
		 	@return	フォントのある数
		 */
		virtual int GetFontNum() const=0;

		//! フォント名の取得
		/*!
		 	@param	FontNo	[i ]	調べたいフォント番号
		 
		 	@return	フォント名
		 */
		virtual mstring GetFontName( int FontNo ) const=0;


		//! １文字ラスタライズする
		/*!
		 	@param	pFont		[i ]	ラスタライズするフォント
		 	@param	FontCode	[i ]	ラスタライズする文字コード(mstring)
		 */
		virtual SPSURFACEBUFFER Rasterize( const SPFONT& pFont, unt32 FontCode ) const=0;

	};
	typedef boost::shared_ptr<IFontDriver> SPFONTDRIVER;
}

#endif
