游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5020|回复: 0

新版盖莫游戏引擎字体渲染类

[复制链接]

50

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2010-6-18 13:48:00 | 显示全部楼层 |阅读模式
新版盖莫游戏引擎字体渲染类

在盖莫游戏引擎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();
    }  
};
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-2-5 14:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表