XDrawString参数的16位限制

时间:2009-01-19 00:12:50

标签: xlib

从XDrawString man page来看,似乎它签署了32位x和y坐标

  

int XDrawString(Display *display, Drawable d, GC gc, int x, int y, char *string, int length);

注意x和y都是int(即:至少在gcc / linux2.6-i386上32位有符号整数)

问题是,当我传递y = 32767(2 ^ 15 - 1)时,字符串被绘制在正确的位置,但是高于此值的任何东西都不会绘制字符串。

我怀疑不使用内部32位整数,而是使用16位有符号整数作为坐标。

鉴于手册页似乎表明该函数接受32位整数,是否需要转换一些编译选项以允许使用更长的整数?或者这是Xlib的限制吗?

1 个答案:

答案 0 :(得分:4)

X11协议确实指定了16位。

查看xPolyTextReq

<X11/Xproto.h>的定义
typedef struct {
    CARD8 reqType;
    CARD8 pad;
    CARD16 length B16;
    Drawable drawable B32;
    GContext gc B32;
    INT16 x B16, y B16;         /* items (xTextElt) start after struct */
} xPolyTextReq;