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?

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top