|
楼主 |
发表于 2005-9-16 19:46:43
|
显示全部楼层
上述情况描述的是当/usr/X11R6/bin/X默认启动的情况,而不是在像magiclinux加-dpi 96
的时候,默认启动的时候X的DPI实际为75,而非96。
上面那个选项的设置如果是kdm登陆的话在配置文件/usr/share/config/kdm/kdmrc中:
ServerCmd=/usr/X11R6/bin/X -dpi 96
如果是startx启动的话在~/.xserverrc 或 /etc/X11/xinit/xserverrc中,如果不存在则
默认用X:0启动,中间还有调用xinitrc启动相应桌面的过程这里忽略了。
奇怪的是,即算不加-dpi 96显示的字体还是会与DPI为96的时候一致,分析了一下原因,X
配置文件中有几项与字体配置相关选项:
[root@wj-srv1 ~]# xrdb -query | grep -i xft
Xft.dpi: 96
Xft.antialias: 0
Xft.hinting: 1
Xft.hintstyle: hintmedium
Xft.dpi就是字体英尺像素的开关,所以不管X怎么启动,字体的大小都为96像素每英尺计算。
这个配置文件在/usr/share/config/kdm/Xresources和/etc/X11/Xresources中,是通过X
资源装载程序xrdb装载的。
所以有很多linux程序默认字体大小为12而不是9号字,比如qt程序中QTSRC/src/kernel/qfont.h:
QFont( const QString &family, int pointSize = 12, int weight = Normal,
bool italic = FALSE );
fontconfig的源代码中fontconfig-2.3.2/src/fcdefault.c:
void
FcDefaultSubstitute (FcPattern *pattern)
....
if (FcPatternGet (pattern, FC_PIXEL_SIZE, 0, &v) == FcResultNoMatch)
{
double dpi, size, scale;
/* 如果未设置字体大小默认用12号字 */
if (FcPatternGetDouble (pattern, FC_SIZE, 0, &size) != FcResultMatch)
{
size = 12.0;
(void) FcPatternDel (pattern, FC_SIZE);
FcPatternAddDouble (pattern, FC_SIZE, size);
}
if (FcPatternGetDouble (pattern, FC_SCALE, 0, &scale) != FcResultMatch)
{
scale = 1.0;
(void) FcPatternDel (pattern, FC_SCALE);
FcPatternAddDouble (pattern, FC_SCALE, scale);
}
size *= scale;
/* 如果未设置DPI默认用75(这与X后台默认值对应) */
if (FcPatternGetDouble (pattern, FC_DPI, 0, &dpi) != FcResultMatch)
{
dpi = 75.0;
(void) FcPatternDel (pattern, FC_DPI);
FcPatternAddDouble (pattern, FC_DPI, dpi);
}
size *= dpi / 72.0; /* 字体大小到实际PIXEL大小,是上面公式的反算 */
FcPatternAddDouble (pattern, FC_PIXEL_SIZE, size);
}
....
实际上,在X启动时加-dpi 96并不是很好的方法与X标准设置不一致,也与许多程序代码
内部操作不吻合。现在很多其他的发行版本并没有这样做比如fedora字体标准大小就是
12号字,但是从magiclinux的实际情况来看好像还不错。 |
|