
/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

	FILE	: Graphic_Text.h

+ ------ Explanation of file --------------------------------------------------------------------------

	ゲームプログラミング技術集より引用、改変
	http://www.sousakuba.com/Programming/d3d_text.html

+ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

#ifndef _Graphic_Text_H_
#define _Graphic_Text_H_

#include "Image2D.h"

// 頂点バッファのフォーマット定義
#define GTEXT_VERTEX_FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)

// 頂点バッファ構造体
typedef struct
{   D3DVECTOR	pos;		//頂点の位置
	float		rhw;		//1をいれとく
	D3DCOLOR    color;		//diffuse	ポリゴンの色。画面の部分/全体フェードとかテクスチャ画像のアルファ値を制御するのに使える
	FLOAT       tu;			//テクスチャの座標
	FLOAT       tv;			//テクスチャの座標

} GTEXT_VERTEX;

struct IRECT
{
	int left;
	int top;
	int right;
	int bottom;

	IRECT(){ left = top = right = bottom = 0; }
	IRECT(int l, int t, int r, int b)
	{
		left = l;
		top = t;
		right = r;
		bottom = b;
	}
	int Wid() {return right - left;}
	int Hgt() {return bottom - top;}
};

//TextGraphicとTextuteTextLineが扱う１文字分の画像データ
struct TxtureChar
{
	LPDIRECT3DTEXTURE9	m_txtr;	//テクスチャ画像
	int					m_wid;	//文字幅
	Image2D*			m_pImage;
};

//行揃え
enum TextAlign
{
	AlignLeft,
	AlignRight,
	AlignCenter
};

//TextGraphicが扱う1行分のテキスト
class TextuteTextLine : public vector<TxtureChar>
{
public:
	TextAlign	m_align;	//行揃え
	int			m_lineWidth;//１行の幅(ピクセル)

	TextuteTextLine();
	~TextuteTextLine();
};

//Graphic機能が扱うテキストデータ
class TextGraphic
{
	vector< TextuteTextLine* > m_lineAry;//行ごとにデータを持ちます。

	IRECT	m_rect;			//描画範囲
	int		m_fontsize;		//フォントサイズ
	DWORD	m_alphaColor;	//アルファ色(描画するポリゴンのDiffuse色)

public:

	TextGraphic();
	virtual ~TextGraphic();

	//テキスト画像を作成
	void create(char* txt, int left, int top, int right, int bottom, int size, DWORD color = 0x00ffffff);
	
	//行そろえの指定(全行)
	void SetTextAlign(TextAlign align);

	//行そろえの指定(任意の複数行)
	void SetTextAlign(
		unsigned int lineIdx,	//開始位置
		unsigned int lineIdxTo,	//終了位置
		TextAlign align);

	//テキストのアルファ値(描画するポリゴンのDiffuse色)変更
	void SetTextAlpha(DWORD alpha);

	void Release();
	void draw();
};

#endif /* _Graphic_Text_H_ */