16-разрядное ограничение на аргументы XDrawString

StackOverflow https://stackoverflow.com/questions/456185

  •  19-08-2019
  •  | 
  •  

Вопрос

Из XDrawString справочная страница похоже, что он использует подписанные 32-битные координаты x и y

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

Обратите внимание, что оба x и y являются int ( т. е.:32-разрядное целое число со знаком, по крайней мере, в gcc / linux2.6-i386 )

Проблема в том, что когда я прохожу y = 32767 (2^ 15 - 1) строка отображается в правильном месте, но все, что выше этого значения, строка не отображается.

Я подозреваю, что внутренне 32-битные целые числа не используются, а вместо этого используются 16-битные целые числа со знаком для координат.

Учитывая, что справочные страницы, похоже, указывают, что функция принимает 32-разрядные целые числа, есть ли какая-нибудь опция компиляции, которую необходимо включить, чтобы разрешить использование более длинных целых чисел?Или это ограничение Xlib?

Это было полезно?

Решение

Протокол X11 действительно определяет 16 бит.

Взгляните на определение для xPolyTextReq в <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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top