Il progetto GNOME ha rilasciato la libreria Libadwaita 1.5, che include un insieme di componenti per il design dell'interfaccia utente, conforme alle raccomandazioni GNOME HIG (Human Interface Guidelines). La libreria comprende widget e oggetti pronti per la costruzione di applicazioni che seguono lo stile generale di GNOME, il cui interfaccia può adattarsi in modo reattivo a schermi di qualsiasi dimensione. Il codice della libreria è scritto in C e distribuito con licenza LGPL 2.1+.
La libreria libadwaita viene utilizzata in combinazione con GTK4 e comprende i componenti del tema Adwaita, utilizzato in GNOME, che sono stati estratti da GTK e resi disponibili in una libreria separata. Separare gli elementi di design di GNOME in una libreria dedicata consente di sviluppare le necessarie modifiche per GNOME in modo indipendente da GTK, permettendo così agli sviluppatori di GTK di concentrarsi sugli elementi fondamentali, mentre gli sviluppatori di GNOME possono promuovere più rapidamente e flessibilmente le modifiche di design necessarie senza influire su GTK.
La libreria include widget standard che coprono vari elementi dell'interfaccia, come elenchi, pannelli, blocchi di modifica, pulsanti, schede, moduli di ricerca, finestre di dialogo, ecc. I widget proposti consentono di creare interfacce versatili che funzionano in modo fluido sia su grandi schermi di PC e laptop che su piccoli schermi touch di smartphone. L'interfaccia delle applicazioni si adatta dinamicamente in base alle dimensioni dello schermo e ai dispositivi di input disponibili. La libreria include anche un set di stili Adwaita, che allineano l'aspetto alle linee guida GNOME, senza la necessità di adattamenti manuali.

La principale novità in libadwaita 1.5 è la riprogettazione dei widget adattivi per la creazione di finestre di dialogo che si adattano alle dimensioni dell'area visibile. A differenza delle tradizionali finestre di dialogo, che si aprono in finestre separate, i nuovi dialoghi vengono creati dal lato client, disegnati all'interno delle finestre esistenti e non possono oltrepassare i confini della finestra principale. Questo approccio semplifica la creazione di dialoghi universali, combinabili con interfacce per sistemi mobili e desktop, e offre ulteriori possibilità di gestione dei dialoghi (ad esempio, non è necessario monitorare l'uscita dai confini della finestra, è possibile scegliere il comportamento dei pulsanti di chiusura, viene garantito il ridimensionamento automatico a schermo intero nelle versioni mobili delle applicazioni, e viene considerato lo stile della finestra attuale anziché quello del sistema durante l'oscuramento del dialogo).


In futuro è previsto di implementare un'altra variante di dialoghi simili, legati non alle finestre, ma alle schede all'interno della finestra, che potrebbe essere utile in applicazioni come i browser, in modo che i dialoghi correlati alla scheda non coprano la finestra principale durante il passaggio tra le schede.
Per i dispositivi mobili è stata implementata la funzionalità di posizionare i dialoghi sotto forma di fogli fissati nella parte inferiore dello schermo (bottom sheets), anziché centrarli. I dialoghi fissati nella parte inferiore eliminano la confusione degli utenti relativa alla chiusura delle finestre: in tali dialoghi, parte della finestra principale rimane visibile e i pulsanti di chiusura della finestra principale e del dialogo stesso sono chiaramente separati, quindi ora è difficile confonderli.

La gestione dei nuovi dialoghi avviene tramite la classe AdwDialog, il cui utilizzo, nella maggior parte delle situazioni, è simile a quello della classe GtkWindow; le differenze riguardano principalmente le operazioni di visualizzazione e chiusura. Ad esempio, la proprietà «:transient-for» è stata sostituita da un parametro nella funzione adw_dialog_present(), è stato aggiunto un nuovo segnale «::close-attempt», e la gestione del parametro «:can-close» è stata modificata. Al posto delle classi AdwPreferencesWindow, AdwAboutWindow e AdwMessageDialog, si raccomanda di utilizzare le classi AdwPreferencesDialog, AdwAboutDialog e AdwAlertDialog.
I dialoghi che non hanno una finestra padre continueranno a essere trattati come finestre separate. Analogamente, i dialoghi la cui finestra padre non può essere utilizzata per ospitare dialoghi, ad esempio se non consentono il ridimensionamento o se mancano delle classi AdwWindow e AdwApplicationWindow, funzioneranno anch'essi come finestre.
Modifiche non correlate alla riprogettazione dei dialoghi in Libadwaita 1.5:
- Nella classe AdwEntryRow è stata aggiunta la proprietà «:text-length» per limitare la dimensione del testo nel campo di input.
- Nella classe AdwMessageDialog è stato aggiunto il metodo remove_response().
- Alla classe AdwBreakpointBin, che consente di modificare l'interfaccia utente in base alle dimensioni della finestra, è stata aggiunta la possibilità di rimuovere programmaticamente i punti di interruzione.
- Alla classe AdwSwipeTracker è stato aggiunto il flag «:allow-window-handle», che consente lo scorrimento sopra la barra superiore (utilizzato nelle schede collegate al bordo inferiore).
- Aumentata la luminosità dei colori utilizzati per l'ombreggiatura delle finestre con il tema scuro.
Fonte: opennet.ru
