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 绘图功能使用哪个原点?小部件还是窗口?的主要内容,如果未能解决你的问题,请参考以下文章
如何对 FLTK 中的小部件进行排序以使箭头键导航正常工作?