MiniGUI源代码分析(4)--Font目录(1)

来源:互联网 发布:人工智能三定律 编辑:程序博客网 时间:2024/06/05 09:40

 

Font目录下面主要包含两个方面的代码,一个是字符集,一个是字体处理。下面我分别对这两个模块的内容进行分析。

字符集:

charset.c, charset.hbig5unimap.c这个三个文件都是字符集处理的相关函数。任何一个字符集的实现就是实例化CHARSETOPS结构体里面的函数指针,然后添加到Charsets这个变量中。换句话说,如果要增加一种新的字符集,只需要增加一个CHARSETOPS类型的变量,然后将这个变量添加到charsets这个数组的后面。CHARSETOPS结构体除了有一些字符名称等属性外,还有字符集操作的一些函数代码。CHARSETOPS结构体如下:

 

逻辑字体:

MiniGUI中,字体的概念分成两个,一个是逻辑字体,一个是设备字体。逻辑字体是提供给应用层使用的,用户在应用层根据需要创建特定的字体,为GDI操作指定逻辑字体。逻辑字体屏蔽了内部字符集,字库等细节。设备字体是和字符集,字体文件相关的。

逻辑字体的结构体如下:

 

从这个结构可以看出,一个逻辑字体最多有两个设备字体,但是有且只有一个单字节设备字体。这是为什么呢?因为任何一种字符集,就算是你是多字节的字符集,你也得要一个一个字节的读了然后来分析吧,所以,你必须的先判断他不是单字节的字符集中的字符之后才能去将多个组合起来形成一个多字节的字符。

设备字体:

简单的说,设备字体是和具体的字库文件对应的,但是,并不是说个字库文件就对应于一个设备字体,一般的情况是一个字库文件对应于多个的设备字体。举个例子来说,在MiniGUI的配置文件中,如果有一下的一行:

name0=qpf-unifont-rrncnn-16-16-ISO8859-1,ISO8859-15,GB2312-0,GBK,BIG5

那么,就以为这这个字体文件对应的设备字体有5个,分别对应于ISO8859-1,ISO8859-15GB2312-0GBKBIG5的设备,而且由于ISO8859-1ISO8859-15由于是单字节的字符集,所以他们对应的设备字体也是单字节设备,剩下的3种都是多字节的字符集,所以他们对应的设备字体都是多字节的设备字体。

关于逻辑字体和设备字体,还有一点需要注意,设备字体在系统起来之后就唯一确定了,不能动态的变化。在初始化的时候,MiniGUI根据配置文件,将所有的设备字体都初始化,然后根据多字节和单字节的特性分别注册到对应的链表当中。而逻辑字体是可以用户根据需要在程序中可以随时创建和销毁的。

 

原创粉丝点击