代码之家  ›  专栏  ›  技术社区  ›  hhafez

xdrawstring参数的16位限制

  •  1
  • hhafez  · 技术社区  · 16 年前

    从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 回复  |  直到 16 年前
        1
  •  4
  •   Alnitak    16 年前

    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;