FLTK 绘制函数使用哪个原点?小部件还是窗口?

问题描述

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

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

gauge showing at window (0,0) and not (0,400)

initialization of new gauge object

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

解决方法

在我看来,您需要自己翻译原文。在 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,h);
}

并且您可以看到他们在 x,y 而非 0,0 处绘制方框。

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