質問

XDrawString manページから、それは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の制限ですか?

役に立ちましたか?

解決

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top