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?

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top