Foi lançado o projeto Cambalache 1.0, que desenvolve uma ferramenta para a criação rápida de interfaces para GTK 3 e GTK 4, usando design visual (WYSIWYG), a paradigma MVC e a filosofia de prioridade ao modelo de dados. A atribuição do número da versão 1.0 é apresentada como uma conquista que demonstra a prontidão do projeto para uso generalizado. O código é escrito em Python e é disponibilizado sob a licença LGPLv2.1. Um pacote no formato flatpak está disponível para instalação.
Diferentemente do Glade, o Cambalache oferece suporte para manter várias interfaces de usuário em um único projeto. Cambalache não depende do GtkBuilder e GObject, mas fornece um modelo de dados que corresponde ao sistema de tipos GObject. O suporte para edição, visualização e criação de estilos GTK em formato CSS, edição de arquivos XML com recursos GResources, criação de templates e widgets, utilização de arquivos XML do GtkBuilder e a marcação Blueprint são suportados.
O modelo de dados pode importar e exportar vários interfaces de uma só vez, suporta objetos, propriedades e sinais do GtkBuilder, fornece uma pilha de operações de desfazer/refazer (Undo/Redo) e a possibilidade de compactar o histórico de comandos. Para gerar o modelo de dados a partir de arquivos gir, a ferramenta cambalache-db está disponível, e para gerar classes GObject a partir das tabelas do modelo de dados, existe a ferramenta db-codegen.
A interface pode ser gerada com base no GTK 3 ou GTK 4, dependendo da versão especificada no projeto. Para garantir suporte a diferentes versões do GTK, a formação da área de trabalho é realizada em um processo separado com a participação do widget Casilda, que permite incorporar janelas de outros processos em aplicações GTK4 e é implementado como um compositor especializado servidor, utilizando o protocolo Wayland e a biblioteca wlroots. A Casilda cria dispositivos de entrada virtuais, cujos eventos são transmitidos pelo GtkEventController, e também um dispositivo de saída virtual, com o mesmo tamanho que o widget integrado ao aplicativo. Com o wlroots, o conteúdo para visualização é renderizado em um buffer de pixels e carregado como uma superfície Cairo (cairo.Surface) para renderização no GTK.

Fonte: opennet.ru
