青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿
終于把SmartGUi庫(kù)寫了一半,基本的架子算是搭起來(lái)了
現(xiàn)在我打算編寫博客邊做開發(fā)
雖然說(shuō)之前也做過(guò)GUI,但是這次還是想把這個(gè)做好點(diǎn)(要是一不小心和CEGUI或者M(jìn)YGUI起名那就不錯(cuò)了哈哈)

先說(shuō)GUI字體接口吧
需要說(shuō)在的 這個(gè)庫(kù)的定位是與具體渲染機(jī)器無(wú)關(guān)
那么我們就需要一個(gè)與具體渲染有關(guān)的插件了

很顯然,對(duì)于GUI來(lái)說(shuō)主要有3個(gè)部分
1.紋理/位圖
2.字體
3.基本圖元的繪制
當(dāng)然還有其他...

下面這是基本字體的抽象基類
CORE_BEGIN_NAMESPACE

class GUI_EXPORT GFont : public Object
{
public:
    
const static int LEFT = -1;
    
const static int TOP = -1;
    
const static int CENTER = 0;
    
const static int RIGHT = 1;
    
const static int BOTTOM = 1;
public:
    
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)
};

CORE_END_NAMESPACE

函數(shù)功能基本都看的懂
需要說(shuō)明的是
1.GetHitCharIndex是本文給定偏移對(duì)于的字符標(biāo)號(hào)
2.這里并沒有提供一個(gè)渲染給定文本在給定位置的功能,反而提供了一個(gè)更為貼心的Render渲染文本于給定矩形-可以指定對(duì)其方式和是否為多行渲染
3.這里還沒有提供一些更為復(fù)雜的字體性質(zhì),比如斜體,下劃線,粗體等等

一個(gè)相關(guān)的字體工廠對(duì)象如下:
CORE_BEGIN_NAMESPACE

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

CORE_END_NAMESPACE
這個(gè)沒什么說(shuō)的,根據(jù)字體文件和字體大小生成字體指針一枚
還有一個(gè)相關(guān)對(duì)象是FontManager
接口如下:
CORE_BEGIN_NAMESPACE

class GUI_EXPORT GFontManager:
public Manager<boost::shared_ptr<GFont> >,
public GSerializer
{
public:
    
bool AddFont(const gstring& name,const gstring& font,int size,bool del = false);
    gstring GetSerializerTag(){
return "fontlist";}
    
bool Load(boost::shared_ptr<XMLNode> node);
    
bool Save(boost::shared_ptr<XMLDocument> doc,boost::shared_ptr<XMLNode>& node);
apiuse
    
void SetFontFactory(boost::shared_ptr<GFontFactory> factory);
private:
    boost::shared_ptr
<GFontFactory> factory;
    DEFINE_SINGLETON(GFontManager)
};

CORE_END_NAMESPACE

1.顯然字體管理器是一個(gè)單件
2.函數(shù)SetFontFactory()是提供給插件設(shè)置具體的字體工廠的,所以這里有一個(gè)標(biāo)記apiuse
3.函數(shù)GetSerializerTag,Load,Save是從對(duì)那象GSerializer繼承來(lái)的,目的就是提供字體的序列化和反序列化動(dòng)作-我們的GUI是要盡可能做到自動(dòng)化的

在SmartGUI中,字體系統(tǒng)基本上就由這三個(gè)對(duì)象,以后樣子改動(dòng)不會(huì)太大了,也許只會(huì)增加函數(shù)接口而已

另外這個(gè)字體系統(tǒng)從設(shè)計(jì)模式的角度看是很容易理解的

----------------------------------------------------------標(biāo)記
接口總比實(shí)現(xiàn)重要些.

posted on 2011-06-08 19:39 ccsdu2009 閱讀(2231) 評(píng)論(1)  編輯 收藏 引用 所屬分類: Game引擎
Comments
  • # re: SmartGUI庫(kù)字體接口
    陳梓瀚(vczh)
    Posted @ 2011-06-09 10:26
    你最后會(huì)發(fā)現(xiàn)一個(gè)真正的字體類是要負(fù)責(zé)繪圖的,因?yàn)橛螒蚶锩娴淖煮w跟windows的字體并不總是一樣的,因?yàn)槟憧梢赃x擇用預(yù)先做好的圖片來(lái)做文字什么的。  回復(fù)  更多評(píng)論   
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            蜜臀av国产精品久久久久| 另类人畜视频在线| 国产精品成av人在线视午夜片| 国产午夜亚洲精品羞羞网站| 一区二区三区四区精品| 欧美激情按摩| 久热这里只精品99re8久| 国产亚洲一本大道中文在线| 亚洲欧美自拍偷拍| 一本大道久久a久久精品综合| 欧美成人午夜激情在线| 国产亚洲精品综合一区91| 亚洲一区国产精品| 午夜精彩国产免费不卡不顿大片| 欧美在线免费看| 日韩视频免费观看高清在线视频 | 国产精品区一区| 一本色道久久综合亚洲91| 亚洲第一精品夜夜躁人人躁| 久久精品视频免费播放| 国产深夜精品福利| 久久精品99无色码中文字幕 | 日韩视频亚洲视频| 欧美福利电影在线观看| 亚洲人成77777在线观看网| 欧美高清在线一区| 欧美va亚洲va日韩∨a综合色| 1024成人| 欧美大片一区二区| 猫咪成人在线观看| 亚洲黄色免费电影| 亚洲高清网站| 欧美日韩999| 亚洲午夜精品一区二区| 在线视频欧美一区| 国产精品欧美久久久久无广告| 亚洲欧美一区二区三区久久 | 国产精品视频九色porn| 欧美一级大片在线观看| 欧美一区=区| 国内久久婷婷综合| 免费成人黄色| 欧美成人激情视频免费观看| 亚洲精选在线观看| 亚洲精品在线视频| 欧美视频网址| 欧美在线视频一区二区三区| 久久成人免费日本黄色| 在线免费观看视频一区| 亚洲高清一区二| 欧美日韩综合在线| 欧美一区二区三区男人的天堂| 欧美在线播放| 亚洲丁香婷深爱综合| 亚洲欧洲三级电影| 国产精品日韩一区二区三区| 久久久久久亚洲精品杨幂换脸| 久久综合久色欧美综合狠狠| 亚洲激情六月丁香| 99国产精品久久久久老师| 国产精品亚洲不卡a| 久久综合伊人77777| 欧美激情一区二区三区| 亚洲欧美国产三级| 久久精品国产久精国产一老狼| 亚洲破处大片| 中日韩在线视频| 国产主播一区二区三区四区| 亚洲国产精品久久精品怡红院| 欧美视频在线观看视频极品| 久久久精品2019中文字幕神马| 你懂的国产精品永久在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美伊久线香蕉线新在线| 最新日韩在线| 亚洲欧美成aⅴ人在线观看| 亚洲成人在线| 亚洲天堂av图片| 亚洲国产精品www| 亚洲天堂av在线免费| 在线欧美日韩| 亚洲图片你懂的| 亚洲第一精品在线| 亚洲深夜av| 最近看过的日韩成人| 亚洲综合精品| 亚洲精品一区二区三区在线观看| 亚洲欧美日韩国产综合| 亚洲激情六月丁香| 午夜亚洲福利| 在线视频一区二区| 久久婷婷亚洲| 欧美一区二区三区的| 欧美激情按摩在线| 久久视频一区| 国产精品久久国产愉拍| 欧美大胆成人| 国产亚洲成av人片在线观看桃| 亚洲精品视频免费观看| 狠狠色综合色综合网络| 国产精品99久久久久久久久| 亚洲欧洲日本一区二区三区| 欧美一区二区三区四区高清| 亚洲视频一起| 欧美成人影音| 麻豆精品在线视频| 国产精品一区二区在线观看网站 | 久久资源在线| 国产精品一级| 日韩一区二区精品葵司在线| 最新亚洲电影| 久久久久五月天| 欧美综合国产| 欧美手机在线视频| 91久久在线视频| 亚洲国产高清一区| 欧美在线观看视频一区二区| 亚洲在线视频网站| 欧美女同在线视频| 欧美激情a∨在线视频播放| 国产一区二区精品在线观看| 亚洲深夜福利在线| 一区二区三区四区蜜桃| 欧美成人免费小视频| 免费成人av资源网| 韩曰欧美视频免费观看| 午夜宅男久久久| 欧美一区午夜精品| 国产精品美女一区二区| 一区二区三区 在线观看视| 亚洲最新色图| 欧美精品粉嫩高潮一区二区| 欧美国产日韩a欧美在线观看| 狠狠色噜噜狠狠狠狠色吗综合| 香蕉久久夜色精品国产| 性做久久久久久| 国产精品自拍网站| 亚洲在线成人精品| 亚洲欧美日韩中文播放| 国产精品国产三级国产aⅴ无密码| 亚洲日本欧美日韩高观看| 亚洲伦理自拍| 欧美精品一区在线发布| 亚洲人成人一区二区在线观看| 亚洲精品人人| 欧美激情1区2区| 亚洲人成毛片在线播放女女| 一本大道久久a久久精品综合| 欧美精品七区| 亚洲美女黄色片| 亚洲网站啪啪| 国产精品久久久久久久久久免费看 | 国产综合网站| 久久精品日韩欧美| 女女同性女同一区二区三区91| 亚洲国产高清视频| 欧美大片va欧美在线播放| 最近看过的日韩成人| 一区二区三区视频在线观看| 欧美亚洲第一页| 午夜精品视频一区| 久久香蕉国产线看观看网| 影音先锋在线一区| 欧美成人精品1314www| 亚洲精品视频在线播放| 亚洲资源在线观看| 国产婷婷色一区二区三区四区| 久久精品系列| 亚洲高清在线| 亚洲一区久久| 国产区在线观看成人精品| 久久久久久久综合日本| 亚洲高清资源| 亚洲欧美另类在线观看| 国产中文一区二区| 欧美成人免费全部| 中文欧美在线视频| 久久久久久久久久码影片| 亚洲国产导航| 欧美日韩精品免费在线观看视频 | 亚洲国产一区二区精品专区| 欧美精品成人| 亚洲女性裸体视频| 欧美va日韩va| 亚洲一区二区三区在线视频| 国产一区二区福利| 欧美高清视频| 亚洲欧美激情一区二区| 女主播福利一区| 亚洲一区二区三区视频| 韩国久久久久| 欧美日韩网址| 久久精品视频播放| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久久久欧美| 日韩亚洲不卡在线| 国产日韩在线看片| 欧美成人在线网站| 亚洲欧美激情视频| 亚洲国产精品日韩|