1

从 XDrawString手册页看来,它接受签名的 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 的限制?

4

1 回答 1

4

X11 协议确实指定了 16 位。

看一下xPolyTextReqin的定义<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;
于 2009-01-19T01:07:32.697 回答