osnaile
发表于 2005-9-15 21:01:47
你是在哪儿设置的?是 /etc/fonts/fonts.conf 吗?要不你贴上来让我学习一下
mandrakechina
发表于 2005-9-15 21:25:19
pango通过cairo绕过了xft,还叫与字体无关? 你整个斜体我看看。
cairo负责字体渲染?还用fontconfig匹配字体吗?你说与字体有关,整点证据我看看字体渲染是freetype负责的。我没有说cairo绕过fontconfig啊,我只是说它绕过了xft,否则也不会专门为了cairo添加指向freetype的补丁来实现粗斜体。另外,pango的字体适配其实历来与fontconfig有所出入。
当然,cairo 1.0实现了freetype的粗体呼叫,但斜体尚未实现。鉴于yangh没有提交斜体补丁的想法,我不想越足代庖,斜体补丁目前也只能被Mandriva正式收录。
cnhnln
发表于 2005-9-15 22:55:34
你是在哪儿设置的?是 /etc/fonts/fonts.conf 吗?要不你贴上来让我学习一下
<match target="font">
<test qual="any" name="family"><string>SimSun</string></test>
<edit name="antialias" mode="assign"><bool>false</bool></edit>
</match>
关掉所有字号的SimSun的AA
<match target="font">
<test qual="any" name="family" compare="eq"><string>SimSun</string></test>
<test name="pixelsize" compare="more_eq"><double>12</double></test>
<test name="pixelsize" compare="less_eq"><double>16</double></test>
<edit name="antialias"><bool>false</bool></edit>
</match>
关掉12~16pixelsize大小的SimSun的AA,包括12和16pixelsize
<match target="font" >
<test qual="any" name="family" compare="eq"><string>SimSun</string></test>
<test compare="more" name="size" qual="any" ><double>9</double></test>
<test compare="less" name="size" qual="any" ><double>12</double></test>
<edit mode="assign" name="antialias" ><bool>false</bool></edit>
</match>
关掉12~16size大小的SimSun的AA,不包括12和16size。pixelsize和size是不同的度量单位
<match target="font">
<test name="lang" compare="contains">
<string>zh</string>
</test>
<edit mode="assign" name="antialias" ><bool>false</bool></edit>
</match>
关掉所有字号的中文字体的AA。这一个没事过,可能无效,你先试试看:mrgreen:不行的话就再加
<match target="font">
<test target="pattern" name="lang" compare="contains">
<string>zh</string>
</test>
<edit mode="assign" name="antialias" ><bool>false</bool></edit>
</match>
Mikeandmore
发表于 2005-9-16 20:25:45
这才是王道 :D
另外,gtk、Pango、cairo跟freetype没啥关系。
cairo有对FT_Glyph_XXX()的调用。(在freetype.h中)
建议你能不能看了源码后在下定论
Mikeandmore
发表于 2005-9-16 20:27:54
pango通过cairo绕过了xft,还叫与字体无关? 你整个斜体我看看。
cairo负责字体渲染?还用fontconfig匹配字体吗?你说与字体有关,整点证据我看看字体渲染是freetype负责的。我没有说cairo绕过fontconfig啊,我只是说它绕过了xft,否则也不会专门为了cairo添加指向freetype的补丁来实现粗斜体。另外,pango的字体适配其实历来与fontconfig有所出入。
当然,cairo 1.0实现了freetype的粗体呼叫,但斜体尚未实现。鉴于yangh没有提交斜体补丁的想法,我不想越足代庖,斜体补丁目前也只能被Mandriva正式收录。
万全正确!!!
mandrakechina这回听了我一把。 :D
Mikeandmore
发表于 2005-9-16 20:29:26
我也在写补丁,
让cairo读fontconfig2.2的config就能显示粗体(done that)
让cairo读fontconfig2.2的config就能显示斜体(no done yet)
osnaile
发表于 2005-9-16 23:24:03
终于弄好了,谢谢大家伙了,后来发现,我原来编辑的 fonts.conf 一直不是使用的。
我的 GNOME 是装到了 /usr/local/garnome_2.12/ 里了,所以 fonts.conf 要用 /usr/local/garnome_2.12/etc/fonts/fonts.conf 这个文件才行。
谢谢各位
mandrakechina
发表于 2005-9-16 23:49:34
这才是王道 :D
另外,gtk、Pango、cairo跟freetype没啥关系。
cairo有对FT_Glyph_XXX()的调用。(在freetype.h中)
建议你能不能看了源码后在下定论我这句话是对bytecode interpreter说的。gtk*无法对freetype是不是启用了bytecode interpreter做出判断。
另外,是否有粗体,跟fontconfig是没有关系的,只要cairo可以正确呼叫到freetype的embolden就行了。在这个问题上fontconfig没什么用。
Mikeandmore
发表于 2005-9-17 18:24:53
另外,是否有粗体,跟fontconfig是没有关系的,只要cairo可以正确呼叫到freetype的embolden就行了。在这个问题上fontconfig没什么用。
fontconfig利用pattern控制如何显示粗体(多粗的粗体)
例如在cairo-ft-font.c中
if (FcPatternGetBool (pattern,
FC_EMBOLDEN, 0, &embolden) != FcResultMatch)
embolden = FcFalse;
if (embolden)
load_flags |= PRIVATE_FLAG_EMBOLDEN;
(in fontconfig.h we have#define FC_EMBOLDEN “embolden")
即可判定在match后的embolden只否为true,如果为true说明要求显示为粗体
所以要有
<match target="font">
<!-- check to see if the pattern requested > "medium" -->
<test target="pattern" name="weight" compare="more">
<const>medium</const>
</test>
<!-- pretend the font is bold now -->
<edit name="embolden" mode="assign">
<bool>true</bool>
</edit>
</match>
才行
但是上述在任何版本中的默认的fonts.conf中都没有
所以我改为了
int w=-1;
if (FcPatternGetInteger (pattern,FC_WEIGHT, 0, &w) != FcResultMatch) embolden = FcFalse;
if(w==FC_WEIGHT_BOLD) embolden=FcTrue;
if (embolden)
load_flags |= PRIVATE_FLAG_EMBOLDEN;
由于pango在接受到粗体请求时会自动的加入字体的weight所以这样写就可以解决cairo粗体问题
mandrakechina
发表于 2005-9-17 19:08:10
fontconfig现有的代码配合freetype和cairo本来就可以出粗体。你自己弄不出来,就要乱改代码。晕……
Mikeandmore
发表于 2005-9-18 16:52:23
您好好的读读他的程序呀!
我改了以后很完美呀。