James Westman, udvikler af GNOME Maps-applikationen, præsenterede et nyt markup-sprog kaldet Blueprint, der er designet til at bygge grænseflader ved hjælp af GTK-biblioteket. Koden til compilatoren, der converterer Blueprint-markup til GTK UI-filer, er skrevet i Python og distribueres under LGPLv3-licensen.
Årsagen til oprettelsen af projektet er knyttet til den anvendte XML-format for GTK UI-filer, som er overbelastet og besværlig at skrive eller redigere markup manuelt. Blueprint-formatet adskiller sig ved sin tydelighed i præsentationen af information og giver mulighed for at undgå brugen af specialiserede visuelle grænseflade-redigeringsprogrammer ved oprettelse, redigering og vurdering af ændringer i grænsefladeelementer.
Blueprint kræver desuden ikke ændringer i GTK, men gentager fuldt ud GTK-widgetmodellen og positioneres som et lag, der compilerer markup til det standardformat XML for GtkBuilder. Blueprint's funktionalitet svarer fuldt ud til GtkBuilder; det adskiller sig kun i metoden til præsentation af information. For at migrere projektet til Blueprint er det tilstrækkeligt at tilføje et kald til blueprint-compiler i bygge-scriptet uden at ændre koden. using Gtk 4.0; template MyAppWindow : Gtk.ApplicationWindow { title: _(«My App Title»); [titlebar] HeaderBar header_bar {} Label { styles [«heading»] label: _(«Hello, world!»); } }

Udover compilatoren til standard XML-formatet GTK er der også et plugin under udvikling med støtte for Blueprint til den integrerede udviklingsmiljø GNOME Builder. Der udvikles desuden en LSP-server (Language Server Protocol) til Blueprint, som kan bruges til syntaksfremhævning, fejlanalyse, visning af hints og automatisk fuldførelse af kode i LSP-understøttende kodeeditorer, herunder Visual Studio Code.
Blandt planerne for at udvikle Blueprint nævnes tilføjelsen af elementer til reaktiv programmering i markup'en, implementeret ved hjælp af Gtk.Expression-klassen, der tilbydes i GTK4. Den foreslåede metode er mere velkendt for udviklere af webgrænseflader i JavaScript og muliggør automatisk synkronisering af grænsefladens præsentation med den tilknyttede datamodel, uden at det er nødvendigt at opdatere brugergrænsefladen manuelt efter hver ændring af data.
Kilde: opennet.ru
