2015-01-04 21 views
1

如果我使用加載字體:如何確定X11加載的字體名稱?

char *fName = (char *)"*-c-60-iso8859-1"; 
XFontStruct *font = XLoadQueryFont(disp, fName); 

它可以是任何的多種字體相匹配的通配符名稱。 如何確定實際加載的全名?

[編輯]修正通配符名稱以匹配幾個:-c--m-哪個不匹配任何。 [END]

回答

3

它是字體的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! 
+0

非常好。謝謝。我現在也在試驗Xft字體。 – Harvey 2015-01-06 01:30:33

+0

Xft就是這樣,服務器端字體已經死了。我甚至沒有安裝,除了強制固定字體。 – 2015-01-06 05:50:57

+0

終於開始使用這個,它工作。 XLoadQueryFont()在接近任何想要的東西方面做得很差。有些我實際上並不認爲差,而是錯誤的結果。 – Harvey 2015-01-07 13:33:01