FLTK 绘图功能使用哪个原点?小部件还是窗口?

Posted

技术标签:

【中文标题】FLTK 绘图功能使用哪个原点?小部件还是窗口?【英文标题】:Which origin does FLTK draw function use ? Widget or Window? 【发布时间】:2021-05-25 00:27:13 【问题描述】:

我正在尝试创建一个自定义 rpm 仪表小部件。当我自己测试时,一切看起来都很好。 但是当我尝试在父窗口中的不同位置绘制它时,无论我传递给构造函数的 x 或 y 值是什么,它似乎总是使用窗口的原点而不是小部件的原点进行绘制。

调用构造函数后的 printf() 确认小部件“知道”预期的 x 和 y。

这是默认行为吗?我认为绘图功能使用小部件 0,0 而不是窗口。我是否需要在绘图函数中显式调用 x() 和 y() 并应用变换来纠正这个问题?

【问题讨论】:

【参考方案1】:

是的,没错。 FLTK 1.x 中的所有坐标都相对于窗口。子窗口创建自己的坐标空间,即子窗口中的坐标相对于子窗口,而不是主窗口。

【讨论】:

【参考方案2】:

在我看来,您需要自己翻译原点。在documentation 中它说:

制作自己的盒子类型 ... 绘图功能 绘图函数会传递小部件的边界框和背景颜色。 一个简单的绘图函数可能会用给定的颜色填充一个矩形,然后绘制一个黑色轮廓:

void xyz_draw(int x, int y, int w, int h, Fl_Color c) 
  fl_color(c);
  fl_rectf(x, y, w, h);
  fl_color(FL_BLACK);
  fl_rect(x, y, w, h);

你可以看到他们在x, y而不是0, 0绘制他们的盒子。

(对于上下文,框只是一种特定类型的小部件)。

【讨论】:

以上是关于FLTK 绘图功能使用哪个原点?小部件还是窗口?的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的小部件在任何窗口上绘制

fltk 小部件顺序,按钮隐藏在另一个小部件下

如何对 FLTK 中的小部件进行排序以使箭头键导航正常工作?

如何在pyqt5中为一个小部件制作一个清晰的板子功能

如何在 FLTK 中对两个不同的小部件同时使用键盘箭头和鼠标单击?

C++ 动态显示或隐藏 FLTK 小部件?