当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 看一下7.04里libqt3-mt新加的这个patch
帖子发表于 : 2007-03-07 9:12 

注册: 2006-09-27 20:49
帖子: 131
送出感谢: 0 次
接收感谢: 4
最新的libqt3-mt-3.3.7里多了这么个patch,按照changelog:
引用:
* debian/patches/61_fcfontmatch_fontwidth_fix.dpatch
Fix font matching with fontconfig. This resolves inconsistency with
determining font width (e.g. Dejavu Sans "Condensed" may get selected
instead of "Book" for Sans Serif font) for default fonts (Sans Serif,
Serif and Monospace). This bug is very important because it makes
default KDE fonts look ugly in most cases.

大概意思是qt在选择缺省字体时(如Sans Serif)会出现偏差,错误计算字体的宽度,这个补丁则修正了这个错误。
但实际上我升级到libqt3-mt-3.3.7后,qt反而无法正确选择Sans Serif字体(我在fontconfig里配置的是所有sans-serif字体的第一选择都是Bitstream Vera Sans,但在qt里选Sans Serif出来的却是一个很难看的字体,与此同时gtk+的程序没问题,证明fontconfig的配置没错)
我把libqt3-mt-3.3.7重新打包,去掉了这个patch后,qt的Sans Serif字体选择就和fontconfig一致了。
我想请教各位qt/KDE高手,这个patch在这里究竟起什么作用,我对qt和fontconfig的字体选择还不是很清楚。

补丁如下:
代码:
--- qt-x11-free-3.3.7/src/kernel/qfontdatabase_x11.cpp   2006-12-28 21:40:34.000000000 +0200
+++ qt-x11-free-3.3.7/src/kernel/qfontdatabase_x11.cpp   2006-12-28 21:43:44.000000000 +0200
@@ -1,4 +1,4 @@
-/****************************************************************************
+/***************************
 ** $Id: qt/qfontdatabase_x11.cpp   3.3.7   edited Feb 13 2006 $
 **
 ** Implementation of platform specific QFontDatabase
@@ -1504,13 +1504,24 @@
       convert the pixel size to a point size and request that.
     */
     double size_value = request.pixelSize;
+    double dpi = QPaintDevice::x11AppDpiY(fp->screen);
     double scale = 1.;
     if ( size_value > MAXFONTSIZE_XFT ) {
    scale = (double)size_value/(double)MAXFONTSIZE_XFT;
    size_value = MAXFONTSIZE_XFT;
     }
-
-    size_value = size_value*72./QPaintDevice::x11AppDpiY(fp->screen);
+#ifdef QT_XFT2
+    /*
+     2006-12-28 If QT is not compiled against xft1, there is no need
+     for the workaround above (confirmed). Thus, in addition, add
+     font pixelsize to the pattern to avoid fontconfig making wrong
+     guesses. Also provide a DPI value for fontconfig so it never
+     attempts to fallback to its default.
+    */
+    XftPatternAddDouble(pattern, XFT_PIXEL_SIZE, size_value);
+    XftPatternAddDouble(pattern, XFT_DPI, dpi);
+#endif
+    size_value = size_value*72./dpi;
     XftPatternAddDouble( pattern, XFT_SIZE, size_value );
 
 #ifdef XFT_MATRIX
@@ -1875,6 +1886,11 @@
     FcResult result;
         FcFontSet *fs = 0;
         FcPattern *fsp = 0;
+
+   // Properly conform to fontconfig API. We need to call FcDefaultSubstitute()
+   // before FcFontSort()/FcFontMatch().
+   FcDefaultSubstitute(pattern);
+
         if( use_fontsort ) {
             fs = FcFontSort(0, pattern, FcFalse, 0, &result);
     if (!fs)


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-03-08 23:51 

注册: 2006-09-27 20:49
帖子: 131
送出感谢: 0 次
接收感谢: 4
google了一下,发现自己火星了。
我碰到的这个问题只发生在非英语locale上,如LANG=zh_CN.UTF-8,这时qt会用一个中文字体里的英文字作为Sans Serif的候选字。当用英语locale时(如LANG=en_US.UTF-8 LC_CTYPE=zh_CN.UTF-8 这种情况),Sans Serif的候选字和fontconfig是一致的。
应该理解为qt对于fontconfig的配置还有自己的考虑。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译