Se ha presentado la versión 1.0 del proyecto Cambalache, que desarrolla una herramienta de rápido diseño de interfaces para GTK 3 y GTK 4, utilizando diseño visual (WYSIWYG), la paradigmas MVC y la filosofía de la primacía del modelo de datos. La asignación del número de versión 1.0 se presenta como un logro en la preparación del proyecto para su amplio uso. El código está escrito en Python y se distribuye bajo la licencia LGPLv2.1. Se encuentra disponible un paquete para instalación en formato flatpak.
A diferencia de Glade, Cambalache ofrece soporte para manejar múltiples interfaces de usuario en un solo proyecto. Cambalache no depende de GtkBuilder y GObject, pero proporciona un modelo de datos que se corresponde con el sistema de tipos GObject. Se admite la edición, visualización y creación de estilos GTK en formato CSS, la edición de archivos XML con recursos GResources, la creación de plantillas y widgets, así como el uso de archivos XML de GtkBuilder y el marcado Blueprint.
El modelo de datos puede importar y exportar múltiples interfaces a la vez, soporta objetos, propiedades y señales de GtkBuilder, proporciona una pila de operaciones de deshacer/refacer (Undo/Redo) y la capacidad de comprimir el historial de comandos. Se ofrece una utilidad cambalache-db para generar el modelo de datos a partir de archivos gir, y una utilidad db-codegen para generar clases GObject a partir de las tablas del modelo de datos.
La interfaz puede generarse sobre la base de GTK 3 y GTK 4, dependiendo de la versión especificada en el proyecto. Para asegurar el soporte de diferentes ramas de GTK, la formación del área de trabajo se realiza en un proceso separado utilizando el widget Casilda, que permite incrustar ventanas de otros procesos en aplicaciones GTK4 y se implementa en forma de un compuesto especializado. servidores, que utiliza el protocolo Wayland y la biblioteca wlroots. Casilda crea dispositivos de entrada virtuales, cuyos eventos son transmitidos desde GtkEventController, así como un dispositivo de salida virtual con un tamaño equivalente al del widget integrado en la aplicación. A través de wlroots, el contenido de previsualización se renderiza en un búfer de píxeles y se carga como una superficie Cairo (cairo.Surface) para renderizar en GTK.

Fuente: opennet.ru
