Выпущен Cambalache 1.0: современный конструктор интерфейсов для GTK 3 и GTK 4
Разработчики объявили о выходе стабильной версии Cambalache 1.0 - визуального инструмента для быстрой разработки пользовательских интерфейсов под GTK 3 и GTK 4. Присвоение статуса "1.0" означает, что проект считается достаточно зрелым для повседневного использования в реальных приложениях, а не только для экспериментов.
Cambalache строится вокруг визуального подхода WYSIWYG: разработчик видит интерфейс примерно таким, каким он будет выглядеть в итоговой программе. При этом инструмент следует архитектурным принципам MVC и философии "сначала модель данных": интерфейс рассматривается прежде всего как структурированная модель, а не как набор случайно накиданных виджетов. Это помогает удерживать проект в порядке по мере роста сложности.
Вся логика приложения написана на Python, а сам проект распространяется под свободной лицензией LGPLv2.1, что позволяет использовать его как в открытых, так и в проприетарных продуктах при соблюдении условий лицензии. Для пользователей, которые не хотят заниматься сборкой из исходников, доступен пакет в виде контейнера flatpak, упрощающий установку и обновление.
Одно из ключевых отличий Cambalache от хорошо известного Glade - поддержка сразу нескольких интерфейсов в рамках одного проекта. Это особенно важно для сложных приложений, где нужно одновременно проектировать несколько окон, диалогов, вспомогательных панелей и разных вариантов интерфейса. Вместо разрозненных файлов разработчик получает целостный набор UI в едином проектном пространстве.
Интересно, что Cambalache при этом не зависит напрямую от GtkBuilder и GObject. Вместо этого он реализует собственную модель данных, которая повторяет и отражает систему типов GObject. Такой подход позволяет гибко обрабатывать объекты, свойства и сигналы, не привязываясь жёстко к одному конкретному формату. Тем не менее, совместимость с привычной экосистемой сохранена: инструмент умеет работать с XML-файлами GtkBuilder и разметкой Blueprint.
Разработчик получает не только конструктор форм, но и полноценный инструмент для работы со стилями и ресурсами. В Cambalache можно редактировать, просматривать и создавать CSS-стили для GTK, настраивая внешний вид виджетов через знакомый веб-разработчикам синтаксис. Дополнительно поддерживается редактирование XML-файлов с ресурсами GResources, что упрощает создание и организацию встроенных ресурсов приложения - иконок, файлов разметки, шаблонов и других вспомогательных данных.
Модель данных в Cambalache умеет одновременно импортировать и экспортировать несколько интерфейсов, что особенно удобно при миграции существующих проектов или при разбиении монолитного UI на логические части. Внутри поддерживаются объекты, их свойства и сигналы в терминах GtkBuilder, что делает Cambalache удобным мостом между ручным кодом и визуальным проектированием.
Для повседневной работы важна не только мощность, но и удобство. В Cambalache реализован стек операций Undo/Redo, позволяющий последовательно откатывать и повторять изменения. Более того, предусмотрен механизм сжатия истории, чтобы длинные последовательности мелких правок не захламляли журнал действий. Это особенно полезно, когда вы долго "шлифуете" интерфейс - меняете отступы, выравнивание, размеры - и в какой-то момент хотите вернуться к одному из ключевых состояний, а не по одному шагу откатывать десятки операций.
Отдельное внимание уделено генерации кода и данных. Для построения базы знаний о типах и виджетах на основе gir-файлов предусмотрена утилита командной строки cambalache-db. Она анализирует описания библиотек и формирует внутреннюю модель данных. А утилита db-codegen, в свою очередь, создает заготовки классов GObject из таблиц этой модели. Это значительно ускоряет старт разработки: вместо ручного создания однотипных классов разработчик получает полуавтоматическую генерацию с привязкой к описанным интерфейсам.
Cambalache умеет работать как с GTK 3, так и с GTK 4. При создании проекта указывается целевая ветка GTK, и под неё формируется соответствующая модель интерфейса. Это важно для тех, кто поддерживает старые приложения и одновременно думает о миграции на новую версию GTK: можно параллельно держать в голове обе платформы и постепенно переносить интерфейсы, используя один и тот же инструмент.
Для обеспечения корректной работы с разными версиями GTK разработчики использовали интересный архитектурный приём. Рабочая область, где показывается интерфейс, формируется в отдельном процессе, а встраивание реализовано через специальный виджет Casilda. Этот виджет позволяет "вкладывать" в GTK4-приложение окна других процессов, выступая в роли специализированного композитного сервера. В основе этого механизма лежит протокол Wayland и библиотека wlroots.
Casilda создаёт виртуальные устройства ввода, которые принимают события, перенаправляемые из GtkEventController. Одновременно создаётся виртуальное устройство вывода, размеры которого совпадают с размерами виджета, встроенного в основное приложение. Содержимое для предпросмотра отрисовывается с помощью wlroots в пиксельный буфер, после чего загружается как поверхность Cairo (cairo.Surface) и выводится в GTK. В результате разработчик видит максимально точный предварительный просмотр интерфейса, не теряя при этом изоляции между процессами.
На фоне такой архитектуры закономерно звучит тезис: Cambalache особенно хорошо "ложится" на экосистему GTK. Это не внешний, слабо интегрированный конструктор, а инструмент, выросший из потребностей реальной разработки под GTK 3 и GTK 4. Было бы действительно странно, если бы редактор, изначально созданный для GTK-интерфейсов, сам по себе работал с GTK неудачно - но как раз здесь видна внимательная проработка деталей и согласованность с современными практиками.
Отдельного разговора заслуживает тезис о "формошлёпстве". Многие разработчики старших поколений вспоминают эпоху Delphi, когда логика приложения часто полностью "расползалась" по обработчикам событий элементов интерфейса - Button1Click, FormCreate и так далее. Это и называли пренебрежительно "формошлёпством": не сам факт визуального проектирования UI, а смешивание слоёв - когда и интерфейс, и бизнес-логика, и работа с данными оказываются в одном файле с обработчиками кликов.
Cambalache концептуально придерживается другого подхода. Он помогает строить модель интерфейса и связей, но не навязывает разработчику структуру бизнес-логики. В связке с MVC-подходом это позволяет разделять ответственность: UI описывается декларативно и визуально, а логика живёт в отдельных модулях и классах. Таким образом, инструмент как раз решает одну из главных проблем "старого" формошлёпства - не превращает интерфейсный слой в свалку условных обработчиков всех задач подряд.
Вопрос обновлений и "гонки" за нововведениями GTK тоже звучит вполне справедливо. GTK 4 продолжает активно развиваться, происходят изменения в наборах виджетов, сигналах, стилях, подходах к компоновке. Любому конструктору интерфейсов приходится балансировать между стабильностью и скоростью внедрения новинок. Cambalache в этом смысле выигрывает за счёт своей модульной архитектуры и опоры на модель данных, а не на жёстко прошитые сценарии работы с GtkBuilder.
Использование отдельной базы типов (через cambalache-db) и генерации кода (через db-codegen) позволяет адаптироваться к новым версиям библиотек сравнительно гибко. Да, разработчикам инструмента в любом случае приходится отслеживать эволюцию GTK и обновлять свои схемы и генераторы. Однако такой подход делает процесс предсказуемым: обновление фактически сводится к пересборке базы типов и настройке логики рендеринга отдельных виджетов, а не к переписыванию всего приложения целиком.
Важно и то, что Cambalache ориентирован не только на новичков, которым нужен "конструктор форм", но и на опытных разработчиков, знакомых с внутренними механизмами GTK и GObject. Инструмент не скрывает от пользователя модель данных, наоборот - подчёркнуто работает с ней напрямую. Это позволяет интегрировать визуально спроектированный интерфейс в сложные проекты, где используются собственные виджеты, кастомные классы GObject и нетривиальные цепочки сигналов.
Для новых проектов Cambalache может стать точкой входа в мир GTK 4: вместо того чтобы сразу погружаться в тонкости ручной верстки интерфейса через XML или код, разработчик сначала получает наглядную картину будущего приложения. А затем по мере необходимости переходит к более низкоуровневой настройке, при этом не теряя согласованности интерфейса с моделью данных.
С другой стороны, инструмент вполне уместен и в роли "моста" при миграции старых приложений с GTK 3 на GTK 4. Возможность одновременно работать с несколькими интерфейсами внутри одного проекта, поддержка GtkBuilder и Blueprint, а также наличие средств импорта/экспорта сразу нескольких UI-файлов позволяют постепенно переносить интерфейсы, тестировать их внешний вид и поведение, не ломая текущую рабочую версию программы.
Отдельным плюсом является поддержка работы со стилями CSS прямо внутри инструмента. Сегодня внешний вид GTK-приложений всё больше определяется именно через CSS, и возможность править стили рядом с интерфейсом, сразу видя результат на предпросмотре, сильно ускоряет процесс настройки. Это также снижает риск "рассинхронизации", когда разметка и стили живут в разных местах и со временем начинают противоречить друг другу.
В итоге Cambalache 1.0 можно рассматривать как важный шаг к появлению современного, гибкого и при этом достаточно дисциплинирующего редактора UI под GTK. Он закрывает потребности тех, кто устал вручную править XML GtkBuilder, предлагает удобный мост для миграции между версиями GTK и помогает избавиться от печально известного "формошлёпства", структурируя работу с интерфейсом вокруг модели данных и архитектурных принципов MVC. Для экосистемы GTK это не просто ещё один инструмент, а полноценное рабочее звено в цепочке: от описания интерфейса до готового приложения.



