Question

D'après la page de manuel de XDrawString, il semble qu'elle soit signée 32 bits coordonnées x et y

  

int XDrawString (Display * display, Drawable d, GC       gc, int x, int y, char * chaîne, int longueur);

Notez comment x et y sont tous les deux int (c'est-à-dire: un entier signé 32 bits signé sur gcc / linux2.6-i386 au moins)

Le problème, c’est que lorsque je passe y = 32767 (2 ^ 15-1), la chaîne est dessinée à l’emplacement correct, mais si vous dépassez cette valeur, elle ne sera pas dessinée.

Je soupçonne que les entiers 32 bits en interne ne sont pas utilisés, mais des entiers signés 16 bits pour les coordonnées.

Étant donné que les pages de manuel semblent indiquer que la fonction accepte les entiers 32 bits, existe-t-il une option de compilation à transformer pour autoriser l'utilisation d'entiers plus longs? Ou est-ce une limitation de Xlib?

Était-ce utile?

La solution

Le protocole X11 spécifie 16 bits.

Consultez la définition de xPolyTextReq dans < 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top