Использование GTK+ в системе X Window
Использование GTK+ в системе X Window — аспекты использования GTK+ для X11
GTK+ для системы X Window
В UNIX система X является стандартным бэкэндом для GTK+. Поэтому вам не нужно выполнять никаких специальных действий при его компиляции, и всё должно работать «само собой».
Чтобы интегрировать низкоуровневые функции Xlib в программу GTK, см.
GTK+ включает механизм встраивания между процессами в виде виджетов #GtkSocket и #GtkPlug. Они специфичны для X11, и для их использования нужно подключить заголовок gtk/gtkx.h.
X11-специфические параметры командной строки
Бэкэнд X понимает дополнительные параметры командной строки.
--display . Имя дисплея X для открытия вместо дисплея, указанного в переменной среды displayDISPLAY.
X11-специфические переменные среды
Бэкэнд GDK X11 может быть настроен с помощью дополнительных переменных среды.
GDK_SYNCHRONIZE. Если установлено, GDK выполняет все запросы X синхронно. Это полезный параметр для отладки, но он существенно снижает производительность.
GDK_CORE_DEVICE_EVENTS. Если установлено, GDK не использует расширение XInput и реагирует только на базовые события ввода X.
GDK_SCALE. Должно быть установлено в целое число, обычно 2. Если установлено, GDK будет масштабировать все окна на указанный множитель. Масштабируемый вывод предназначен для использования на дисплеях с высокой плотностью пикселей. Обычно GDK выбирает подходящий коэффициент масштабирования для каждого монитора из системы отображения. Эта переменная среды позволяет переопределить это значение.
GDK_DPI_SCALE. Это может быть полезно при использовании масштабируемых приложений GTK+ вместе с приложениями, не поддерживающими масштабирование, на дисплее с высокой плотностью пикселей. В этом случае разрешение шрифтов можно удвоить, чтобы сделать приложения, не поддерживающие масштабирование, читаемыми, а GDK_DPI_SCALE=0.5 можно установить, чтобы компенсировать это в приложениях GTK+, которые уже масштабированы путем установки GDK_SCALE=2.
Понимание архитектуры X11
Люди, пришедшие из среды Windows или MacOS, часто удивляются некоторым аспектам системы X Window. В этом разделе кратко представлены основные концепции X. Более подробная информация содержится в книге Справочник по программированию Xlib Адриана Най; эта книга является первой частью серии O'Reilly по системе X Window.
Стандарты — еще один важный ресурс, если вы углубляетесь в низкоуровневые детали X11, особенно спецификации ICCCM и расширенных подсказок для менеджеров окон. На freedesktop.org есть ссылки на многие соответствующие спецификации.
В руководстве по GDK описывается
Сервер, клиент, менеджер окон
В других системах окон обычно вся функциональность реализована в самом приложении. В X каждый запуск приложения включает три разных программы: сервер X, приложение (называемое клиентом, потому что это клиент сервера X) и специальный клиент, называемый менеджером окон.
Сервер X отвечает за управление ресурсами, обработку запросов отрисовки и передачу событий, таких как события клавиатуры и мыши, заинтересованным приложениям. Таким образом, клиентские приложения могут просить сервер X создать окно, нарисовать окружность или переместить окна.
Менеджер окон отвечает за отрисовку рамки или границ вокруг окон; он также имеет последнее слово в определении размера каждого окна и состояния окна, например, минимизированное, максимизированное и т.д. В Windows и MacOS приложение отвечает за большую часть этого. В X11, если вы хотите изменить состояние окна или изменить его рамку, вы должны попросить менеджер окон сделать это от вашего имени, используя установленный стандарт.
GTK+ предоставляет функции для запроса выполнения различных действий менеджером окон; см., например, gtk_window_iconify() или gtk_window_maximize() или gtk_window_set_decorated(). Имейте в виду, что gtk_window_move() и изменение размера окна в конечном счете контролируются менеджером окон, и большинство менеджеров окон игнорируют некоторые запросы время от времени, в интересах хорошего пользовательского интерфейса.
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.20/gtk-x11.html