gpt4 book ai didi

c - 在 x11 中添加非常大的字体

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:04 26 4
gpt4 key购买 nike

我想在我的 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;
}

output of above code

这些尺寸对于我的应用来说是不够的。例如,我需要 size-96(在 LibreOffice Writer 中选择时) this is the font selected in LibreOffice Writer, this is size-96. I want like this

还建议加载 TrueType 字体

最佳答案

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

曾几何时:

  • 7/8 位字符编码(每个字体最多 256 个符号)规则,
  • 低分辨率屏幕(最大 800×600)是常态,
  • 字体稀缺(没有真正的字体创建工具,逐像素设计)。

因此人们写了一个叫做 X11 核心字体系统的东西,其主要目的是帮助您在服务器端昂贵的付费公司 256 字符单分辨率位图字体中进行选择。 “帮助”采用晦涩的 XFLD 字符串形式,并以 xfontsel 作为助手。

然后发生了:

  • 桌面出版,
  • vector 字体(Postscript),
  • 智能字体(TrueType 然后是 OpenType:grit-fitting、提示、复杂字形组合和定位、连字等),
  • 大编码字体 (Unicode),
  • 多向语言,
  • 多面字体(不仅是常规+粗体+斜体),
  • 更大的字体可用性(用于网络的 Microsoft 核心字体,然后是 GNOME 的 Bitstream Vera,然后是 Open Fonts 库,然后是 Google 字体目录)
  • 分辨率更高的屏幕
  • 高清分辨率
  • 彩色字体
  • 符号字体(数学、工程符号和表情符号)

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

X11 核心字体系统开始故障转移。它的服务器端缓存模型是真正为小型单尺寸位图字体设计的,而不是复杂的多兆字节 vector 文件。

X11 核心字体维护者(XFRee86 然后是 Xorg)努力使其适应现代,然后放弃,因为整个设计完全不适应。

  • 他们将 vector 字体光栅化(从 vector 转换为位图)外包给了 freetype。
  • 字形缓存已通过 fontconfig 移动到客户端(使用 Xft 作为垫脚石,您应该完全忘记)
  • 文本方向已移至 freebidi。
  • 事实证明,TrueType/OpenType 的“智能”部分对于 freetype 而言过于复杂,因此再次外包给 GTK(pango…)和 QT 整形引擎
  • 然后(一旦两个团队都受够了分别处理 OpenType 细节和规范更新)再次合并到 harfbuzz-ng。

每个复杂的开源软件处理重要的文本都被移植到新堆栈。 Including massive codebases such as LibreOffice

大供应商注意到并开始直接为这些项目做出贡献(例如,现在 freetype 使用的 CFF 引擎是由 Adob​​e 编写的。市场上大多数 Opentype OTF 字体都使用 CFF 形状)。

唯一不关心的是专有 UNIX 软件的供应商,他们很乐意向您出售围绕 1980 年代 SGI/Solaris/HP-UX 工作站的功能设计的过时图形代码,喜欢看不起 Linux 系统,并等待 Windows NT 风靡全局。他们的目标客户通常是工程/科学人员,只要别无选择并且计算看起来正确,他们就准备好处理破损的文本。尽管那些人喜欢他们的数据可视化图表。我怀疑 HiDPI 将是停留在 X11 位图字体时代的科学软件的终结。

因此:

  • 不要试图将 X11 核心字体系统推向极限,许多其他人在您之前尝试过并最终放弃了它
  • 除非你想被降级到与上个世纪的 Unix 工作站相同的墓地,否则在你仍然有一些用户的时候将你的代码移植到 fontconfig+freebidy+freetype+harfbuzz-ng

关于c - 在 x11 中添加非常大的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42531831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com