首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

SmartGUI 字體系統設計:解耦渲染與核心邏輯

     編輯:關於C語言

設計目標:渲染無關的字體抽象層

SmartGUI 定位為與具體渲染引擎無關的 GUI 庫,因此字體系統需提供統一介面,由外掛實現具體渲染。核心抽象包含三大類:紋理/位圖、字體、基本圖元繪製。本文聚焦字體介面設計。

核心介面:GFont 抽象基類

class GUI_EXPORT GFont : public Object {
public:
    static const int LEFT = -1, TOP = -1, CENTER = 0, RIGHT = 1, BOTTOM = 1;
    virtual ~GFont();
    virtual gstring GetFileName() const = 0;
    virtual int GetFontSize() = 0;
    virtual int GetLineHeight() const = 0;
    virtual int GetWidth(const gstring& text) const = 0;
    virtual int GetHitCharIndex(const gstring& text, float offset) const = 0;
    virtual void Render(const gstring& text, const Recti& area,
                        int halignment = CENTER, int valignment = CENTER,
                        bool oneline = true) = 0;
    DECLARE_OBJECT(GFont)
};

關鍵設計點:

  • GetHitCharIndex:給定水平偏移,返回對應字符索引,支援點擊選中、游標定位等交互。
  • Render 介面:不直接在座標繪製,而是在矩形區域內渲染,支援水平/垂直對齊與多行模式,更貼近實際排版需求。
  • 擴展性預留:當前未包含斜體、下劃線、粗體等屬性,留待後續擴展。

工廠與管理器:創建與生命週期管理

GFontFactory 負責根據字體文件名與大小創建字體實例:

class GUI_EXPORT GFontFactory : public Object {
    virtual ~GFontFactory();
    virtual boost::shared_ptr<GFont> CreateFont(const gstring& font, int size) = 0;
    DECLARE_OBJECT(GFontFactory)
};

GFontManager 為單例,繼承自 Manager<shared_ptr<GFont>> 與 GSerializer,提供:

  • 字體註冊 AddFont(name, fontFile, size, del)
  • 序列化/反序列化(XML),支援配置持久化
  • SetFontFactory 供渲染外掛注入具體工廠實現(標記 apiuse)

設計模式視角

字體系統體現抽象工廠(GFontFactory)、單例(GFontManager)、策略(不同渲染後端實現 GFont)等模式。介面穩定,未來擴展僅需增加介面方法,不影響現有架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved