È stata presentata la versione 1.0 del progetto Cambalache, uno strumento per lo sviluppo rapido di interfacce per GTK 3 e GTK 4, che utilizza un design visuale (WYSIWYG), la parabola MVC e la filosofia dell'importanza primaria del modello di dati. L'assegnazione del numero di versione 1.0 viene presentata come un traguardo per la prontezza del progetto all'uso diffuso. Il codice è scritto in Python e viene fornito con licenza LGPLv2.1. È disponibile un pacchetto in formato flatpak per l'installazione.
A differenza di Glade, in Cambalache è fornito il supporto per la gestione di più interfacce utente all'interno di un singolo progetto. Cambalache non dipende da GtkBuilder e GObject, ma fornisce un modello di dati che corrisponde al sistema di tipi GObject. È supportata la modifica, visualizzazione e creazione di stili GTK in formato CSS, modifiche ai file XML con risorse GResources, creazione di modelli e widget, uso di file XML di GtkBuilder e markup Blueprint.
Il modello di dati può importare ed esportare simultaneamente più interfacce, supporta oggetti, proprietà e segnali GtkBuilder, fornisce uno stack per annullare le operazioni (Undo / Redo) e la possibilità di comprimere la cronologia dei comandi. Per la generazione del modello di dati a partire dai file gir sono forniti l'utilità cambalache-db e, per la generazione delle classi GObject da tabelle del modello di dati, 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 di diverse versioni di GTK, la formazione dell'area di lavoro avviene in un processo separato utilizzando il widget Casilda, che consente di incorporare nelle applicazioni GTK4 finestre di altri processi ed è implementato sotto forma di composito specializzato server, utilizzando il protocollo Wayland e la libreria wlroots. Casilda crea dispositivi di input virtuali, eventi dei quali vengono trasmessi da GtkEventController, e un dispositivo di output virtuale delle stesse dimensioni del widget incorporato nell'applicazione. Utilizzando 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
