亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? minigui 體系結構之三邏輯字體以及多字體和多字符集實現.htm

?? minigui--面向實時嵌入式系統的圖形用戶界面。此文檔介紹了miniguide體系結構。
?? HTM
?? 第 1 頁 / 共 4 頁
字號:
 560     }
 561
 562     return -1;
 563 }
 564
 565 #ifndef _LITE_VERSION
 566 static unsigned short euckr_conv_to_uc16 (const unsigned char* mchar, int len)
 567 {
 568     return '?';
 569 }
 570 #endif
 571
 572 static CHARSETOPS CharsetOps_euckr = {
 573     8836,
 574     2,
 575     2,
 576     FONT_CHARSET_EUCKR,
 577     {'\xA1', '\xA1'},
 578     euckr_len_first_char,
 579     euckr_char_offset,
 580     db_nr_chars_in_str,
 581     euckr_is_this_charset,
 582     euckr_len_first_substr,
 583     db_get_next_word,
 584     euckr_pos_first_char,
 585 #ifndef _LITE_VERSION
 586     euckr_conv_to_uc16
 587 #endif
 588 };
 589 /************************* End of EUCKR *************************************/
 590 #endif  /* _EUCKR_SUPPORT */
</PRE></TD></TR></TBODY></TABLE><A id=4 name=4></A>
      <P><STRONG class=subhead>4 MiniGUI 中的字體支持</STRONG></P><STRONG>4.1 
      設備字體</STRONG> 
      <P>在 MiniGUI 中,設備字體定義如下(include/gdi.h):</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE> 319 struct _DEVFONT
 320 {
 321     char             name [LEN_DEVFONT_NAME + 1];
 322     DWORD            style;
 323     FONTOPS*         font_ops;
 324     CHARSETOPS*      charset_ops;
 325     struct _DEVFONT* sbc_next;
 326     struct _DEVFONT* mbc_next;
 327     void*            data;
 328 };
</PRE></TD></TR></TBODY></TABLE>
      <P>其中各字段說明如下:</P>
      <UL class=noindent>
        <LI>name:該設備字體的名稱。MiniGUI 中設備字體的名稱格式如下:<BR></LI></UL>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>&lt;type&gt;-&lt;name&gt;-&lt;style&gt;-&lt;width&gt;-&lt;height&gt;-&lt;charset1[,charset2]&gt;
</PRE></TD></TR></TBODY></TABLE><BR>其中每個域的含義如下:<BR>
      <UL>
        <LI>type:字體類型,比如RBF(MiniGUI 定義的等寬字體格式)、VBF(MiniGUI 
        定義的變寬字體格式)、TTF(TrueType 字體)等等。 
        <LI>name:名稱,比如 Song、Hei、Times 等等。 
        <LI>style:該字體的樣式,比如黑體、斜體等等。 
        <LI>width:該字體的寬度,對矢量字體來說,可取 0。 
        <LI>height:該字體的高度,對矢量字體來說,可取 0。 
        <LI>charset1, charset2:該字體適用的字符集名稱。 </LI></UL>
      <UL class=noindent>
        <LI>style:字體樣式。 
        <LI>font_ops:設備字體對應的字體操作集。 
        <LI>charset_ops:設備字體對應的字符集操作集。 
        <LI>sbc_next、mbc_next:內部使用的鏈表維護字段。 
        <LI>data:該設備字體相關的內部數據。 </LI></UL>
      <P>在 MiniGUI 啟動時,將根據 MiniGUI.cfg 
      文件中的定義建立兩個設備字體鏈表,分別為單字節設備字體鏈和多字節設備字體鏈。這兩個鏈表將由 CreateLogFont 
      使用,通過查找和匹配,建立對應的邏輯字體。</P><STRONG>4.2 邏輯字體</STRONG> 
      <P>邏輯字體的定義如下(include/gdi.h):</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE> 228 typedef struct _LOGFONT {
 229     char type [LEN_FONT_NAME + 1];
 230     char family [LEN_FONT_NAME + 1];
 231     char charset [LEN_FONT_NAME + 1];
 232     DWORD style;
 233     int size;
 234     int rotation;
 235     DEVFONT* sbc_devfont;
 236     DEVFONT* mbc_devfont;
 237 } LOGFONT;
 238 typedef LOGFONT*    PLOGFONT;
</PRE></TD></TR></TBODY></TABLE>
      <P>顯然,每個邏輯字體由最匹配該字體要求(大小、字符集、樣式等)的兩個設備字體(sbc_devfont和 
      mbc_devfong)組成,分別用來處理多字節字符串中的單字節字符和多字節字符。其中單字節設備字體是必不可少的。</P>
      <P>邏輯字體的匹配算法可參見 src/gdi/logfont.c 和src/font/devfont.c 
      文件。限于篇幅,不再贅述。</P><STRONG>4.3 設備字體操作集</STRONG> 
      <P>和字符集操作集一樣,MiniGUI 
      中的設備字體操作集針對每種設備字體類型而定義,包括對這種設備字體的各種操作函數(include/gdi.h):</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE> 276 typedef struct _FONTOPS
 277 {
 278     int (*get_char_width) (LOGFONT* logfont, DEVFONT* devfont,
 279             const unsigned char* mchar, int len);
 280     int (*get_str_width) (LOGFONT* logfont, DEVFONT* devfont,
 281             const unsigned char* mstr, int n, int cExtra);
 282     int (*get_ave_width) (LOGFONT* logfont, DEVFONT* devfont);
 283     int (*get_max_width) (LOGFONT* logfont, DEVFONT* devfont);
 284     int (*get_font_height) (LOGFONT* logfont, DEVFONT* devfont);
 285     int (*get_font_size) (LOGFONT* logfont, DEVFONT* devfont, int expect);
 286     int (*get_font_ascent) (LOGFONT* logfont, DEVFONT* devfont);
 287     int (*get_font_descent) (LOGFONT* logfont, DEVFONT* devfont);
 288
 289 /* TODO */
 290 //    int (*get_font_ABC) (LOGFONT* logfont);
 291
 292     size_t (*char_bitmap_size) (LOGFONT* logfont, DEVFONT* devfont,
 293             const unsigned char* mchar, int len);
 294     size_t (*max_bitmap_size) (LOGFONT* logfont, DEVFONT* devfont);
 295     const void* (*get_char_bitmap) (LOGFONT* logfont, DEVFONT* devfont,
 296             const unsigned char* mchar, int len);
 297
 298     const void* (*get_char_pixmap) (LOGFONT* logfont, DEVFONT* devfont,
 299             const unsigned char* mchar, int len, int* pitch);
 300          /* Can be NULL */
 301
 302     void (*start_str_output) (LOGFONT* logfont, DEVFONT* devfont);
 303          /* Can be NULL */
 304     int (*get_char_bbox) (LOGFONT* logfont, DEVFONT* devfont,
 305             const unsigned char* mchar, int len,
 306             int* px, int* py, int* pwidth, int* pheight);
 307          /* Can be NULL */
 308     void (*get_char_advance) (LOGFONT* logfont, DEVFONT* devfont,
 309             int* px, int* py);
 310          /* Can be NULL */
 311
 312     DEVFONT* (*new_instance) (LOGFONT* logfont, DEVFONT* devfont,
 313             BOOL need_sbc_font);
 314          /* Can be NULL */
 315     void (*delete_instance) (DEVFONT* devfont);
 316          /* Can be NULL */
 317 } FONTOPS;
</PRE></TD></TR></TBODY></TABLE>
      <P>比如,get_char_width 用來獲得某個字符的寬度,而 get_char_bitmap 用來獲得某個字符的位圖信息等等。</P>
      <P>在 src/font/rawbitmap.c 和 src/font/varbitmap.c 文件中分別定義了對 RBF 和 VBF 
      兩種字體的操作函數,比如對變寬光柵字體來講(VBF),其 get_char_bitmap 
      定義如下(src/font/rawbitmap.c):</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE> 155 static const void* get_char_bitmap (LOGFONT* logfont, DEVFONT* devfont,
 156             const unsigned char* mchar, int len)
 157 {
 158     int offset;
 159     unsigned char eff_char = *mchar;
 160     VBFINFO* vbf_info = VARFONT_INFO_P (devfont);
 161
 162     if (*mchar &lt; vbf_info-&gt;first_char || *mchar &gt; vbf_info-&gt;last_char)
 163         eff_char = vbf_info-&gt;def_char;
 164
 165     if (vbf_info-&gt;offset == NULL)
 166         offset = (((size_t)vbf_info-&gt;max_width + 7) &gt;&gt; 3) * vbf_info-&gt;height
 167                     * (eff_char - vbf_info-&gt;first_char);
 168     else
 169         offset = vbf_info-&gt;offset [eff_char - vbf_info-&gt;first_char];
 170
 171     return vbf_info-&gt;bits + offset;
 172 }
</PRE></TD></TR></TBODY></TABLE>
      <P>其中,VARFONT_INFO_P 是一個宏,用來從設備字體的 data 字段中獲得 VBFINFO 
      結構的指針。有了這個指針之后,該函數計算字符位圖的偏移量最后返回字符的位圖。</P><STRONG>4.4 新設備字體的實現舉例</STRONG> 
      <P>這里以 Adobe Type1 字體的實現為例,說明如何在 MiniGUI 中實現一種新的設備字體。MiniGUI 借用了 T1Lib 
      函數庫實現了對 Type1 字體的支持。</P>
      <P><B><I>4.4.1 Type1 字體簡介</I></B></P>
      <P>Type1 矢量字體1格式由 Adobe 公司設計,并被該公司的ps標準支持。因此,它在Linux下也被支持得很好。它被 X和 
      ghostscript支持。一個典型的Type1字體包括一個afm(adobe font metric) 度量文件,一個外形文件,通常是一個pfb 
      ( printer font binary) 或者 pfa (printer font ascii) 
      文件,外形文件包括所有的輪廓,而度量文件包含了所有的度量。比如緊排,連字等信息。</P>
      <P><B><I>4.4.2 T1Lib 簡介</I></B></P>
      <P>T1Lib 是用 C 語言實現的一個庫,它可以從 Adobe Type 1 字體生成位圖。它可以使用X11R5 
      或者更新版本提供的光柵化工具的很多功能,但避免了其已知的缺點。當然,T1Lib完全可以在沒有 X11 的環境下工作。T1Lib 
      可以被編譯成靜態或者動態庫,從而可以方便地連接。</P>
      <P>這里是T1Lib 的一些特性:</P>
      <UL>
        <LI>字體通過運行時讀取字庫而被T1lib得知。即它是靈活可配置的。當然,它只支持Type 1字體。 
        <LI>字符或字符串只在需要時才被光柵化。 
        <LI>對字符串光柵化時支持字符間緊排,并且可以利用一個AFM文件提供緊排信息,如果沒有這個文件,T1Lib可以直接生成這些信息,也可以將其輸出到一個文件以備后用。 

        <LI>支持連字,連字是一個好的字體模型會提供的功能,目前,只有TEX和與其相關的軟件包對連字支持得比較好。連字信息也包含在AFM文件里。 
        <LI>支持旋轉和各種仿射變換。支持字體擴展,傾斜。 
        <LI>可以動態載入新的解碼矢量。用新的解碼矢量解析字體。 
        <LI>支持5灰度的低分辨率和17灰度的高分辨率的反走樣。 
        <LI>字符串可以被添加下劃線,上劃線或者橫線。 </LI></UL>
      <P><B><I>4.4.3 Adobe Type1 字體支持的實現</I></B></P>
      <P>在 MiniGUI 設備字體定義中,有一個 data 字段可用來保存設備字體相關的數據結構。對 Type1 字體來講,我們使用 
      TYPE1INFO和TYPE1INSTANCEINFO兩個數據結構來存儲這種設備字體的類信息和實例信息。</P>
      <P>1) TYPE1INFO和TYPE1INSTANCEINFO 結構</P>
      <P>這兩個結構的定義如下(src/font/type1.h):</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>  22 typedef struct tagTYPE1GLYPHINFO {
  23     int font_id;
  24     //BBox      font_bbox;
  25     //int       ave_width;
  26     BOOL valid;
  27 } TYPE1INFO, *PTYPE1INFO;
  28
  29 typedef struct tagTYPE1INSTANCEINFO {
  30     PTYPE1INFO  type1_info;
  31     int         rotation;/*in tenthdegrees*/
  32     T1_TMATRIX  * pmatrix;
  33     int         size;
  34     int         font_height;
  35     int         font_ascent;
  36     int         font_descent;
  37
  38     int         max_width;
  39     int         ave_width;
  40
  41     double      csUnit2Pixel;
  42     /*
  43      * last char or string's info
  44      * T1_SetChar, T1_SetString, T1_AASetSting, T1_AASetString all return a static
  45      * glyph pointer, we save the related infomation here for later use.
  46      * */
  47     char        last_bitmap_char;
  48     char        last_pixmap_char;
  49     char        * last_bitmap_str;
  50     char        * last_pixmap_str;
  51     int         last_ascent;
  52     int         last_descent;
  53     int         last_leftSideBearing;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品午夜在线观看| 亚洲成人福利片| 婷婷久久综合九色国产成人 | 国产麻豆成人传媒免费观看| 99在线视频精品| 日韩欧美在线一区二区三区| 国产精品萝li| 国产精品小仙女| 日韩视频在线一区二区| 亚洲夂夂婷婷色拍ww47| 99久久婷婷国产精品综合| 精品黑人一区二区三区久久| 亚洲成人福利片| 粉嫩蜜臀av国产精品网站| 91久久精品网| 久久精品亚洲乱码伦伦中文| 日本美女一区二区三区| 99久久精品国产网站| 国产亚洲欧美中文| 亚洲第一成年网| 在线日韩一区二区| 国产日产精品一区| 中文字幕在线观看不卡| 久久国产麻豆精品| 色综合久久久久综合体 | 欧美午夜在线一二页| 久久精品视频免费| 日本伊人色综合网| 欧美影院精品一区| 中文字幕一区av| 国产美女久久久久| 日韩一级免费一区| 亚洲444eee在线观看| 欧日韩精品视频| 国产精品美女一区二区在线观看| 国产精品一区在线| 欧美一区二区三区四区五区| 日韩激情一二三区| 欧美综合一区二区| 精品国产一区二区精华| 激情小说亚洲一区| 日韩精品一区二区在线| 精品一区二区免费视频| 日韩一区二区三区视频| 麻豆成人免费电影| 91麻豆精品国产91久久久久久| 亚洲电影视频在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产精品系列在线| 日本久久一区二区| 亚洲精品国久久99热| 欧美在线免费视屏| 亚洲已满18点击进入久久| 欧美福利视频导航| 亚洲成人在线观看视频| 91免费精品国自产拍在线不卡| 国产精品久久久久aaaa| 成人黄色在线看| 亚洲国产综合在线| 欧美日韩一卡二卡| 国产一区二区毛片| 国产日韩精品一区二区浪潮av| 色婷婷久久99综合精品jk白丝| 成人欧美一区二区三区小说| 欧美一区二区三区在线视频| 久久精品国产精品青草| 日韩美女视频在线| 成人激情免费电影网址| 艳妇臀荡乳欲伦亚洲一区| 日韩三级免费观看| 国内精品嫩模私拍在线| 亚洲黄色免费电影| 日韩一区二区在线观看视频播放| 国产精品99久久不卡二区| 亚洲天堂中文字幕| 欧美videos中文字幕| 国产传媒日韩欧美成人| 亚洲女与黑人做爰| 欧美一级片在线看| 精品一区二区三区蜜桃| 亚洲精品亚洲人成人网在线播放| 7777精品伊人久久久大香线蕉经典版下载 | 国产乱色国产精品免费视频| 国产精品福利影院| 欧美一级精品在线| 波波电影院一区二区三区| 日产欧产美韩系列久久99| 国产视频在线观看一区二区三区| 一本色道a无线码一区v| 韩日av一区二区| 亚洲成人久久影院| 国产精品三级在线观看| 日本韩国欧美在线| 国产一区二区三区美女| 国产精品国产自产拍高清av| 日韩精品一区二区三区视频| 91在线看国产| 波多野结衣的一区二区三区| 久久国产三级精品| 日韩电影一区二区三区四区| 国产精品灌醉下药二区| 国产精品欧美一级免费| 精品裸体舞一区二区三区| 欧美三级资源在线| 成人国产视频在线观看| 国产一区二区三区免费看 | 亚洲成人激情自拍| 国产精品国产三级国产有无不卡 | 久久er99精品| 蜜臀av亚洲一区中文字幕| 一区二区久久久久久| 综合久久一区二区三区| 精品国产一区二区三区忘忧草 | 日本高清视频一区二区| 成人av综合一区| 狠狠色狠狠色综合系列| 精品无人码麻豆乱码1区2区| 五月婷婷欧美视频| 丝袜美腿亚洲一区二区图片| 亚洲欧美激情小说另类| 亚洲嫩草精品久久| 国产精品国产三级国产a| 国产精品色一区二区三区| 久久伊人中文字幕| 久久久亚洲午夜电影| 精品av综合导航| 色一情一乱一乱一91av| 色先锋资源久久综合| 91免费版pro下载短视频| 91老师片黄在线观看| av在线不卡观看免费观看| 91丨国产丨九色丨pron| av在线不卡免费看| 欧美日韩中文一区| 欧美偷拍一区二区| 日韩色视频在线观看| 欧美一级一级性生活免费录像| 精品三级在线观看| 精品粉嫩超白一线天av| 国产欧美精品一区| 中文乱码免费一区二区| 依依成人精品视频| 亚洲国产美女搞黄色| 午夜精品久久久久久久蜜桃app| 亚洲va国产va欧美va观看| 日韩av高清在线观看| 激情小说欧美图片| 91免费看视频| 欧美日韩国产片| www激情久久| 亚洲视频在线一区观看| 日韩精品一二三区| 韩国欧美国产一区| 91啦中文在线观看| 欧洲av在线精品| 2021中文字幕一区亚洲| 国产精品久久久久久久久快鸭 | 色素色在线综合| 日韩美女一区二区三区四区| 久久精品日产第一区二区三区高清版 | 亚洲.国产.中文慕字在线| 狠狠网亚洲精品| 一本大道av伊人久久综合| 精品美女一区二区三区| 国产精品美女久久久久久久久| 亚洲a一区二区| 国产成人h网站| 91久久精品日日躁夜夜躁欧美| 91.xcao| 一区二区三区欧美久久| 麻豆精品视频在线观看视频| 在线观看精品一区| 26uuu成人网一区二区三区| 亚洲二区视频在线| 国产精品一区免费在线观看| 欧美精品1区2区3区| 亚洲国产成人私人影院tom| 麻豆精品在线观看| 色综合久久精品| 国产精品天干天干在观线| 日本美女一区二区三区视频| 色国产精品一区在线观看| 精品国产一区二区三区久久影院| 亚洲v中文字幕| av不卡一区二区三区| 国产亚洲欧美一区在线观看| 午夜电影网亚洲视频| 91国偷自产一区二区三区观看 | 午夜精品久久久久久久久 | 久久99国产精品久久| 欧美亚洲一区二区在线观看| 中文字幕亚洲成人| 国产乱一区二区| 久久一区二区视频| 日韩专区中文字幕一区二区| 日本韩国欧美国产| 国产精品国产三级国产三级人妇| 成人午夜在线免费| 久久免费看少妇高潮| 久久99国产精品久久99果冻传媒|