经过两天的痛苦的测试和查阅资料终于将可以在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);