如何使用GTK和Pango来判断字体是否为等宽字体?

3
我有一个 PangoFontDescription ,想知道它是否描述了等宽字体。在 Pango API 文档中我看到了 pango_font_family_is_monospace() 函数,但经过数小时的研究后,我仍不清楚 PangoFontFamily, PangoFontMap, PangoFont, PangoFontset, PangoContextPangoFontDescription 之间的关系,以及我是否需要使用所有这些才能实现我想要的结果。到目前为止,PangoFontDescription 是我需要使用的 Pango 的唯一部分,因为 GTK 把其余的都抽象掉了。
有没有做过这件事的人可以帮帮我呢?
1个回答

3
你可以使用pango_font_description_get_family()函数获取字体族名,然后在结果上调用pango_font_family_is_monospace()函数。
编辑:
由于pango_font_description_get_family()仅返回名称,因此您可以调用pango_context_list_families()函数并搜索具有该名称的字体族对象。之后,在找到的对象上调用pango_font_family_is_monospace()函数。不过,如果没有找到具有该名称的字体族对象,我不确定该怎么办。

1
但是pango_font_description_get_family()返回字体系列的名称,而pangofont_family_is_monospace()需要一个实际的PangoFontFamily指针。我认为这不起作用。 - unwind
我该如何从PangoFontDescription中获取PangoContext?通常,PangoContextGtkWidget相关联,但我认为我不需要小部件就可以找出字体是否是等宽字体。 - ptomato
1
@ptomato:你做不到。我在源代码中查找了一下,PangoFontDescription根本没有引用家族对象。仅从名称找到一个家族是否是等宽字体的方法不存在,而且获取PangoFontFamily的唯一方法似乎是从PangoContext中获取。 - user319799
@doublep:谢谢。 @ptomato:可能是主题可以改变一个字体族映射到哪种实际字体,这可能使得在不更加具体的情况下无法确定。并不是说一定是这样,但可能会发生。 - unwind
嗯,谢谢你的回答。有点失望,但我想你是对的。 - ptomato

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