Pergunta

A partir da página homem XDrawString parece que aceepts assinado de 32 bit coordenadas x e y

int XDrawString(Display *display, Drawable d, GC gc, int x, int y, char *string, int length);

Note como ambos x e y são int (ou seja: 32 bit inteiro assinado no gcc / Linux2.6-i386 pelo menos)

O problema é quando eu passar y = 32767 (2 ^ 15-1). A string é tirada no local correto, mas nada acima deste valor a cadeia não é desenhada

Eu suspeito que, internamente 32 bit inteiros não são usados, mas em vez de 16 bits assinado inteiros para as coordenadas.

Uma vez que as páginas man parecem indicar que a função aceita 32 bits inteiros, existe alguma opção de compilação que precisa ser ativado para permitir o uso dos inteiros longos? Ou este é um limmitation de Xlib?

Foi útil?

Solução

O protocolo X11 faz especificar 16 bits.

Tenha um olhar para a definição para xPolyTextReq em <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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top