如何确定X11加载的字体名称?

4
如果我使用以下方式加载字体:
char *fName = (char *)"*-c-60-iso8859-1";
XFontStruct *font = XLoadQueryFont(disp, fName);

它可能是与通配符名称匹配的多个字体中的任何一个。 我如何确定实际加载的完整名称?

[编辑] 更正通配符名称以匹配多个字体:-c--m-,它没有匹配任何内容。[结束]

1个回答

5

这是字体的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
Xft是一种新的方式,服务器端字体已经死亡。我甚至没有安装任何字体,除了必须的固定字体。 - n. m.
最终开始使用它了,而且它运行得很好。XLoadQueryFont() 函数在近似我想要的任何东西方面的表现都非常差。有些情况下结果并不是表现糟糕,而是由于漏洞所致。 - Harvey
你到底想要什么?请注意,XLoadQueryFont是一个相当古老且稳定的API,你所感知到的任何错误可能只是由于误解而非真正的错误。 - n. m.
是的,我认为你说得很对。想要什么?嗯,只是为了让我的学习更快一些;我想要达到我的工作的真正目的。顺便说一句,再次感谢你帮助我加速进展。 - Harvey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接