2009-01-19 61 views
1

從XDrawString man page似乎它aceepts符號32位x和y座標16位限制

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

說明x和y如何INT(即:32至少在gcc/linux2.6-i386上有點有符號整數)

問題是當我通過y = 32767(2^15 - 1)時,字符串被繪製在正確的位置,但是任何大於這個值的字符串都沒有繪製。

我懷疑內部32位整數不使用,而是16位有符號整數的座標。

鑑於手冊頁似乎表明該函數接受32位整數,是否有一些編譯選項需要轉爲允許使用較長的整數?或者這是Xlib的限制嗎?

回答

4

X11協議確實指定了16位。

有在<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; 
+0

看看定義xPolyTextReq反正是有解決這個? – hhafez 2009-01-19 01:09:44