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ビット符号付き整数)

問題は、(2 ^ 15-1)を渡すとy = 32767、文字列が正しい場所に描画されますが、この値を超えると文字列が描画されないことです。

内部的には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 に答える