1
如果我使用加載字體:如何確定X11加載的字體名稱?
char *fName = (char *)"*-c-60-iso8859-1";
XFontStruct *font = XLoadQueryFont(disp, fName);
它可以是任何的多種字體相匹配的通配符名稱。 如何確定實際加載的全名?
[編輯]修正通配符名稱以匹配幾個:-c-
是-m-
哪個不匹配任何。 [END]
如果我使用加載字體:如何確定X11加載的字體名稱?
char *fName = (char *)"*-c-60-iso8859-1";
XFontStruct *font = XLoadQueryFont(disp, fName);
它可以是任何的多種字體相匹配的通配符名稱。 如何確定實際加載的全名?
[編輯]修正通配符名稱以匹配幾個:-c-
是-m-
哪個不匹配任何。 [END]
它是字體的XA_FONT
屬性。
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char* argv[])
{
Display* d = XOpenDisplay(0);
if (!d)
{
fprintf (stderr, "Oops, can't open display\n");
exit(EXIT_FAILURE);
}
while (*++argv)
{
XFontStruct* f = XLoadQueryFont(d, *argv);
unsigned long ret;
if (f == 0)
printf ("XLoadQueryFont failed for %s!\n", *argv);
else
{
if (!XGetFontProperty(f, XA_FONT, &ret))
printf ("XGetFontProperty(%s, XA_FONT) failed!\n", *argv);
else
printf ("Full name for %s is %s\n", *argv, XGetAtomName(d, (Atom)ret));
}
}
return 0;
}
運行:
$ ./prog r14 9x15bold foo
Full name for r14 is -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-JISX0201.1976-0
Full name for 9x15bold is -Misc-Fixed-Bold-R-Normal--15-140-75-75-C-90-ISO8859-1
XLoadQueryFont failed for foo!
非常好。謝謝。我現在也在試驗Xft字體。 – Harvey 2015-01-06 01:30:33
Xft就是這樣,服務器端字體已經死了。我甚至沒有安裝,除了強制固定字體。 – 2015-01-06 05:50:57
終於開始使用這個,它工作。 XLoadQueryFont()在接近任何想要的東西方面做得很差。有些我實際上並不認爲差,而是錯誤的結果。 – Harvey 2015-01-07 13:33:01