QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: sunmoon1997

gnome 面板放置在左/右时,它上面中文显示正常吗?

[复制链接]
 楼主| 发表于 2005-10-26 21:38:19 | 显示全部楼层
a testcase.
[code:1]
#include <cairo.h>
#include <cairo-ft.h>
#include <math.h>

#define WIDTH 40
#define HEIGHT 180
#define TEXT " cairo 竖写文字测试"

int main() {
        cairo_surface_t * sr;
        cairo_t * cr;
        cairo_font_face_t * font_face;
        cairo_matrix_t font_matrix;
        cairo_text_extents_t extents;
        cairo_font_options_t *options;
        double y = 0;

        FcPattern * pattern, * resolved;
        FcResult result;

        pattern = FcPatternCreate ();

#if 0
        FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"bitstream vera sans");
#else
        FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"sans");
#endif

        FcConfigSubstitute (NULL, pattern, FcMatchPattern);
           FcDefaultSubstitute (pattern);
   
        resolved = FcFontMatch (NULL, pattern, &result);

        /* vertical layout */
        FcPatternDel (resolved, FC_VERTICAL_LAYOUT);
        FcPatternAddBool (resolved, FC_VERTICAL_LAYOUT, FcTrue);

        font_face = cairo_ft_font_face_create_for_pattern (resolved);

        cairo_matrix_init_scale (&font_matrix, 14.0, 14.0);

        sr = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,  WIDTH, HEIGHT);
        cr = cairo_create (sr);

        cairo_set_font_face (cr, font_face);
        cairo_set_font_matrix (cr,  &font_matrix);
       
        cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
        cairo_paint(cr);
       
        cairo_set_source_rgb (cr, 0, 0, 1.0);       
        cairo_text_extents (cr, TEXT, &extents);
        cairo_move_to (cr, -extents.x_bearing, y - extents.y_bearing);
        cairo_show_text (cr, TEXT);

        cairo_surface_write_to_png (sr, "cairo-vertical-layout-text.png");

        FcPatternDestroy (pattern);
        FcPatternDestroy (resolved);

        cairo_font_face_destroy (font_face);
        cairo_destroy (cr);
        cairo_surface_destroy (sr);

        return 0;
}

[/code:1]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2005-10-27 00:39:51 | 显示全部楼层
没编译,不过竖写文字中,可能要考虑对中文和日文区别对待,英文的旋转方向也必须正确选择,而且还要能够对标点符号进行自动替换。工程量不小。
回复

使用道具 举报

 楼主| 发表于 2005-10-27 12:46:28 | 显示全部楼层
贴个图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2005-10-27 19:25:26 | 显示全部楼层
我早就说过,效果肯定不对。这才是正确的效果。国家标准对这个还有更加复杂的要求,比如数字的用法。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2005-10-27 20:30:16 | 显示全部楼层
[quote:2d1b8bec99="mandrakechina"]我早就说过,效果肯定不对。这才是正确的效果。国家标准对这个还有更加复杂的要求,比如数字的用法。[/quote]
呵呵, 这对 cairo 来说就是正确的。为什么了?
因为在 cairo 中, 它只做一些相对底层的东西, 比如竖写它只要做到把文字垂直放
置就可以了。而要希望要我们要的竖写效果,就要更高层的 pango 的实现了。当然
要完整的实现中文的竖写相当复杂。 而且,在我看来标点符号的问题也不应该由
pango 来处理的, 而是再高一级,因为毕竟 pango 不是 office。 功能是一层一
层来实现的, 你不能一吞掉一头大象。
回复

使用道具 举报

发表于 2005-10-27 20:52:32 | 显示全部楼层
所以我说在cairo中做汉字旋转的补丁没有什么意义,因为汉字本来就不旋转。不过,如果让cairo能够很好的处理标点符号的位置问题倒是值得研究,竖写和横写时标点符号glyph的位置不同。横写时,glyph画在左下角;竖写时,glyph画在右上角。遗憾的是,在Unicode中,这两种标点符号没有进行区分,都是一个逗号(句号什么的也是)。但这样会引入繁体习惯的问题,因为在台湾那边,标点符号统一写在正中间,横写竖写都一样。

Pango上边就是Application了,没法再抽象了。
回复

使用道具 举报

 楼主| 发表于 2005-10-27 20:59:21 | 显示全部楼层
前面我都说过了我写的补丁不是汉字旋转补丁。。。怎么就不能理解了。。。
标点符号的位置也不是 cairo 要处理的问题。
横竖标点的符号的问题就给是应用程序处理的。
回复

使用道具 举报

发表于 2005-10-28 00:31:06 | 显示全部楼层
Well done! sunmoon1997!
能不能再研究一下,怎么让下列代码工作正常?即通过fontconfig替换字体的大小。
[code:1]
        <match target="font" >
                <test qual="any" name="family" compare="eq">
                        <string>SimSun</string>
                        <string>NSimSun</string>
                        <string>宋体</string>
                        <string>新宋体</string>
                </test>
                <test name="pixelsize" compare="more_eq">
                        <!--int>10</int-->
                        <double>10.6</double>
                </test>
                <test name="pixelsize" compare="less">
                        <int>12</int>
                </test>
                <edit name="pixelsize" mode="assign">
                        <int>12</int>
                </edit>
        </match>
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2005-10-28 06:52:37 | 显示全部楼层
[quote:f1bcfbbab9="hzhr"]Well done! sunmoon1997!
能不能再研究一下,怎么让下列代码工作正常?即通过fontconfig替换字体的大小。
[code:1]
        <match target="font" >
                <test qual="any" name="family" compare="eq">
                        <string>SimSun</string>
                        <string>NSimSun</string>
                        <string>宋体</string>
                        <string>新宋体</string>
                </test>
                <test name="pixelsize" compare="more_eq">
                        <!--int>10</int-->
                        <double>10.6</double>
                </test>
                <test name="pixelsize" compare="less">
                        <int>12</int>
                </test>
                <edit name="pixelsize" mode="assign">
                        <int>12</int>
                </edit>
        </match>
[/code:1][/quote]
对 cairo 没用,我也没办法
回复

使用道具 举报

发表于 2005-10-28 22:16:48 | 显示全部楼层
[quote:b9fa056dde="sunmoon1997"]
对 cairo 没用,我也没办法[/quote]
就是要打补丁让 cairo 读一下 fontconfig 的这段配置。
回复

使用道具 举报

发表于 2005-10-29 11:58:11 | 显示全部楼层
[quote:cde49dff10="hzhr"][quote:cde49dff10="sunmoon1997"]
对 cairo 没用,我也没办法[/quote]
就是要打补丁让 cairo 读一下 fontconfig 的这段配置。[/quote]

我也很期待!
回复

使用道具 举报

 楼主| 发表于 2005-10-29 15:03:03 | 显示全部楼层
[quote:f2c7ae083d="xLoneStar"][quote:f2c7ae083d="hzhr"][quote:f2c7ae083d="sunmoon1997"]
对 cairo 没用,我也没办法[/quote]
就是要打补丁让 cairo 读一下 fontconfig 的这段配置。[/quote]

我也很期待![/quote]
fixed in pango.
http://www.magiclinux.org/people/sunmoon1997/patches/pango/pangocairo-fcfont.diff
will you file a bug in bugzilla against pango?
回复

使用道具 举报

发表于 2005-10-29 15:58:40 | 显示全部楼层
I've alreday opened the bug report at 317121. Patch appened.
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-25 16:12 , Processed in 0.128995 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

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