系统相关
首页 > 系统相关> > linux,C,xft:如何使用?

linux,C,xft:如何使用?

作者:互联网

我尝试使用0ft的Xft,让他们称这是一个教程…看起来像是在朝鲜北部的一个营地中写的…我也找到了这个one.所以让我尝试逐步进行:

// g++ XftTest.cc -lX11 -lXft `pkg-config --cflags freetype2`
#include<unistd.h>
#include<X11/Xlib.h>
#include<X11/Xutil.h>
#include<X11/Xft/Xft.h>
int main()
{
  Display *display;
  XftFont      *font;
  XftDraw      *xftdraw;
  XRenderColor xrcolor;
  XftColor     xftcolor;

  display = XOpenDisplay(0);
  Window XP = XCreateSimpleWindow(display,DefaultRootWindow(display),0,0,360,90,0,0,0);
  XMapWindow(display,XP);

  font = NULL; /* added 6/16 */

  //font = XftFontOpenName(display,0,"NorthKorea-50"); // how to check if this is good ?
  font = XftFontOpenName(display,0,"") /* added 6/16 */
  if (!font) return 1;

  xftdraw = XftDrawCreate(display,XP,DefaultVisual(display,0),DefaultColormap(display,0));

  xrcolor.red  =65535;
  xrcolor.green=0;
  xrcolor.blue =0;
  xrcolor.alpha=65535;
  XftColorAllocValue(display,DefaultVisual(display,0),DefaultColormap(display,0),&xrcolor,&xftcolor);

  XftDrawString8(xftdraw, &xftcolor, font, 20,70 , (XftChar8 *)"Joe Dalton", 10);

  XFlush(display);

  sleep(2);

  XftDrawDestroy(xftdraw);
  XftColorFree(display,DefaultVisual(display,0),DefaultColormap(display,0),&xftcolor);

  return 0;
}

如您所见,在XftFontOpenName中:
XftFontOpenName(display,0,“ NorthKorea-50”)
如果您像我一样写废话,就没有错误,或者告诉我我没有所谓的NorthKorea字体.这很有意义,因为XftFontOpenName返回字符串中最接近的字体.

那么,如何检查我的字体是否匹配?如何使用arial这样的字体?我尝试了XftFontOpenName(display,0,“ arial-50”),但没有什么不同.

在我的系统上,我的字体文件夹中有这些文件夹:

$ls /usr/share/fonts/
100dpi  75dpi  cyrillic  encodings  misc  OTF  TTF  Type1  util

我可以通过相同的方式在这些文件夹中使用任何字体吗?

如果你们有一些不错的互联网链接,那对我来说很高兴.

n.b. :没有xft标签…

更新6/16

我仍然迷上了dat的东西…
我不明白,如果我更换

font = XftFontOpenName(display,0,"NorthKorea-50");

通过

font = XftFontOpenName(display,0,"");

它仍在加载字体…

xlsfonts返回很多东西,例如dat one:

-monotype-courier new-bold-r-normal--0-0-0-0-m-0-iso8859-10

但是将其作为参数传递给XftFontOpenName并没有任何改变;我也尝试使用XftFontOpenXlfd加载字体,它总是返回NULL …

解决方法:

xft使用fontconfig进行字体发现. xlsfonts是查询旧的X核心字体系统fontconfig替换的方法. xlsfonts结果不会以任何可靠的方式映射到fontconfig状态.

所以:

>忘掉xft可以工作的任何捷径,就像上个世纪的技术书籍中记录的X核心字体系统一样.完全不同.它不是具有抗锯齿和truetype支持的X核心字体.它可以使用现代字体并进行抗锯齿,但是绝对不能以任何形式使用X核心字体
>阅读fontconfig文档,系统上的fontconfig配置文件,并使用fontconfig实用程序(fc-query,fc-list等)来查询fontconfig状态
>正如维护xorg的人(包括x核心字体和fontconfig)已经告诉您的那样,请勿尝试直接使用xft. xft是首次尝试编写新字体堆栈的产物.它的功能不足以管理现代文本和现代字体.处理现代字体格式复杂性的部分很早以前已在pango中拆分出来(因为事实证明它足够复杂,因此值得一个单独的项目).如果您尝试单独使用xft,则迟早会遇到Pango前置代码中的缺陷,并且没有人会对解决您的问题感兴趣,因为相同的代码已经在Pango方面进行了十年的修复.避免pango不是捷径.避免pango试图依靠一个半成品,多年被遗弃的项目.
>忘记匹配特定的字体文件. fontconfig将积极反对以这种方式工作的任何尝试.在后核心字体世界中,您为字体系统提供了字体模式,它将为您构建匹配的字体.如果结果不是您期望的字体文件,那是因为对该文件进行了评估并发现缺少该文件.如果要fontconfig使用此文件,则必须修复字体文件(添加缺少的字形,缺少的字体样式等),而不要编写代码来尝试强制使用它. Fontconfig认为,呈现用户可以阅读的文本比仅呈现宠物字体可以执行的部分更为重要.是的,这就是现在您习惯在其他系统上考虑它的方式. fontconfig是不同的.只要重写,它的行为就不会像您期望的那样.没有人对这种重写感兴趣,因为在过去的几年中,fontconfig基本上已经非常成功.

标签:xlib,fonts,linux,c-4,fonts,opentype,text-rendering,fontconfig,linux
来源: https://codeday.me/bug/20191030/1970568.html