如何使用XDrawPoint设置起始位置

时间:2014-09-22 21:10:09

标签: c position x11

我在C中的X11库中使用XDrawPoint(d, w, DefaultGC(d, s), x, y) ;在屏幕上绘制一个点。 xy是将在其中绘制点的x和y坐标。

问题在于,如果我要绘制XDrawPoint(d, w, DefaultGC(d, s), -x, y) ;,则该点不会显示在屏幕上。我认为这是因为初始位置设置为0,0这使得该点消失。

是否可以在屏幕中间设置起始位置,因此在绘制负x和y坐标时,这些点仍会显示?

感谢

1 个答案:

答案 0 :(得分:0)

AFAIK,调用XDrawPoint()时无法从左上角更改原点。

虽然XDrawPoints()允许您指定CoordModePrevious的模式来指定相对于前一个的坐标,但我假设您不希望在窗口的中心之前绘制一个点。每一点。

实现绘图的中心原点的一种可能方法是自己计算并将您的点添加为偏移量

使用简单的结构:

typedef struct {
    int x;
    int y;
} ORIGIN;

ORIGIN origin;

然后将其设置到窗口中间w

Window       urw;              // unused root window
unsigned int ux, uy, ub, ud;   // unused width, height, border, depth
unsigned int w, h;

XGetGeometry(d, w, &urw, &ux, &uy, &w, &h, &ub, &ud);

origin.x = w/2;
origin.y = h/2;

并最终将其用作绘图的偏移量:

XDrawPoint(d, w, DefaultGC(d, s), origin.x+x, origin.y+y);

当然,如果要调整窗口大小,则必须重新计算原点,并且除以2时奇数大小将被截断。