Джеймс Вестман (James Westman), разработчик приложения GNOME Maps, представил новый язык разметки Blueprint, предназначенный для построения интерфейсов с использованием библиотеки GTK. Код компилятора для преобразования разметки Blueprint в ui-файлы GTK написан на языке Python и распространяется под лицензией LGPLv3.
В качестве причины создания проекта называется привязка применяемых в GTK ui-файлов описания интерфейса к формату XML, который перегружен и неудобен для написания или редактирования разметки вручную. Формат Blueprint отличается наглядностью представления информации и благодаря читаемому синтаксису даёт возможность обойтись без применения специализированных визуальных редакторов интерфейса при создании, редактировании и оценке изменений в элементах интерфейса.
При этом Blueprint не требует внесения изменений в GTK, полностью повторяет модель виджетов GTK и позиционируется как надстройка, компилирующая разметку в штатный для GtkBuilder формат XML. Функциональные возможности Blueprint полностью соответствуют GtkBuilder, отличается лишь метод представления информации. Для перевода проекта на Blueprint достаточно добавить вызов blueprint-compiler в сценарий сборки без изменения кода.
using Gtk 4.0;
template MyAppWindow : Gtk.ApplicationWindow {
title: _("My App Title");
[titlebar]
HeaderBar header_bar {}
Label {
styles ["heading"]
label: _("Hello, world!");
}
}
Кроме компилятора в штатный XML-формат GTK в разработке также находится плагин с поддержкой Blueprint для интегрированной среды разработки GNOME Builder. Отдельно развивается LSP-сервер (Language Server Protocol) для Blueprint, который можно будет использовать для подсветки, анализа ошибок, вывода подсказок и автодополнения кода в поддерживающих LSP редакторах кода, включая Visual Studio Code.
Из планов по развитию Blueprint отмечается добавления в разметку элементов реактивного программирования, реализуемого с использованием класса Gtk.Expression, предоставляемого в GTK4. Предлагаемый метод более привычен для разработчиков web-интерфейсов на JavaScript и позволяет добиться автоматической синхронизации представления интерфейса со связанной моделью данных, без необходимости принудительного обновления пользовательского интерфейса после каждого изменения данных.
В качестве причины создания проекта называется привязка применяемых в GTK ui-файлов описания интерфейса к формату XML, который перегружен и неудобен для написания или редактирования разметки вручную. Формат Blueprint отличается наглядностью представления информации и благодаря читаемому синтаксису даёт возможность обойтись без применения специализированных визуальных редакторов интерфейса при создании, редактировании и оценке изменений в элементах интерфейса.
При этом Blueprint не требует внесения изменений в GTK, полностью повторяет модель виджетов GTK и позиционируется как надстройка, компилирующая разметку в штатный для GtkBuilder формат XML. Функциональные возможности Blueprint полностью соответствуют GtkBuilder, отличается лишь метод представления информации. Для перевода проекта на Blueprint достаточно добавить вызов blueprint-compiler в сценарий сборки без изменения кода.
using Gtk 4.0;
template MyAppWindow : Gtk.ApplicationWindow {
title: _("My App Title");
[titlebar]
HeaderBar header_bar {}
Label {
styles ["heading"]
label: _("Hello, world!");
}
}
Кроме компилятора в штатный XML-формат GTK в разработке также находится плагин с поддержкой Blueprint для интегрированной среды разработки GNOME Builder. Отдельно развивается LSP-сервер (Language Server Protocol) для Blueprint, который можно будет использовать для подсветки, анализа ошибок, вывода подсказок и автодополнения кода в поддерживающих LSP редакторах кода, включая Visual Studio Code.
Из планов по развитию Blueprint отмечается добавления в разметку элементов реактивного программирования, реализуемого с использованием класса Gtk.Expression, предоставляемого в GTK4. Предлагаемый метод более привычен для разработчиков web-интерфейсов на JavaScript и позволяет добиться автоматической синхронизации представления интерфейса со связанной моделью данных, без необходимости принудительного обновления пользовательского интерфейса после каждого изменения данных.