开源中文网

您的位置: 首页 > Gentoo > 正文

gentoo的字体,写些学习心得

来源:  作者:

1、首先是一些概念 
先加一些链接 
http://www.xfree86.org/~dawes/4.3.0/fonts.html 
http://www.oceanboo.cn/read.php?227 
----------------------------------------------------------------------------------- 
X Window是所谓client-server结构,这里的server管显示(输出)、键盘和 
鼠标(输入)部分,而client则是你正在用的程序,比如编辑器。Server收集 
键盘和鼠标的输入,送到编辑器这一client,编辑器经过处理后,回过来再让 
server去显示一些字到屏幕上,来回折腾。 

怎样显示一个字呢? 

一个字实际上就是一个小图,如果小图上的点非黑即白,就称为黑白点阵; 
如果小图上的点可以有不同的亮度甚至颜色,则称为AA点阵。每个字,也就 
是每个小图都有固定的编号,编辑器(client)可以只告诉server某个编号, 
server根据该编号去找出对应的小图,这种方案就是所谓的server side 
font,如FreeType,X-TrueType等backend就属此类;如果编辑器自己去找小 
图,干脆把小图送给server去显示,这种方案就是所谓client side font, 
Xft属这一类。 
  server side font 
    FreeType backend: 即XF86Config中的freetype模块 
    X-TrueType backend: 即XF86Config中的xtt模块 
  client side font 
    Xft: 设置文件是fonts.conf 

还有一类,xfs,跟server side font一样,client把字编码传给server,但 
server并不直接从字库中读出对应该编码的小图,而是把编码再传给另外 
的所谓font server,由font server去字库找出对应的图,返回给X server 
去显示,姑且将这种方式称为font server font: 
  font server font 
    xfs: 设置文件是X11/fs/config 

不管是哪一类,最终都要去字库文件读出对应编码的小图,至少对TrueType 
格式的字库文件而言,xtt也好,freetype也好,Xft也好,几乎都用到了 
FreeType这一字库engine,虽然xtt没人继续改进,还是用FreeType 1,别人 
都改用FreeType 2了。正因为大家都用FreeType字库engine,使得xtt, 
freetype,Xft这些名字容易弄混,让人头大。解决的办法很简单:不要再去 
管什么xtt,不要再去管什么freetype,不要再去管什么xfs: 
  只要弄清Xft就够了。 
----------------------------------------------------------------------------- 
Fontconfig 
晚近的 XFree86 除了有了 freetype 的内建,加强了对于 TrueType 等向量字型的支持外,最近 Keith Packard 的 Xft 与 Fontconfig 也是一个对于字型整合所做的尝试,在最新的 XFree86 IV.III.x 与 freetype/Xft2/Fontconfig 的支持下,X 下的程序(Procedures)(Procedures)对于一个统一的字型选择(Choose)与绘制接口又进了一步. 
虽然 XFree86 本身包含 Fontconfig, Fontconfig 事实上是一个可以独立出来的接口,他是一个 library 不是一套 user app, 他所做的就是提供一套 font matching 的机制,让使用 Fontconfig 的程序(Procedures)(Procedures)可以不必自己实作一套字型的选取方法.如此只要使用 Fontconfig 的程序(Procedures)(Procedures)愈多,单一的一套设定檔就可以被用在愈多的应用程序(Procedures) (Procedures),应用程序(Procedures)(Procedures)本身可以利用 Fontconfig 所得到的字型名称去画字,也可以架构在自己原先的字型选择(Choose)架构之上 (如 Qt), 以达成对旧的设定的一定的向后兼容性. 
Fontconfig 有许多好处,比如说是: 
字型的安装.与其把要用的字型拿来放在一个目录, 然后用 ttfmkdir / defoma / ttfm 等东西生出 fonts.dir 再指给 xtt/freetype, 再重新启动操作系统 X font server 或者是 xset fp rehash, 现在只要把字型丢或者是 symlink 到 ~/.fonts 或者是任何其他经过指定的目录, 就可以 _马上_ 开始使用了.当然在使用没有支持 Fontconfig 的程序(Procedures)(Procedures)时, 仍然要用传统的方法.Fontconfig 除了可以吃 TrueType, 也可以吃 Type1 或者是 pcf 等等传统的点阵字. 
字型 matching 的设定.虽然 Fontconfig 已经附上了一套不错的设定檔让在未被设定的情况下也都能够有一个可以使用的操作操作系统,但当然对于个别字型的设定更有弹性.这一个是透过 Fontconfig 所使用的 xml 设定档达成的.稍后再说. 

Fontconfig 会尽可能找出一套字,可以满足显示不同语言(Language)的需求. 
Xft 
Xft 也是一套 library, 他使用 Fontconfig match 到了所要的字型之后, 来决定该如何画这些字.Xft 会看情况而不能是决定要不要使用 core protocol 或者是 XRender 来画字.XRender 是 XFree86 IV.x 新增的 extension, 我认为这是为了保留 X 的向后兼容性所新增的一个 hack, 不过因为他可以用来画 anti-aliased 的字,目前的使用愈来愈广泛.不过 anti-aliased text 只有在使用向量字型的时候有用, 绘制点阵字的时候就要使用 core lib. Core library(以 x-truetype 或者是 freetype 作为 backend)自然也是可以画向量字,只不过画出来的就不能有 anti-aliased 的效果(Effect)了. 
有时当 XRender 不能使用的时候(如您是透过网络用一个旧的 X server 来执行 X apps), Xft 也可以使用 core lib 来画字.应用程序(Procedures)(Procedures)不必为这些问题操心,达到信息隐藏(Hide) 
Freetype 
Freetype 是一个很棒的画字函式库,XFree86 IV.3 内含了 II.I.II. Freetype 提供 Xft 如何画字的信息,包括处理 anti-aliasing 或者是 hinting. 所以我们可以得出结论 freetype 的改变会影响到 Xft 画出来的字,而不能是 Fontconfig 的改变会影响到 Xft 如何去选字来画. 
fonts.conf 
这里所讲的就是最新的 Fontconfig 与 Xft2 的设定.对于旧的 XftI.0 的 ~/.xftconfig 就不提了. 
如果您装了 fontconfig, 那么他应该已经附上了一套预设的设定檔.可以到 /etc/fonts/ (一些 Linux distributions) 或者是 /usr/X11R6/etc/fonts (一些 BSD flavors) 底下找找看 fonts.conf 这一个档案. 
fonts.conf 是简单的 xml 格式,在 etc/ 里面的 fonts.conf 是 system-wide 的设定,一般不建议直接或者间接更改他,可以更改 local.conf 或者是是自己家目录下面的 ~/.fonts.conf . 关于 fonts.conf 的各种各样语法,由于 manpage 里头已经写得很详尽,所以这里只是提及比较重要的一些部份,有兴趣者可以 man fonts-conf. 所有的设定都放在 与 之间,而不能是当中可以包含许多 tags, 详细的 tags 可以参照 fonts.dtd 或者是是 manpage. 
里面是一个路径,fontconfig 会自己递归地去找这一个路径里头的所有字型,如: /foo/bar/myfonts 
可以把其他的设定檔引进来,他们的格式是一样的. 
当中最重要的 element 应该是 了.match 主要有两种用法, 一种是 pattern match, 另一种是 font match. 前者会把所有的字型 match 出来,所以针对他的更改会套用到所有的字型的选择(Choose)方式上.为什么或者说怎么会要更改字型的属性? 因为这样可以针对个别的字型告诉 Fontconfig 该如何去处理这些字型,或者是是告诉 renderer 该如何去画这些字型.这里是一些常用到属性的列表,关于所有的属性请洽 manpage: 
family - String - 就是一般所看到的字型的名称了, 如 Arial 
style - String - 字型的 style, 好像是 Regular, Bold, Italic... 
spacing - Int - 字型的宽度, Proportional 是有不相同的宽度, monospace 是单一的宽度 (如 terminal 的字型) 
antialias - Bool - 决定该字型是否要被 anti-alias 绘制; 只能用在向量字型上 
hinting - Bool - 决定该字型是否要打开 hinting 
autohint - Bool - 决定是否要用 Freetype 自己的 hint 方法来 hint 字型, 还是用预设的方法来 hint 
rgba - Bool - 决定是否要用 subpixel 的方式来画字, 可以是 none (只用灰阶), rgb, bgr, vrgb, vbgr 
Hinting 用来最佳化字型显示的方法.由于屏幕的像素有限,向量字型的缩放需要有更多的考虑, 比如说是当一条线位在两个像素格子中间时, 该取左边的格子还是右边的格子? 如果这方面的控制没有做好,就通常会出现字型的衬线没有对齐,或者是是小字歪七扭八的情况. Hinting 是额外的信息, 他告诉 renderer 该如何处理这些细节的部份,使得向量字在小字的时候能够好看.也所以我们可以得出结论 Hinting 是非常费时费人力的工作(Work),TrueType 字型很多很多,但是有良好 Hinting 的字型不多.拙劣的 Hinting 就会让字变得很难看. 
-------------------------------------------------------------------------------- 

2、安装字体,这个就不细说了。 

3、字体大小设置 
首先是屏幕的分辨率 修改xorg.conf 改为124X124 
然后修改xft的分辨率 可以在.font.conf 中加入 
目前是修改.Xresources 中加入xft-dpi:124 
屏幕字体的大小=字体磅值Xdpi,所以在124下会比96dpi下要大,需要修改字体磅值大小 
openbox用配置文件改 
fbpanel和firefox等用GTK-2.0默认的字体大小 
添加.gtkrc-2.0 
# Uncomment and Edit the next line to enable your prefered gtk icon theme. 
#gtk-xft-antialias=1 
#gtk-xft-hinting=1 
#gtk-xft-hintstyle="hintfull" 
#gtk-icon-theme-name = "Tango" 
gtk-menu-popup-delay=100 
gtk-menu-popdown-delay=100 
#gtk-theme-name="tish-aquastyle" 
gtk-font-name="Microsoft\ YaHei 7" 
#gtk-toolbar-style=icons 

4、字体美化 
我工作在gentoo x86版本下面,cairo还没有加入cleartype,所以 
echo "x11-libs/cairo ~x86" 加入package.keywords 
echo "x11-libs/cairo cleartype" 加入package.use 
升级完cairo后,发现字体确实有所改善了。 

4、遗留问题 
升级cairo时要同时加入pixman,他在gcc4.1.2下不支持sse2 USE标记,我还要升级到gcc4.2么? 
不知道升级gcc有什么问题。下回有空开始升级,好像可以多版本共存。 
xft 在哪里设计比较好?font.config or .Xresources 

Tags:gentoo 字体 写些
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明