O projeto GNOME publicou a versão 1.5 da biblioteca Libadwaita, que inclui um conjunto de componentes para o design da interface do usuário, em conformidade com as diretrizes do GNOME HIG (Human Interface Guidelines). A biblioteca inclui widgets e objetos prontos para a construção de aplicativos que seguem o estilo geral do GNOME, com interfaces que podem se adaptar a telas de qualquer tamanho. O código da biblioteca é escrito em C e é distribuído sob a licença LGPL 2.1+.
A biblioteca libadwaita é utilizada em conjunto com GTK4 e inclui componentes do tema Adwaita, utilizado no GNOME, que foram extraídos do GTK para se tornarem uma biblioteca separada. A separação dos elementos de design do GNOME em uma biblioteca independente permite que as mudanças necessárias para o GNOME sejam desenvolvidas separadamente do GTK, possibilitando que os desenvolvedores do GTK se concentrem em aspectos fundamentais, enquanto os desenvolvedores do GNOME podem promover mudanças de estilo de forma mais rápida e flexível, sem afetar o próprio GTK.
A biblioteca inclui widgets padronizados que abrangem vários elementos da interface, como listas, painéis, blocos de edição, botões, guias, formulários de pesquisa, janelas de diálogo, etc. Os widgets propostos permitem a criação de interfaces universais que funcionam de forma orgânica tanto em grandes telas de PCs e laptops quanto em pequenas telas sensíveis ao toque de smartphones. A interface das aplicações muda dinamicamente, dependendo do tamanho da tela e dos dispositivos de entrada disponíveis. A biblioteca também inclui um conjunto de estilos Adwaita, que ajustam a aparência de acordo com as diretrizes do GNOME, sem a necessidade de adaptação manual.

A principal mudança na libadwaita 1.5 foi a reformulação dos widgets adaptativos para a criação de diálogos que se ajustam ao tamanho da área visível. Ao contrário dos diálogos tradicionais, que são colocados em janelas separadas, os novos diálogos são gerados no lado do cliente, desenhados dentro das janelas existentes e não podem ultrapassar os limites da janela pai. Essa abordagem facilita a criação de diálogos universais, que se integram a interfaces para sistemas móveis e de desktop, além de oferecer mais controle sobre os diálogos (por exemplo, não há necessidade de monitorar a saída da janela, é possível escolher o comportamento em relação aos botões de fechamento, o desdobramento automático em tela cheia em versões móveis de aplicativos é garantido, e o estilo da janela atual é considerado em vez do estilo do sistema ao escurecer o diálogo).


No futuro, está planejada a implementação de mais uma variante desses diálogos, vinculados não a janelas, mas a abas dentro da janela, o que pode ser solicitado em aplicativos como navegadores, para que diálogos relacionados a abas não sobreponham a janela principal ao alternar entre as abas.
Para dispositivos móveis, foi implementado o suporte para posicionar diálogos na forma de folhas presas na parte inferior da tela (bottom sheets), em vez de folhas centralizadas. Diálogos fixados na parte inferior evitam que os usuários confundam o fechamento das janelas — nesses diálogos, parte da janela pai permanece visível e os botões de fechamento da janela pai e do próprio diálogo estão claramente separados, tornando difícil a sua confusão.

O gerenciamento de novos diálogos é feito através da classe AdwDialog, cujo uso em diversas situações é semelhante ao da classe GtkWindow, com as diferenças limitando-se às operações de exibição e fechamento. Por exemplo, a propriedade «:transient-for» foi substituída por um parâmetro na função adw_dialog_present(), um novo sinal «::close-attempt» foi adicionado e o tratamento do parâmetro «:can-close» foi alterado. Em vez das classes AdwPreferencesWindow, AdwAboutWindow e AdwMessageDialog, é recomendado usar as classes AdwPreferencesDialog, AdwAboutDialog e AdwAlertDialog com os novos diálogos.
Diálogos que não têm uma janela pai ainda serão tratados como janelas separadas. Diálogos cujas janelas pai não podem ser usadas para abrigar diálogos, por exemplo, se não permitem redimensionamento ou se não possuem as classes AdwWindow e AdwApplicationWindow, também funcionarão como janelas.
Mudanças não relacionadas à reformulação de diálogos na Libadwaita 1.5:
- À classe AdwEntryRow foi adicionado o atributo «:text-length» para limitar o tamanho do texto no campo de entrada.
- Um método remove_response() foi adicionado à classe AdwMessageDialog.
- Na classe AdwBreakpointBin, que permite modificar a interface do usuário de maneira arbitrária com base no tamanho da janela, foi adicionada a opção de remoção programática de pontos de interrupção.
- Foi adicionado um sinal «:allow-window-handle» à classe AdwSwipeTracker, permitindo a rolagem sobre a barra superior (usado em folhas fixadas à parte inferior).
- A luminosidade das cores usadas para sombreamento de janelas em um tema escuro foi aumentada.
Fonte: opennet.ru
