QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: osnaile

GNOME2.12 装上后,中文成楷体的了

[复制链接]
 楼主| 发表于 2005-9-15 21:01:47 | 显示全部楼层
你是在哪儿设置的?是 /etc/fonts/fonts.conf 吗?要不你贴上来让我学习一下
回复

使用道具 举报

发表于 2005-9-15 21:25:19 | 显示全部楼层
[quote:f7fa66460a="cnhnln"][quote:f7fa66460a="mandrakechina"]pango通过cairo绕过了xft,还叫与字体无关? 你整个斜体我看看。[/quote]
cairo负责字体渲染?还用fontconfig匹配字体吗?你说与字体有关,整点证据我看看[/quote]字体渲染是freetype负责的。我没有说cairo绕过fontconfig啊,我只是说它绕过了xft,否则也不会专门为了cairo添加指向freetype的补丁来实现粗斜体。另外,pango的字体适配其实历来与fontconfig有所出入。

当然,cairo 1.0实现了freetype的粗体呼叫,但斜体尚未实现。鉴于yangh没有提交斜体补丁的想法,我不想越足代庖,斜体补丁目前也只能被Mandriva正式收录。
回复

使用道具 举报

发表于 2005-9-15 22:55:34 | 显示全部楼层
[quote:88622e1329="osnaile"]你是在哪儿设置的?是 /etc/fonts/fonts.conf 吗?要不你贴上来让我学习一下[/quote]
[code:1]
<match target="font">
        <test qual="any" name="family"><string>SimSun</string></test>
        <edit name="antialias" mode="assign"><bool>false</bool></edit>
</match>
[/code:1]
关掉所有字号的SimSun的AA
[code:1]
<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>
[/code:1]
关掉12~16pixelsize大小的SimSun的AA,包括12和16pixelsize
[code:1]
<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>
[/code:1]
关掉12~16size大小的SimSun的AA,不包括12和16size。pixelsize和size是不同的度量单位
[code:1]
<match target="font">
        <test name="lang" compare="contains">
                <string>zh</string>
        </test>
        <edit mode="assign" name="antialias" ><bool>false</bool></edit>
</match>
[/code:1]
关掉所有字号的中文字体的AA。这一个没事过,可能无效,你先试试看    不行的话就再加
[code:1]
<match target="font">
        <test target="pattern" name="lang" compare="contains">
                <string>zh</string>
        </test>
        <edit mode="assign" name="antialias" ><bool>false</bool></edit>
</match>
[/code:1]
回复

使用道具 举报

发表于 2005-9-16 20:25:45 | 显示全部楼层
[quote:55000e7b43="mandrakechina"]这才是王道 :D

另外,gtk、Pango、cairo跟freetype没啥关系。[/quote]

cairo有对FT_Glyph_XXX()的调用。(在freetype.h中)

建议你能不能看了源码后在下定论
回复

使用道具 举报

发表于 2005-9-16 20:27:54 | 显示全部楼层
[quote:6c44adc2dd="mandrakechina"][quote:6c44adc2dd="cnhnln"][quote:6c44adc2dd="mandrakechina"]pango通过cairo绕过了xft,还叫与字体无关? 你整个斜体我看看。[/quote]
cairo负责字体渲染?还用fontconfig匹配字体吗?你说与字体有关,整点证据我看看[/quote]字体渲染是freetype负责的。我没有说cairo绕过fontconfig啊,我只是说它绕过了xft,否则也不会专门为了cairo添加指向freetype的补丁来实现粗斜体。另外,pango的字体适配其实历来与fontconfig有所出入。

当然,cairo 1.0实现了freetype的粗体呼叫,但斜体尚未实现。鉴于yangh没有提交斜体补丁的想法,我不想越足代庖,斜体补丁目前也只能被Mandriva正式收录。[/quote]

万全正确!!!
mandrakechina这回听了我一把。 :D
回复

使用道具 举报

发表于 2005-9-16 20:29:26 | 显示全部楼层
我也在写补丁,
让cairo读fontconfig2.2的config就能显示粗体(done that)
让cairo读fontconfig2.2的config就能显示斜体(no done yet)
回复

使用道具 举报

 楼主| 发表于 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 这个文件才行。

谢谢各位
回复

使用道具 举报

发表于 2005-9-16 23:49:34 | 显示全部楼层
[quote:0f0c6e7fbf="Mikeandmore"][quote:0f0c6e7fbf="mandrakechina"]这才是王道 :D

另外,gtk、Pango、cairo跟freetype没啥关系。[/quote]

cairo有对FT_Glyph_XXX()的调用。(在freetype.h中)

建议你能不能看了源码后在下定论[/quote]我这句话是对bytecode interpreter说的。gtk*无法对freetype是不是启用了bytecode interpreter做出判断。

另外,是否有粗体,跟fontconfig是没有关系的,只要cairo可以正确呼叫到freetype的embolden就行了。在这个问题上fontconfig没什么用。
回复

使用道具 举报

发表于 2005-9-17 18:24:53 | 显示全部楼层
另外,是否有粗体,跟fontconfig是没有关系的,只要cairo可以正确呼叫到freetype的embolden就行了。在这个问题上fontconfig没什么用。

fontconfig利用pattern控制如何显示粗体(多粗的粗体)

例如在cairo-ft-font.c中
[code:1]
if (FcPatternGetBool (pattern,
                              FC_EMBOLDEN, 0, &embolden) != FcResultMatch)
            embolden = FcFalse;
if (embolden)
            load_flags |= PRIVATE_FLAG_EMBOLDEN;
[/code:1]
(in fontconfig.h we have#define FC_EMBOLDEN “embolden")

即可判定在match后的embolden只否为true,如果为true说明要求显示为粗体
所以要有
[code:1]
<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>
[/code:1]
才行

但是上述在任何版本中的默认的fonts.conf中都没有

所以我改为了
[code:1]
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;

[/code:1]
由于pango在接受到粗体请求时会自动的加入字体的weight所以这样写就可以解决cairo粗体问题
回复

使用道具 举报

发表于 2005-9-17 19:08:10 | 显示全部楼层
fontconfig现有的代码配合freetype和cairo本来就可以出粗体。你自己弄不出来,就要乱改代码。晕……
回复

使用道具 举报

发表于 2005-9-18 16:52:23 | 显示全部楼层
您好好的读读他的程序呀!
我改了以后很完美呀。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-13 02:49 , Processed in 0.769267 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表