示例#1
0
/*******************************************************************************
	概要	:	テキスト描画
	説明	:	ウィンドウバッファに文字列を描画します。
	Include	:	WM.h
	引数	:	WMDO_PP *P_PP		受け渡しパラメータ
	戻り値	:	void
*******************************************************************************/
void	WM::DrawText( WMDO_PP *P_PP )
{
	Color4		(*P_WinBuf)[WINBUF_MAX_WIDTH] = P_PP->P_WinBuf;	//描画先バッファ
	Text*		P_Text		= (Text*)P_PP->P_Object;			//テキストオブジェクト
	const char*	CPc_Text	= (const char*)KStdLib::ConvL2K( P_Text->GetText(), P_PP->Pv_LocalBase );		//文字列
	ui			ui_CharCount;									//文字カウンタ
	ui			ui_StrX = 0, ui_StrY = 0;						//
	Rect		Area		= P_Text->GetArea();				//テキストオブジェクトの領域
	Rect		ValidArea	= Area;								//有効領域
	Color4		TextColor	= { P_PP->Pu4_Option[0] };

	//エラー処理
	if( P_Text->GetText() == NULL )		//文字列が設定されていなければエラー
		return;
	if( TextColor.u1_Alpha == 0 )		//透明なら描画しない。
		return;

	ValidArea.And( P_PP->ChArea );		//有効領域を設定

	//文字列ループ
	for( ui_CharCount = 0; CPc_Text[ui_CharCount] != '\0'; ui_CharCount++ )
	{
		//改行コードならXをリセット、Yをインクリメント
		if( CPc_Text[ui_CharCount] == '\n' )
		{
			ui_StrY++;
			ui_StrX = 0;
			continue;
		}


		//文字描画
		DrawChar( P_WinBuf, CPc_Text[ui_CharCount],
				Area.Msi_Left + ( ui_StrX++ << 3 ), Area.Msi_Top + ( ui_StrY << 4 ),
				TextColor, ValidArea );
	}
}