Limite di 16 bit per gli argomenti XDrawString
-
19-08-2019 - |
Domanda
Dalla XDrawString man page sembra che aceepts sia firmato a 32 bit coordinate xey
int XDrawString (Display * display, Drawable d, GC gc, int x, int y, char * string, int length);
Nota come entrambi xey sono int (cioè: intero con segno a 32 bit su gcc / linux2.6-i386 almeno)
Il problema è quando passo y = 32767
(2 ^ 15 - 1) la stringa viene disegnata nella posizione corretta ma qualsiasi cosa al di sopra di questo valore la stringa non viene disegnata.
Sospetto che non vengano utilizzati numeri interi a 32 bit, ma invece numeri interi a 16 bit per le coordinate.
Dato che le pagine man sembrano indicare che la funzione accetta numeri interi a 32 bit, c'è qualche opzione di compilazione che deve essere attivata per consentire l'uso dei numeri interi più lunghi? O è una limitazione di Xlib?
Soluzione
Il protocollo X11 specifica 16 bit.
Dai un'occhiata alla definizione di 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;