MiniGui使用ttf失量字库支持中英文

经过两天的痛苦的测试和查阅资料终于将可以在minigui上跑ttf失量字体了,一下记录和整理整过程,给需要的人借鉴。

我使用的minigui版本是libminigui-gpl-3.0.12.tar.gz官网可以下载。

因为要minigui默认配置是不支持ttf字体的,这需要重新编译minigui源码,在源码中增加freetype字体引擎的支持,字体引擎freetype有两个版本,经测试都可以使用。

.不支持矢量字库的minigui源码编译

./configure

make

sudo make uninstall

sudo make install

sudo ldconfig

 

.编译内核使其支持ttf字体,有两个版本的freetype引擎库,经测试都可以使用,只是有少许差异

1.支持矢量字库1

1.先编译安装freetype1字体引擎。

2.网上下载freetype-1.3.1.tar.gz压缩包

3.拷贝到linux上后解压

$:tar zxvf freetype-1.3.1.tar.gz

4.配置  进入解压后的文件

$:./configure

5.编译  

$:make

出现如下错误

make[1]: Entering directory `/home/freetype-1.3.1/test'

gcc -c -I. -I/home/freetype-1.3.1/test/arch/unix/../.. -I.. -I/home/freetype-1.3.1/test/arch/unix/../../../lib -I/home/freetype-1.3.1/ test/arch/unix/../../../lib/extend -g -O2  -Wall -pedantic -ansi  -DX11 -DLOCALEDIR='"/usr/share/locale"' ftdump.c

ftdump.c:172:1: error: pasting "." and "glyph_object" does not give a valid preprocessing token

ftdump.c:182:1: error: pasting "." and "first_instance" does not give a valid preprocessing token

ftdump.c:191:1: error: pasting "." and "second_instance" does not give a valid preprocessing token

ftdump.c:201:1: error: pasting "." and "face_object" does not give a valid preprocessing token

ftdump.c:202:1: error: pasting "." and "glyph_object" does not give a valid preprocessing token

ftdump.c:203:1: error: pasting "." and "second_instance" does not give a valid preprocessing token

ftdump.c:863:1: error: pasting "." and "initial_overhead" does not give a valid preprocessing token

ftdump.c:882:1: error: pasting "." and "face_object" does not give a valid preprocessing token

make[1]: *** [ftdump.o] Error 1

make[1]: Leaving directory `/home/freetype-1.3.1/test'

make: *** [tttest] Error 2

 

解决办法:

修改ftdump.c里面的代码:

   Print_Mem( memory_footprint.##field, string )

改为: Print_Mem( memory_footprint.field, string )

   #define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )

改为: #define FOOTPRINT( field ) Save_Memory( &memory_footprint.field )

 

make,没有问题,OK

6.安装  默认安装在  /usr/local/lib   /usr/local/include  中,生产库的全名为:libttf.so.2.2.0

$:sudo make install

 

7.重新编译minigui内核,先清除之前编译和安装的内容

$:make clean

$:sudo make uninstall

 

8.重新配置minigui内核,使其支持ttf   可以通过./configure --help查看支持的配置选项  --with-ttfsupport选择支持的是ft2还是ft1--with-ft1-includes

指定ft1库的头文件所在位置

$:./configure --with-ttfsupport=ft1 --with-ft1-includes=/usr/local/include/freetype

配置后在mgconfig.h中的配置变为如下

/* Define if support TrueType font based on FreeType2 */

/* #undef _MGFONT_FT2 */                   /*FT2未被打开*/                   

 

/* Define if support QPF font */

/* #undef _MGFONT_QPF */

 

/* Define if support raw bitmap fonts */

#define _MGFONT_RBF 1

 

/* Define if support SEF scripteary font */

/* #undef _MGFONT_SEF */

 

/* Define if support TrueType font */  

#define _MGFONT_TTF 1                      /*_MGFONT_TTF被打开*/

9.编译内核

$:make

10.安装minigui内核  默认安装在  /usr/local/lib   /usr/local/include  

$:sudo make install

11.使库可以被应用程序找到

$:sudo ldconfig

12.编译应用程序时加上  -L/usr/local/lib -lttf选项就可

 

2.支持矢量字库2

1.先编译安装freetype2字体引擎。

2.官网下载freetype-2.7.tar.gz压缩包

3.拷贝到linux上后解压

$:tar zxvf freetype-2.7.tar.gz  

4.配置  进入解压后的文件

$:./configure

5.编译  

$:make

6.安装  默认安装在  /usr/local/lib   /usr/local/include  中,生产库的全名为:libfreetype.so.6.12.6

$:sudo make install

 

7.重新编译minigui内核,先清除之前编译和安装的内容

$:make clean

$:sudo make uninstall

8.重新配置minigui内核,使其支持ttf   可以通过./configure --help查看支持的配置选项  --with-ttfsupport选择支持的是ft2还是ft1--with-ft2-includes

  指定ft2库的头文件所在位置

$:./configure --with-ttfsupport=ft2 --with-ft2-includes=/usr/local/include/freetype2

 

配置后在mgconfig.h中的配置变为如下

/* Define if support TrueType font based on FreeType2 */

#define _MGFONT_FT2 1                     /*FT2被打开*/

 

/* Define if support QPF font */

/* #undef _MGFONT_QPF */

 

/* Define if support raw bitmap fonts */

#define _MGFONT_RBF 1

 

/* Define if support SEF scripteary font */

/* #undef _MGFONT_SEF */

 

/* Define if support TrueType font */

/* #undef _MGFONT_TTF */                   /*_MGFONT_TTF仍然是关闭的,经测试FT2被打开,这个可以不用打开*/

9.编译内核

$:make

10.安装minigui内核  默认安装在  /usr/local/lib   /usr/local/include  

$:sudo make install

11.使库可以被应用程序找到

sudo ldconfig

12.编译应用程序时加上  -L/usr/local/lib -lfreetype选项就可

 

.使用矢量字库

1.从网上下载ttf字库,拷贝到/usr/local/share/minigui/res/font目录中

times.ttf     只支持英文和数字等ASCII

fzcircle.ttf  支持中英文字符

 

2.配置Minigui.cfg文件, 修改[truetypefonts]字段

[truetypefonts]

font_number=2

name0=ttf-times-rrncnn-0-0-ISO8859-1

fontfile0=/usr/local/share/minigui/res/font/times.ttf

name1=ttf-fzcircle-rrncnn-0-0-GB2312-0

fontfile1=/usr/local/share/minigui/res/font/fzcircle.ttf

 

3.编程使用

static PLOGFONT logfont_ttf_times;

static PLOGFONT logfont_ttf_fzcircle;

void OnModeTextOutTTF (HWND hWnd)

{

     HDC hdc;

     hdc = GetClientDC(hWnd);

     char buf1[128] = {0};

     logfont_ttf_times = CreateLogFont ("ttf", "times", "ISO8859-1",

                                       FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN,

                                       FONT_FLIP_NIL, FONT_OTHER_NIL,

                                       FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,

                                       45, 0);

    SelectFont(hdc,logfont_ttf_times);

    sprintf (buf1, "%s-%s-%s-size%d-regular:  ",

            logfont_ttf_times->type, logfont_ttf_times->family,

            logfont_ttf_times->charset, logfont_ttf_times->size);

    TextOut (hdc, 10, 10, buf1);

 

    logfont_ttf_fzcircle = CreateLogFont ("ttf", "fzcircle", "GB2312-0",

                                        FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN,

                                        FONT_FLIP_NIL, FONT_OTHER_NIL,

                                        FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,

                                        48, 0);

    sprintf (buf1, "中文ttf字体%s-%s-%s-size%d-regular: ",

            logfont_ttf_fzcircle->type, logfont_ttf_fzcircle->family,

            logfont_ttf_fzcircle->charset, logfont_ttf_fzcircle->size);

    SelectFont(hdc,logfont_ttf_fzcircle);

    TextOut (hdc, 10, 120, buf1);

    ReleaseDC(hdc);

}

 

最后记得释放字库资源

 

DestroyLogFont (logfont_ttf_times);

DestroyLogFont (logfont_ttf_fzcircle);

你可能感兴趣的:(MiniGui使用ttf失量字库支持中英文)