Límite de 16 bits en argumentos XDrawString
-
19-08-2019 - |
Pregunta
De la XDrawString página del manual parece que sigue firmando 32 bits coordenadas xey
int XDrawString (Display * display, Drawable d, GC gc, int x, int y, char * string, int length);
Tenga en cuenta que tanto x como y son int (es decir: Entero con signo de 32 bits en gcc / linux2.6-i386 al menos)
El problema es cuando paso y = 32767
(2 ^ 15 - 1) la cadena se dibuja en la ubicación correcta pero cualquier cosa por encima de este valor no se dibuja la cadena.
Sospecho que internamente no se usan enteros de 32 bits, sino enteros con signo de 16 bits para las coordenadas.
Dado que las páginas man parecen indicar que la función acepta enteros de 32 bits, ¿hay alguna opción de compilación que deba activarse para permitir el uso de enteros más largos? ¿O es esto una limitación de Xlib?
Solución
El protocolo X11 especifica 16 bits.
Eche un vistazo a la definición de xPolyTextReq
en <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;