È stato presentato il rilascio del progetto Cambalache 1.0, uno strumento per lo sviluppo rapido di interfacce per GTK 3 e GTK 4, che utilizza la progettazione visuale (WYSIWYG), la paradigmi MVC e la filosofia della priorità del modello dei dati. L'assegnazione del numero di versione 1.0 è vista come un traguardo nella preparazione del progetto per un ampio utilizzo. Il codice è scritto in Python e rilasciato sotto la licenza LGPLv2.1. È disponibile un pacchetto per l'installazione in formato flatpak.
A differenza di Glade, Cambalache offre il supporto per la gestione di più interfacce utente all'interno di un unico progetto. Cambalache non dipende da GtkBuilder e GObject, ma fornisce un modello dati compatibile con il sistema di tipi di GObject. Supporta l'editing, la visualizzazione e la creazione di stili GTK in formato CSS, l'editing di file XML con risorse GResources, la creazione di modelli e widget, e l'uso di file XML di GtkBuilder e markup Blueprint.
Il modello di dati può importare ed esportare più interfacce contemporaneamente, supporta oggetti, proprietà e segnali GtkBuilder, offre uno stack di operazioni di annullamento/ripristino (Undo/Redo) e la possibilità di comprimere la cronologia dei comandi. Per generare il modello di dati dai file gir, è disponibile l'utilità cambalache-db, mentre per generare classi GObject dalle tabelle del modello di dati c'è l'utilità db-codegen.
L'interfaccia può essere generata sulla base di GTK 3 e GTK 4, a seconda della versione specificata nel progetto. Per garantire il supporto per le diverse branche di GTK, la formazione dell'area di lavoro avviene in un processo separato con l'ausilio del widget Casilda, che consente di incorporare in applicazioni GTK4 finestre di altri processi ed è implementato come un composito specializzato, server, che utilizza il protocollo Wayland e la libreria wlroots. Casilda crea dispositivi di input virtuali, i cui eventi vengono trasmessi da GtkEventController, e un dispositivo di output virtuale le cui dimensioni corrispondono a quelle del widget incorporato nell'applicazione. Con wlroots, il contenuto per l'anteprima viene disegnato in un buffer pixel e caricato come superficie Cairo (cairo.Surface) per il rendering in GTK.

Fonte: opennet.ru
