C-在X11中添加具有非常大尺寸的字体



我想在X11应用程序中添加字体。我尝试添加,但我发现使用字体名称更改大小的困难。当我更改字体的点和像素时,它变成了很小的字体。任何人都可以帮助获取大字体名称。

在这里,我附上了我尝试过的示例代码,

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
    Display *d;
    Window w,w1, w2, w3;
    XEvent e;
    int s;
    XGCValues gr_values1 , gr_values2, gr_values3;
    XFontStruct *font1, *font2, *font3;
    GC gr_context1, gr_context2, gr_context3;
    XColor color, dummy;
    d=XOpenDisplay(NULL);
    if (d == NULL) {
        fprintf(stderr,"cant't open the display");
        exit(1);
    }
    s=DefaultScreen(d);
    w=XCreateSimpleWindow(d,RootWindow(d,s),0,0,DisplayWidth(d,s),DisplayHeight(d,s),2,BlackPixel(d,s),WhitePixel(d,s));
    w1=XCreateSimpleWindow(d,w,200,200,200,100,2,BlackPixel(d,s),WhitePixel(d,s));
    w2=XCreateSimpleWindow(d,w,400,200,200,100,2,BlackPixel(d,s),WhitePixel(d,s));
    w3=XCreateSimpleWindow(d,w,600,200,200,100,2,BlackPixel(d,s),WhitePixel(d,s));
    font1 = XLoadQueryFont(d, "-adobe-new century schoolbook-bold-r-normal--24-240-75-75-p-149-iso8859-9");
    font2 = XLoadQueryFont(d, "-adobe-new century schoolbook-bold-r-normal--18-180-75-75-p-113-iso8859-9");
    font3 = XLoadQueryFont(d, "-adobe-new century schoolbook-bold-r-normal--12-120-75-75-p-77-iso8859-9");
    XAllocNamedColor(d, DefaultColormap(d, s),"purple",&color,&dummy);
    gr_values1.font = font1->fid;
    gr_values1.foreground = color.pixel;
    gr_context1=XCreateGC(d,w,GCFont+GCForeground, &gr_values1);
    gr_values2.font = font2->fid;
    gr_values2.foreground = color.pixel;
    gr_context2=XCreateGC(d,w,GCFont+GCForeground, &gr_values2);
    gr_values3.font = font3->fid;
    gr_values3.foreground = color.pixel;
    gr_context3=XCreateGC(d,w,GCFont+GCForeground, &gr_values3);
    XSetFont(d,gr_context1,font1->fid);
    XSetFont(d,gr_context2,font2->fid);
    XSetFont(d,gr_context3,font3->fid);
    XSelectInput(d,w,ExposureMask);
    XSelectInput(d,w1,KeyPressMask);
    XSelectInput(d,w2,KeyPressMask);
    XSelectInput(d,w3,KeyPressMask);
    XMapWindow(d,w);
    while(1){
        XNextEvent(d, &e);
        if (e.xany.window == w) {
            if (e.type == Expose) {
                 XMapWindow(d,w1);
                 XMapWindow(d,w2);
                 XMapWindow(d,w3);
            }
        }
        if (e.xany.window == w1) {
            if (e.type == KeyPress) {
                XDrawString(d,w1,gr_context1,50,50,"hello",5);
                XDrawString(d,w2,gr_context2,50,50,"hello",5);
                XDrawString(d,w3,gr_context3,50,50,"hello",5);
            }
        }
    }
    XCloseDisplay(d);
    return 0;
}

以上代码的输出

这些尺寸不足以容纳我的应用。例如,我需要Size-96(在Libreoffice Writer中选择时)这是Libreoffice作者中选择的字体,这是Size-96。我想要这个

还建议加载truetype字体

[漫长的解释,因为简短评论似乎不足]

一次:

  • 7/8位字符编码(每字体最大256个符号),
  • 低分辨率屏幕(800×600最大)是标准,
  • 字体很少(没有真正的字体创建工具,像素设计的像素)。

因此,人们写了一些名为X11 Core Font系统的东西,其主要目标是帮助您在服务器端昂贵的付费公司256个字符的单分辨率单图字体中选择。和"帮助"以晦涩的Xfld字符串形式,Xfontsel为助手。

然后发生:

  • 桌面出版,
  • 向量字体(Postscript),
  • 智能字体(TrueType然后使用opentype:砂砾,暗示,复杂的字形构图和定位,结扎等),
  • 大型编码字体(unicode),
  • 多向语言,
  • 多缩的字体(不仅是常规 粗体 斜体),
  • 较大的字体可用性(网络的Microsoft Core Fonts,然后是Gnome的Bitstream Vera,然后是Open字体库,然后是Google Fonts Directory)
  • 更好的分辨率屏幕
  • hidpi
  • 颜色字体
  • 符号字体(数学,工程符号和表情符号)

用户开始不关心大约90%的XFLD字符串设置。

X11 Core Fonts系统开始失败。它的服务器端缓存模型确实是为小型单尺寸位图字体而设计的,而不是复杂的多型矢量文件。

X11核心字体维护者(XFREE86然后Xorg)挣扎了一段时间以使其适应现代,然后放弃了,因为整个设计完全不适合。

  • 他们将矢量字体栅格化(从向量到位图转换为freetype)将矢量字体栅格化。
  • 字形缓存是用fontconfig移动了客户端的(XFT作为垫脚石,您应该完全忘记)
  • 文本方向移至FreeBidi。
  • 事实证明,TrueType/Opentype的"智能"部分对于Freetype来说太复杂了,因此它再次外包给GTK(Pango…)和QT塑料引擎
  • 然后(一旦两个团队都厌倦了处理Opentype的细节和规格更新),再次合并在Harfbuzz-ng中。

每个操纵重要的文本的复杂开源软件都将移植到新堆栈中。包括大量代码库,例如Libreoffice

大供应商注意到并开始直接为这些项目做出贡献(例如,当今Freetype使用的CFF引擎是由Adobe撰写的。市场上的大多数Opentype OTF Fonts都使用CFF形状)。

)。

唯一不在乎的人是专有Unix软件的供应商,他们很乐意向您出售围绕1980年SGI/SOLARIS/SOLARIS/HP-UX工作站的功能而设计的图形代码,喜欢看Linux Systems,Linux Systems,并等待Windows NT席卷全世界。他们的目标客户通常是工程/科学人员,只要没有其他选择并且计算似乎是正确的,他们就可以准备应对文本。尽管这些人喜欢他们的数据可视化图。我怀疑Hidpi将成为X11位图字体时代的科学软件的终结。

因此:

  • 不要试图将X11 Core Fonts系统推到其极限上,许多其他人在您面前尝试过,最终放弃了
  • 除非您想与过去的Century Unix工作站降级到同一墓地,否则将代码移植到FontConfig FreeBidy FreeType Freetype Harfbuzz-ng,而您仍然有一些用户

最新更新