#ifndef	_TS_FONT16_H_
#define _TS_FONT16_H_


#include "mrc_base.h"


//重新定义的数据类型
//typedef uint16			WCHAR;
//typedef uint16 *		PWSTR;
//typedef const uint16 *	PCWSTR;


//字体绘制样式
#define	TS_FT_NORMAL	0x0000	//常规（倘若用户填0就代表普通绘制）
#define	TS_FT_BLOD		0x0002	//粗体
#define	TS_FT_ELASTIC	0x0004	//斜体
#define TS_FT_AUTONEWLINE	0x0008	//绘制区域内自动换行
#define TS_FT_CRLFNEWLINE	0x0010	//识别 \r \n 自动换行

//字符间距定义
#define TS_FONT_HMARGIN		0	//两字符间水平间距
#define TS_FONT_VMARGIN		2	//两字符间垂直间距


//计算返回值中的行数
#define TS_FONT_GET_LINE(i) (((unsigned int)((i)&0xFFF00000))>>20)

//计算返回值中的off值
#define TS_FONT_GET_OFF(i) ((unsigned int)((i)&0x000FFFFF))


/**
 * 从左往右画字符串,只支持Unicode编码
 * 
 * 输入:
 * pText:    必须是Unicode编码的字符串
 * x,y:       显示文本的左上角x,y坐标
 * r:      定义可视区域(位于可视区域外的部分将不被显示)
 * c:   定义画笔颜色
 * flag: 取值见定义:(可以用或操作符'|'来表示多种样式)
 *
 * 返回:
 * a) 一个32位的int值:
 *					  TS_FONT_GET_LINE(i) - 占用行数(未被忽略的字符均计算在内,半行算作一行)
 *					  TS_FONT_GET_OFF(i) - 第一个被忽略的字符的off值,若off==len,则说明全部字符都参与了运算
 *											   被忽略的字符是指: 此字符开始的之后的所有字符,均不可能在可视区域内.
 * b) -1 失败
 */
int32 tsf_drawTextLeft(uint8 *pText, int16 x, int16 y, mr_screenRectSt r, mr_colourSt c, uint16 flag);


/**
 * 获取多行文本宽高
 * 
 * 输入：
 *		showWidth：待显示文本区域的宽度，将根据该宽度对文本断行
 *
 */
int32 tsf_textWidthHeightLines(uint8 *pcText, uint16 showWidth, 
							   int32 *width, int32 *height, int32 *lines);

/**
 * 获取单行文本宽高
 * 
 * 换行符当空格处理
 */
int32 tsf_textWidthHeight(uint8 *pcText, int32 *width, int32 *height);

/**
 * 获取字库字符尺寸信息
 *
 * 输出：
 * gbWidth：gb字符宽度
 * ascWidth：ascii字符宽度
 * height：字符高度
 */
void tsf_getSizeInfo(int32 *gbWidth, int32 *ascWidth, int32 *height);

/**
 * 加载.tsf字库
 * 
 */
int32 tsf_loadTSF(const char *filePath);

//释放字库
void tsf_release(void);


/**
  字库文件设计：
  后缀：.tsf
  文件头：128字节 
		0~5：TSFONT 
		6~7：预留
		8~11：字库文件总字节数 
		12~15：字库索引表偏移 16~19：字库索引表长度 
		20~23：字库点阵偏移 24~27：字库点阵长度
		28：GB字符宽度 29：ASIC字符宽度 30：字符高度（相同） 31：预留
		40~59：字库名
		60~127：预留
 */
#endif