转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>
microwindows代码分析 (五)font字体之builtin字体
在microwindows中,可以使用各种字体,包括点阵字体,和truetype字体等。
在drivers/scr_x11.c中有定义SCREENDEVICE scrdev,其中一个参数就是
PMWCOREFONT builtin_fonts;
这个参数,就是用来保存font字体的一个结构,实体例子为:drivers/genfont.c中的gen_fonts,它是一个字体结构数组,用户可以对这个内容进行修改,加入自己需要的字体。
一、screen driver中的字体
下面来看一下启动过程中字体是如何设置的。
在GrOpen->GsInitialize->GdOpenScreen,即在open screen driver时,会调用
GdSetFont则会将这个字体赋值给全局的gr_pfont:
在GsInitialize中,GdOpenScreen结束后,会再去设置全局变量stdfont
这个stdfont主要是在GsPrepareDrawing准备时使用到:
三、设置其他字体
在应用中,可以使用GrCreateFont来设置具体的字体,如arial等。
GrCreateFont会调用GdCreateFont去scrdev中查找匹配的字体,并将字体保留在链表listfontp中。
四、builtin 字体
缺省的builtin字体为
在文件的头部有写明:
表示是用工具生成的。
这个builtin就是指的在外部用工具将字体文件转换成.c文件后,直接在microwindows代码中,使用转换在.c中的变量即可。
这个builtin字体,开发人员还可以自己来增加,如各种点阵字体bdf文件,使用convbdf.c即可转换为.c文件,来添加到builtin字体中。[备注:BDF: Bitmap Distribution Format位图分布格式 的字体文件]
作者联系方式:YU TAO <yut616 at sohu dot com>
microwindows代码分析 (五)font字体之builtin字体
在microwindows中,可以使用各种字体,包括点阵字体,和truetype字体等。
在drivers/scr_x11.c中有定义SCREENDEVICE scrdev,其中一个参数就是
PMWCOREFONT builtin_fonts;
这个参数,就是用来保存font字体的一个结构,实体例子为:drivers/genfont.c中的gen_fonts,它是一个字体结构数组,用户可以对这个内容进行修改,加入自己需要的字体。
/* first font is default font*/ MWCOREFONT gen_fonts[NUMBER_FONTS] = { {&fontprocs, 0, 0, 0, MWFONT_SYSTEM_VAR, &font_winFreeSansSerif11x13}, {&fontprocs, 0, 0, 0, MWFONT_SYSTEM_FIXED, &font_X6x13}, /* deprecated redirections for the time being*/ {&fontprocs, 0, 0, 0, "Helvetica", &font_winFreeSansSerif11x13}, /* redirect*/ {&fontprocs, 0, 0, 0, "Terminal", &font_X6x13} /* redirect*/ };这个数组中,第一个实例会作为缺省的字体。
一、screen driver中的字体
下面来看一下启动过程中字体是如何设置的。
在GrOpen->GsInitialize->GdOpenScreen,即在open screen driver时,会调用
GdSetFont(GdCreateFont(psd, NULL, 0, NULL));其中,GdCreateFont的第二个参数为NULL,那么在engine/devfont.c的GdCreateFont代码中,会将psd->builtin_fonts的第一个实体参数传给fontname,在后面的循环查找中for(i = 0; i < scrinfo.fonts; ++i),当一个个查询到name相同时,就会立即返回所找到的字体结构,这里即第一个实体的内容了。
GdSetFont则会将这个字体赋值给全局的gr_pfont:
/*** The current font.*/ static PMWFONT gr_pfont;二、 设置stdfont字体
在GsInitialize中,GdOpenScreen结束后,会再去设置全局变量stdfont
stdfont = GdCreateFont(psd, MWFONT_SYSTEM_VAR, 0, NULL); #define MWFONT_SYSTEM_VAR "System" /* winFreeSansSerif 11x13 (ansi)*/这里的第二个参数是使用name: MWFONT_SYSTEM_VAR,即为"System"。
这个stdfont主要是在GsPrepareDrawing准备时使用到:
fontp = GsFindFont(gcp->fontid); pf = fontp? fontp->pfont: stdfont;在可能未设置gc font的时候,就使用stdfont。
三、设置其他字体
在应用中,可以使用GrCreateFont来设置具体的字体,如arial等。
GrCreateFont会调用GdCreateFont去scrdev中查找匹配的字体,并将字体保留在链表listfontp中。
四、builtin 字体
缺省的builtin字体为
{&fontprocs, 0, 0, 0, MWFONT_SYSTEM_VAR, &font_winFreeSansSerif11x13},它是使用的fonts/winFreeSansSerif11x13.c文件。
在文件的头部有写明:
/* Generated by convfnt.exe, modified removed offset array*/ #include "device.h" /* Windows FreeSansSerif 11x13 Font */ /* * #FONTRES 100,96,96:Free Sans Serif 8 * Distributed under the MPL (c) 1999 darran@rimron.co.uk v0.3 * Free Sans Serif */
表示是用工具生成的。
这个builtin就是指的在外部用工具将字体文件转换成.c文件后,直接在microwindows代码中,使用转换在.c中的变量即可。
/* Exported structure definition. */ MWCFONT font_winFreeSansSerif11x13 = { "winFreeSansSerif11x13", 11, 13, 11, 32, 224, winFreeSansSerif11x13_bits, 0 /*winFreeSansSerif11x13_offset*/, winFreeSansSerif11x13_width, };
这个builtin字体,开发人员还可以自己来增加,如各种点阵字体bdf文件,使用convbdf.c即可转换为.c文件,来添加到builtin字体中。[备注:BDF: Bitmap Distribution Format位图分布格式 的字体文件]