博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

孙高勇的BLOG

我渴望平静,风却给了我涟漪
sungaoyong.cublog.cn


解决了qt4.2 snapshot中中文字体显示模糊的bug
qt4.2的snapshot版本出来了,喜欢追新,就下了最新的snapshot看看,结果发现中文字体在这个版本上显示模糊。自己尝试着查找bug,发现这个不是字体引擎的问题,而是qt4.2的qpaintengine_x11在显示字体时的问题,自己对QX11PaintEngine::drawFreetype(const QPointF &p, const QTextItemInt &ti)
。。。。。。     
 for (int i = 1; i < glyphs.size(); ++i) {
     QFontEngineFT::Glyph *g = ft->cachedGlyph(glyphs[i - 1]);
     if (g
             && positions[i].x == xp + g->advance
             && positions[i].y == yp) {
             elt.nchars++;
             xp += g->advance;
        } else {
。。。。。。

进行修改如下:
  for (int i = 1; i < glyphs.size(); ++i) {
        QFontEngineFT::Glyph *g = ft->cachedGlyph(glyphs[i - 1]);
        if (g
           && positions[i].x == xp + g->advance
           && positions[i].y == yp) {

        XRenderCompositeText32(X11->display, PictOpOver, src, d->picture,
                                       maskFormat, 0, 0, 0, 0,
                                      &elt, 1);
        xp = qRound(positions[i].x);
                yp = qRound(positions[i].y);
               
                elt.glyphset = glyphSet;
                elt.chars = &glyphs[i];
                elt.nchars = 1;
                elt.xOff = qRound(xp);
                elt.yOff = qRound(yp);
                //elt.nchars++;
                xp += g->advance;
            }else {  
。。。。。。
在我的ubuntu dapper上是可以正常显示汉子了。今天把这个bug提交给了Troll公司,估计在最近这个bug就会被修复好了。其实在Task Tracker上看到有个bug id是122829的bug,处理结果是Resolved,并不是fixed,Troll公司真是不负责任,看来关键时刻,还是自己动手的好:)


发表于: 2006-08-07 ,修改于: 2006-08-07 15:38,已浏览1428次,有评论1条 推荐 投诉


网友评论
内容:
"今天把这个bug提交给了Troll公司,估计在最近这个bug就会被修复好了"
事实上,至今Qt4的新版本仍然没有解决这个问题,我已经贵文做成Qt4的专用补丁了,可惜我目前的水平还看不懂这些。
haulm评论于:2006-12-01 00:40:58 (121.71.46.★)

发表评论