Как Вы создали бы “пиксель идеальный” GUI на Linux?

Я хотел бы, создают GUI, где каждый пиксель находится под моим контролем (т.е. не использование стандартных виджетов, которые что-то как GTK + обеспечивает). Renoise является хорошим примером того, что я надеюсь производить.

Действительно ли переходом является Xlib, или XCB выравнивают лучший способ пойти, или действительно ли возможно достигнуть этого с высокоуровневыми платформами как GTK + (возможно, даже PyGTK)? Я должен смотреть на Каир для рисунка?

Я хотел бы работать в Python или Ruby, если это возможно, но C прекрасен также.

7
задан Marijn 6 September 2012 в 12:15
поделиться

6 ответов

С помощью инструментария Clutter (или другого виджета / инструментария холста) вы можете создать такой интерфейс. Я бы не советовал переходить на уровень Xlib / XCB или DrawingArea, потому что это потребует реализации большей части общих функций, уже присутствующих в холстах.

7
ответ дан 6 December 2019 в 10:48
поделиться

http://www.oluyede.org/blog/writing-a-widget-using-cairo-and-pygtk-28/ показывает, как создать простой виджет с использованием PyGTK и Cairo.

1
ответ дан 6 December 2019 в 10:48
поделиться

Проще говоря, вам нужно что-то, что дает вам ограничивающий прямоугольник и возможность рисовать в нем все, что вы хотите. Такие объекты обычно называют "холстом". Я уже делал это раньше (в Ruby), используя класс FXCanvas, доступный через набор инструментов Fox, но есть и другие (например, wxWidgets, но у меня нет личного опыта работы с этим набором инструментов).

Однако будьте осторожны. Низкоуровневые интерфейсы, подобные этому, обеспечивают большую гибкость, но они также требуют гораздо больше работы с вашей стороны.

1
ответ дан 6 December 2019 в 10:48
поделиться

Вероятно, вам понадобится что-то вроде pygame.

3
ответ дан 6 December 2019 в 10:48
поделиться

GTK и PyGTK, вероятно, не подходят для использования. Это не невозможно, потому что у вас может быть все ваше приложение одним большим gtk.DrawingArea (пример, где это действительно имеет смысл: Gargoyle ), но для любого сложного графического интерфейса вы сойду с ума.

1
ответ дан 6 December 2019 в 10:48
поделиться

В X есть одна проблема с этим подходом, которую вы, возможно, не приняли во внимание. Размер шрифта измеряется в пунктах (одна точка составляет 1/72 дюйма) и, следовательно, изменяется в размере (пикселях) в зависимости от разрешения и размера монитора. Текстовые строки также будут различаться по длине в зависимости от языка, поэтому на самом деле невозможно определить, насколько большими должны быть кнопки и тому подобное. Стандартные инструменты графического интерфейса для X разработаны с учетом этого. Кроме того, было бы легко написать собственный движок тем для GTK, который рисует все виджеты именно так, как вы хотите (используя Cairo [1] или GDK [2]), и заставлять ваше приложение всегда использовать эту тему. Возможно, ваше приложение также сможет установить размер шрифта по умолчанию (в точках) на основе DPI, чтобы всегда получать один и тот же размер в пикселях (и, конечно, не делать ваше приложение переводимым).

Существует по крайней мере пара графических интерфейсов пользователя, использующих этот подход идеального пикселя на основе SDL [3], например AGAR [4], PicoGUI [5] и Guichan [6]. Большинство из них написано на C ++, а некоторые - на C, и, насколько мне известно, ни у одного из них нет привязок ни к Python, ни к Ruby. Затем, используя SDL, у вас может быть только одно окно верхнего уровня, что означает, что ваше приложение (или набор инструментов GUI, который вы используете) должно управлять своим собственным окном для различных диалогов и т. Д. Но я полагаю, что вы все равно имели в виду именно это.

[1] cairographics.org/
[2] library.gnome.org/devel/gdk/unstable/index.html
[3] www.libsdl.org/
[4] libagar.org/
[5] picogui.org/
[6] guichan.sourceforge.net/wiki/index.php / Main_Page

5
ответ дан 6 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: