Frage

Von der XDrawString Manpage rel="nofollow es scheint, dass es 32-Bit unterzeichnet aceepts x und y-Koordinaten

  

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

Beachten Sie, wie beide x und y int (dh: 32-Bit-Ganzzahl mit Vorzeichen auf gcc / Linux2.6-i386 mindestens)

Das Problem ist, wenn ich y = 32767 (2 ^ 15-1) übergeben. Die Saite gezogen wird, an der richtigen Stelle, aber etwas über diesem Wert wird die Zeichenfolge nicht gezogen

Ich vermute, dass intern 32 Bit-Integer nicht verwendet werden, sondern 16-Bit-Integer mit Vorzeichen für die Koordinaten.

Da die man-Seiten zu zeigen scheinen, dass die Funktion 32-Bit-Integer akzeptiert, gibt es einige Kompilierung-Option, die die Verwendung der längeren ganzen Zahlen gedreht werden muss, um zu ermöglichen? Oder ist das ein limmitation von Xlib?

War es hilfreich?

Lösung

Das X11-Protokoll hat 16 Bits angeben.

Haben Sie einen Blick auf die Definition für xPolyTextReq in <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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top