Включить сглаживание с помощью Xlib

Я пытаюсь разработать собственный набор библиотек для создания графических интерфейсов в Linux, включая виджеты, кнопки и т. д. Итак, сейчас я учусь создавать пользовательские интерфейсы с помощью X11 и его < em>Xlib. Я дошел до того, что у меня есть красивое окно заданного размера, в указанной позиции, с заданным цветом фона и возможностью рисования точек, прямоугольников, дуг. Однако, когда я нарисовал свой первый круг, я был очень разочарован тем фактом, что круг не сглажен. Я вижу каждый пиксель как квадрат.

Теперь вопрос легкий. Есть ли способ сказать X: пожалуйста, сгладьте что-нибудь перед рисованием? Или мне следует избегать использования XDrawArc и использовать пользовательскую функцию, которая вызывает XDrawPoint для каждой точки окружности? Или есть третье решение?

Заранее спасибо.


person Francesco Boffa    schedule 13.06.2011    source источник


Ответы (3)


Короткий ответ - нет". Xlib не выполняет сглаживание.

Более длинный ответ: «Вы можете использовать API более высокого уровня, например Cairo Graphics». Самому качать не обязательно.

person n. 1.8e9-where's-my-share m.    schedule 13.06.2011
comment
Cairo Craphics может выполнять растеризацию и загрузку на стороне клиента. Если вы хотите остаться с X11, обычным подходом будет использование XRender. - person datenwolf; 14.06.2011
comment
@datenwolf: насколько я понимаю, Cairo может использовать XRender, когда он доступен. - person n. 1.8e9-where's-my-share m.; 14.06.2011
comment
Да, я могу это сделать, если скомпилирован с правильными параметрами. Однако у меня сложилось впечатление, что ОП хочет максимально приблизиться к X11. - person datenwolf; 14.06.2011

Вы столкнулись с ограничениями основного протокола X11; технически было бы вполне возможно добавить к нему сглаживание, но этого не произошло.

Вместо этого есть расширение XRender, предоставляющее хорошие сглаженные примитивы. Вы также захотите изучить Xft для рендеринга сглаженного текста с использованием векторных шрифтов.

person datenwolf    schedule 14.06.2011

Вы можете накатить свой собственный алгоритм сглаживания. У вас есть только 2 необходимых примитива: 1) функция для рисования точек TrueColor (а именно, xcb_poly_point(), если вы используете XCB) и 2) циклы for.

person étale-cohomology    schedule 02.05.2017