microwindows代码分析 (五)font字体之builtin字体

转载时请注明出处和作者联系方式: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,它是一个字体结构数组,用户可以对这个内容进行修改,加入自己需要的字体。
/* 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位图分布格式 的字体文件]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值