В современном мире графических интерфейсов и приложений на Linux, GTK остается одним из фундаментальных инструментов для разработчиков, создающих удобные и функциональные программы. Одним из ключевых аспектов развития GTK и его экосистемы является поддержка Wayland - протокола отображения, призванного заменить X11, предлагая более современную и безопасную архитектуру взаимодействия между клиентами и сервером отображения. В этой связи релиз Casilda версии 1.0 стал значимым событием, откликом на потребности разработчиков, стремящихся эффективно внедрять в свои приложения сторонние окна других процессов, работая с GTK 4. Casilda 1.
0 представляет собой простой и в то же время мощный Wayland-композиторный виджет для GTK 4, который значительно упрощает задачу встраивания окон внешних процессов в собственные приложения. Его основным назначением является обеспечение надежного и оптимизированного механизма для отображения и управления такими окнами, одновременно поддерживая актуальные технологии Wayland и GTK 4. История создания Casilda связана с разработкой Cambalache - нового конструктора графических интерфейсов для GTK. Одной из ключевых задач при работе над Cambalache была реализация превью виджетов в отдельном процессе. Это требование связано с поддержкой как GTK 3, так и GTK 4, а также с необходимостью изоляции для предотвращения аварий, которые могли бы привести к краху всего приложения.
Первоначально была выбрана стратегия использования Broadway backend и WebView в качестве временного решения, однако со временем это стало ограничивать возможности и эффективность. Основой для реализации полноценного Wayland-композитора стала библиотека wlroots - современный инструмент, упрощающий работу с Wayland-протоколом и устройствами ввода-вывода. Благодаря wlroots и поддержке сообщества удалось создать стабильный и функциональный виджет-композитор, который предоставляет управление виртуальными клавиатурой, указателем и выходными устройствами, синхронизируя их с размером виджета в GTK. Одной из важных особенностей Casilda является реализация нативного рендеринга окон клиентов. В ранних версиях рендеринг осуществлялся через получение пиксельных буферов из wlroots с последующей загрузкой в cairo, что вызывало увеличение накладных расходов и требовало программного рендеринга клиентами.
Поддержка dmabuf, реализованная усилиями сообщества, позволила переходить к использованию аппаратного рендеринга при помощи OpenGL или Vulkan, исключая промежуточные копирования и повышая производительность. Создание GdkTexture напрямую из dmabuf клиента открыло путь к интеграции окон клиентов прямо в сценограф GTK, благодаря чему рендеринг становится более гибким и быстрым. Дополнительный бонус - возможность легко реализовывать эффекты, например, изменение оттенка родительского окна для временных окон, используя цветовые матрицы, интегрируемые в рендеринг как простые пиксельные шейдеры. Casilda 1.0 также поддерживает интерфейс GtkScrollable, что позволяет встраивать композитор внутри GtkScrolledWindow для расширения области виртуального вывода и управления окнами клиентов, подстраиваясь под действия пользователя, такие как перемещение окон за пределы видимой области.
Это обеспечивает гибкость и удобство в работе с несколькими клиентами одновременно. Важно отметить, что Casilda предлагает простой и интуитивный API для разработчиков. Для использования встраивания внешних окон достаточно создать экземпляр виджета CasildaCompositor и поместить его в иерархию GTK-приложения, указывая при необходимости UNIX-сокет для связи с клиентами или используя готовые способы подключения через переменные окружения WAYLAND_DISPLAY и WAYLAND_SOCKET. Такой подход позволяет запускать клиентские процессы из родительского приложения или подключаться к ним без необходимости сложной настройки. Примеры использования Casilda доступны на Python и JavaScript, что демонстрирует универсальность решения и его готовность к интеграции в разнообразные сценарии.
Python-версия показывает, как создать приложение с CasildaCompositor, запускать из него клиентские процессы и управлять основным окном с комфортом. Аналогично пример на JavaScript с использованием GJS облегчает освоение и внедрение под разработчиков, предпочитающих этот язык. Casilda стала достойной альтернативой устаревшему XEmbed-протоколу и виджетам GtkSocket/GtkPlug, предоставляя современный, гибкий и безопасный способ интеграции окон сторонних процессов в приложения на основе GTK 4 с поддержкой Wayland. В планах развития проекта - дальнейшая интеграция с обновлениями wlroots, улучшение поддержки раскладок клавиатуры, сенсорных устройств и фиксация ошибок, повышающих стабильность и удобство. Проект Casilda доступен в открытом доступе на GitLab GNOME, где любой желающий может ознакомиться с исходным кодом, внести вклад или задать вопросы через выделенный канал Matrix.
Релиз Casilda 1.0 знаменует собой важный шаг в развитии GTK и приложений, работающих с Wayland, демонстрируя, что при грамотном подходе возможно создание эффективных, современных инструментов для управления окнами и взаимодействия с внешними процессами. Casilda обеспечивает не только техническую основу для таких решений, но и открывает новые возможности для UX-дизайнеров и разработчиков, позволяя создавать более надежные и отзывчивые пользовательские интерфейсы. Сообщество GTK и разработчики приложений смогут использовать Casilda как источник вдохновения и инструмент для реализации собственных задач, связанных с управлением окнами и визуализацией в среде Wayland. Последующие обновления и активная поддержка проекта обещают внедрение новых функций и улучшений, делая Casilda одной из ключевых технологий в экосистеме GTK и Wayland.
.