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

您好好的读读他的程序呀!
我改了以后很完美呀。
页: 1 2 [3]
查看完整版本: GNOME2.12 装上后,中文成楷体的了