【发布时间】:2022-01-12 11:59:21
【问题描述】:
我想使用其中一种可用字体而不是默认字体:以下程序的灵感来自test/fonts.cxx 中的源代码:
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
int main(int argc, char **argv) {
Fl_Window* G_win;
G_win = new Fl_Window(300,100,"The font test");
Fl_Box* A = new Fl_Box(30,30,110,50,"The font TEST.");
A -> box(FL_UP_BOX);
int i = 0;
int k = Fl::set_fonts(i ? (i>1 ? "*" : 0) : "-*");
Fl_Box* B = new Fl_Box(145,30,110,50,"The font TEST.");
B -> box(FL_UP_BOX);
B -> labelfont(419);
G_win->show();
return(Fl::run());}
labelfont 命令设置小部件的字体对应于提供的int 值(在示例中,419 对应于 Papyrus)。问题是垂直对齐方式不同,如下图所示:
这是其他字体会出现的问题,而不仅仅是 Papyrus。我在配备 Big Sur (11.6) 的 macBookPro 上使用 FLTK 1.3.5,我还在配备 Ubuntu 19.04 的 Linux 机器上测试了上述代码:即使在后一种情况下,问题仍然存在。
有没有办法像默认字体一样设置垂直位置?
【问题讨论】:
-
标签在您的图像中显示得更高。我在类似的代码上尝试了它,基本上迭代了几种系统字体,它们在我的 kubuntu vm 上看起来不错(也在 Windows 上试过)。所以你可能会遇到某种问题。您使用的是什么版本的 fltk?您是否也在使用 pango 支持进行构建?您也可以尝试继承 Fl_Box 并覆盖 draw() 以使用 fl_draw_box() 绘制一个 upbox,然后使用 fl_draw(label(), x, y, w, h, FL_ALIGN_CENTER) 在顶部绘制文本。
-
我已经在我的Linux机器上测试了代码,配备了Ubuntu 19.04,我在一些字体上也遇到了同样的问题。我在配备 Big Sur OS 的 macBookPro 上使用 fltk 1.3.5。老实说,我不知道 pango 支持是什么。我考虑将 Box 类(以及我将要使用的其他类)子类化来解决这个问题,但我想看看是否有更快的解决方案。
-
Pango 库是 FLTK 可以在带有 X11 的 Linux (Unix) 上使用的一个选项。我不认为这是 macOS 上的一个选项。它改进了文本渲染,并且如果您需要渲染的字符不在当前使用的字体中,它能够使用替换字体。如果您使用的是 macOS,这不适合您。
标签: c++ fonts text-alignment fltk