|
|
新版盖莫游戏引擎字体渲染类
在盖莫游戏引擎2.1.4中将使用新的字体渲染引擎
以方便UI设计
其接口如下:
////////////////////////////////////////////////////////////
/// 字体渲染描述类
////////////////////////////////////////////////////////////
class G_DLL_API TextDesc : public RenderDesc_Rect, NonCopyable
{
public:
///////////////////////////////////////////////////////
/// 构造字体渲染描述类
///////////////////////////////////////////////////////
TextDesc();
TextDesc(const engine_string& font,
int pixelheight,
float xffset,
float yoffset,
float margin,
const Color& color);
///////////////////////////////////////////////////////
/// 析构渲染描述
///////////////////////////////////////////////////////
~TextDesc();
public:
///////////////////////////////////////////////////////
/// 设置,获取默认字体文件
///////////////////////////////////////////////////////
static void SetDefaultFont(const engine_string& font)
{
default_font_file = font;
}
static engine_string GetDefaultFont(){return default_font_file;}
public:
///////////////////////////////////////////////////////
/// 在给定矩形内渲染文字
///////////////////////////////////////////////////////
virtual void Render(const Rectf& area)const;
///////////////////////////////////////////////////////
/// 获取,设置当前字体文件名
///////////////////////////////////////////////////////
engine_string GetFileName()const{return filename_;}
TextDesc& SetFileName(const engine_string& filename){filename_ = filename;return *this;}
///////////////////////////////////////////////////////
/// 获取,设置给定字体的Point Size值
///////////////////////////////////////////////////////
int GetPointSize()const{return pixelheight_;}
TextDesc& SetPointSize(int pointsize){pixelheight_ = pointsize;return *this;}
///////////////////////////////////////////////////////
/// 获取,设置给定字体对齐偏移
///////////////////////////////////////////////////////
float GetXOffset()const{return xoffset_;}
TextDesc& SetXOffset(float offset){xoffset_ = offset;return *this;}
float GetYOffset()const{return yoffset_;}
TextDesc& SetYOffset(float offset){yoffset_ = offset;return *this;}
///////////////////////////////////////////////////////
/// 设置当前渲染文本
///////////////////////////////////////////////////////
TextDesc& SetText(const engine_wstring& text){text_ = text;return *this;}
///////////////////////////////////////////////////////
/// 获取当前渲染文本大小
///////////////////////////////////////////////////////
Vector2f GetTextSize()const;
///////////////////////////////////////////////////////
/// 获取当前渲染字体渲染文本高度
///////////////////////////////////////////////////////
float GetLineHeight()const;
///////////////////////////////////////////////////////
/// 以单行,多行方式渲染(默认:单行)
///////////////////////////////////////////////////////
TextDesc& RenderAsMultiLine(){ismultiline_ = true;return *this;}
TextDesc& RenderAsSingleLine(){ismultiline_ = false;return *this;}
///////////////////////////////////////////////////////
/// 获取,设置字体颜色
///////////////////////////////////////////////////////
Color GetColor()const{return color_;}
TextDesc& SetColor(const Color& color){color_ = color;return *this;}
///////////////////////////////////////////////////////
/// 设置文本水平对齐方式(左对齐:-1,中心对齐:0,右对齐:1)
///////////////////////////////////////////////////////
TextDesc& SetHorizontalAlignment(int horizontal_alignment);
///////////////////////////////////////////////////////
/// 设置文本竖直对齐方式(上对齐:-1,中心对齐:0,下对齐:1)
///////////////////////////////////////////////////////
TextDesc& SetVerticalAlignment(int vertical_alignment);
///////////////////////////////////////////////////////
/// 获取,设置文本Margin值
///////////////////////////////////////////////////////
float GetMargin()const{return margin_;}
TextDesc& SetMargin(float margin){margin_ = margin;return *this;}
///////////////////////////////////////////////////////
/// 根据给定文本内容和获取偏移获取字索引
///////////////////////////////////////////////////////
size_t GetHitCharacterIndex(const engine_wstring& str, float offset) const;
///////////////////////////////////////////////////////
/// 重新载入字体信息
///////////////////////////////////////////////////////
void ReloadTextRenderer();
private:
//! 字体文件
engine_string filename_;
//! 字体像素高度
int pixelheight_;
//! 文本相对于默认位置的偏移
float xoffset_;
float yoffset_;
//! 字体边空白值
float margin_;
//! 字体颜色
Color color_;
//! 渲染文本
engine_wstring text_;
//! 是否启用多行渲染
bool ismultiline_;
//! 字体对齐方式
int horizontal_alignment_;
int vertical_alignment_;
//! 字体渲染指针
TextRenderer* text_renderer_;
//! 默认字体文件
static engine_string default_font_file;
public:
///////////////////////////////////////////////////////
/// 序列化函数
///////////////////////////////////////////////////////
template<typename Archive>
void Serialize(Archive& archive)
{
RenderDesc_Rect::Serialize(archive);
archive &
TAGGED_OBJECT(filename)&
TAGGED_OBJECT(pixelheight)&
TAGGED_OBJECT(xoffset)&
TAGGED_OBJECT(yoffset)&
TAGGED_OBJECT(margin)&
TAGGED_OBJECT(color)&
TAGGED_OBJECT(horizontal_alignment)&
TAGGED_OBJECT(vertical_alignment);
ReloadTextRenderer();
}
}; |
|