O conjunto de ferramentas para desenvolvimento de aplicativos proposto pelo projeto GNOME (GNOME SDK) inclui o compilador blueprint-compiler, que permite a utilização da linguagem Blueprint para definir interfaces de aplicativos. O suporte ao Blueprint no GNOME SDK possibilitará a aplicação desta linguagem de descrição de interfaces em aplicativos GNOME sem necessidade de instalação manual de dependências adicionais. Atualmente, o Blueprint foi adicionado às builds noturnas do GNOME SDK e fará parte dos lançamentos a partir da versão de outono do GNOME 49.
O Blueprint simplifica a criação de interfaces usando a biblioteca GTK4 e se distingue por utilizar uma sintaxe declarativa simples, que replica o modelo de widgets GTK, apoiando templates, tipos e manipuladores. Diferentemente do formato de arquivos ui do GTK, o Blueprint não utiliza markup XML, que é considerado excessivo e complicado para edição manual.
Para integração com ambientes de desenvolvimento integrados e editores de código, está disponível um servidor LSP (Language Server Protocol), que pode ser usado para realce de sintaxe, análise de erros, exibição de dicas e autocompletar código. O suporte ao Blueprint já está incorporado no GNOME Builder e disponível na forma de plugins para Vim, GNU Emacs e Visual Studio Code. Há uma ferramenta para facilitar a portabilidade de definições de interface do XML para o Blueprint.
Graças à sua sintaxe legível, o formato Blueprint permite evitar o uso de editores visuais especializados para interfaces. Além disso, o Blueprint não requer modificações no GTK e é apresentado como uma camada que compila a markup em um formato XML padrão para GtkBuilder. As funcionalidades do Blueprint correspondem completamente às do GtkBuilder, diferenciando-se apenas na forma de apresentação da informação. O código das ferramentas é escrito em Python e é distribuído sob a licença LGPLv3. using Gtk 4.0; template $MyAppWindow: ApplicationWindow { default-width: 600; default-height: 300; title: _(«Hello, Blueprint!»); [titlebar] HeaderBar {} Label { label: bind template.main_text; } }
Fonte: opennet.ru
