James Westman, dezvoltatorul aplicației GNOME Maps, a prezentat un nou limbaj de marcare Blueprint, destinat construirii interfețelor folosind biblioteca GTK. Codul compilatorului pentru transformarea marcatului Blueprint în fișiere ui GTK este scris în Python și este distribuit sub licența LGPLv3.
Motivul creării proiectului este legătura între fișierele ui GTK de descriere a interfeței și formatul XML, care este greu de utilizat și inconvenient pentru scrierea sau editarea manuală a marcatului. Formatul Blueprint se remarcă prin claritatea prezentării informațiilor și, datorită sintaxei sale lizibile, permite evitarea editorilor vizuali specializați în crearea, editarea și evaluarea modificărilor elementelor interfeței.
În plus, Blueprint nu necesită modificări în GTK, replicând complet modelul widget-urilor GTK și fiind poziționat ca un strat care compilează marcatul în formatul XML standard pentru GtkBuilder. Funcționalitățile Blueprint corespund complet celor ale GtkBuilder, iar diferența constă doar în metoda de prezentare a informației. Pentru a migra un proiect la Blueprint, este suficient să adăugați apelul blueprint-compiler în scriptul de construcție fără a modifica codul. using Gtk 4.0; template MyAppWindow : Gtk.ApplicationWindow { title: _(«My App Title»); [titlebar] HeaderBar header_bar {} Label { styles [«heading»] label: _(«Hello, world!»); } }

Pe lângă compilatorul în formatul XML standard GTK, este în dezvoltare și un plugin cu suport pentru Blueprint pentru mediul de dezvoltare integrat GNOME Builder. De asemenea, se dezvoltă un server LSP (Language Server Protocol) pentru Blueprint, care va putea fi utilizat pentru evidențierea sintaxei, analiza erorilor, oferirea de sugestii și completarea automată a codului în editorii de cod care suportă LSP, inclusiv Visual Studio Code.
Planul de dezvoltare a Blueprint include adăugarea de elemente de programare reactivă, implementate cu ajutorul clasei Gtk.Expression, furnizată în GTK4. Metoda propusă este mai familiară pentru dezvoltatorii de interfețe web în JavaScript și permite sincronizarea automată a reprezentării interfeței cu modelul de date asociat, fără a fi necesară actualizarea manuală a interfeței utilizatorului după fiecare modificare a datelor.
Sursa: opennet.ro
