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公司真是不负责任,看来关键时刻,还是自己动手的好:)
