Proiectul GNOME a publicat versiunea 1.5 a bibliotecii Libadwaita, care include un set de componente pentru stilizarea interfeței utilizatorului, conforme cu recomandările GNOME HIG (Human Interface Guidelines). Biblioteca include widgeturi și obiecte gata făcute pentru construirea aplicațiilor, care respectă stilul general GNOME și a căror interfață se poate adapta în mod dinamic la ecrane de orice dimensiune. Codul bibliotecii este scris în limbajul C și este distribuit sub licența LGPL 2.1+.
Biblioteca libadwaita este utilizată împreună cu GTK4 și include componente ale temei de design Adwaita utilizată în GNOME, care au fost separate din GTK într-o bibliotecă de sine stătătoare. Separarea elementelor de design vizual GNOME într-o bibliotecă separată permite dezvoltarea modificărilor necesare pentru GNOME independent de GTK, oferind dezvoltatorilor GTK posibilitatea de a se concentra asupra aspectelor fundamentale, iar dezvoltatorilor GNOME să implementeze mai rapid și flexibil modificările dorite în stilul de design, fără a afecta GTK în sine.
Biblioteca include widgeturi standard care acoperă diverse elemente ale interfeței, cum ar fi listele, panourile, blocurile de editare, butoanele, tab-urile, formularele de căutare, feronurile de dialog etc. Widgeturile propuse permit crearea de interfețe universale, care funcționează organic atât pe ecrane mari de PC-uri și laptopuri, cât și pe ecrane mici tactile de smartphone-uri. Interfața aplicațiilor se schimbă dinamic în funcție de dimensiunea ecranului și de dispozitivele de intrare disponibile. Biblioteca include, de asemenea, un set de stiluri Adwaita, care aduce aspectul în conformitate cu recomandările GNOME, fără a necesita adaptări manuale.

Principala modificare în libadwaita 1.5 a fost refacerea widget-urilor adaptive pentru crearea ferestrelor de dialog care se adaptează la dimensiunea zonei vizibile. Spre deosebire de dialogurile tradiționale, care sunt plasate în feronete separate, noile dialoguri sunt generate pe partea clientului, sunt desenate în interiorul feronelor existente și nu pot depăși limitele feronelor părinte. Această abordare simplifică crearea dialogurilor universale care se combină cu interfețele pentru sisteme mobile și desktop și oferă oportunități suplimentare pentru gestionarea dialogurilor (de exemplu, nu mai este necesară monitorizarea depășirii feronelor, se poate alege comportamentul butoanelor de închidere, se asigură desfășurarea automată pe tot ecranul în versiunile mobile ale aplicațiilor și se ia în considerare stilul feronului curent, nu al sistemului, la întunecarea dialogului).


În continuare, se preconizează implementarea unei alte variante a acestor dialoguri, legate nu de feronete, ci de tab-uri în interiorul feronelor, ceea ce poate fi solicitat în aplicații precum browserele, astfel încât dialogurile asociate tab-ului să nu acopere feronă principală atunci când se comută între tab-uri.
Pentru dispozitivele mobile a fost implementat suportul pentru plasarea dialogurilor sub formă de foi ancorate în partea de jos a ecranului (bottom sheets), și nu sub formă de foi aliniate central. Dialogurile ancorate în partea de jos elimină confuzia utilizatorilor cu închiderea feronelor — în aceste dialoguri, o parte din feronă părinte rămâne vizibilă și butoanele de închidere ale feronelor părinte și ale dialogului sunt clar separate, astfel încât acum este greu de confundat.

Gestionarea noilor dialoguri se face prin intermediul clasei AdwDialog, lucrul cu care în majoritatea situațiilor seamănă cu utilizarea clasei GtkWindow, iar diferențele se rezumă la operațiunile de afișare și închidere. De exemplu, proprietatea «:transient-for» a fost înlocuită cu un parametru în funcția adw_dialog_present(), a fost adăugat un nou semnal «::close-attempt», iar procesarea parametrului «:can-close» a fost modificată. În locul claselor AdwPreferencesWindow, AdwAboutWindow și AdwMessageDialog, cu noile dialoguri se recomandă utilizarea claselor AdwPreferencesDialog, AdwAboutDialog și AdwAlertDialog.
Dialogurile care nu au o fereastră părinte vor continua să fie tratate sub forma unor feronituri separate. De asemenea, dialogurile vor funcționa ca feronituri, ale căror feronituri părinte nu pot fi folosite pentru a plasa dialoguri, de exemplu, dacă nu permit schimbarea dimensiunii sau nu au clasele AdwWindow și AdwApplicationWindow.
Modificările care nu se referă la procesarea dialogurilor în Libadwaita 1.5:
- Clasa AdwEntryRow a fost adăugată cu proprietatea „:text-length” pentru a limita dimensiunea textului din câmpul de introducere.
- Clasa AdwMessageDialog a fost adăugată cu metoda remove_response().
- În clasa AdwBreakpointBin, care permite modificarea interfeței utilizatorului în mod arbitrar în funcție de dimensiunea feroniturii, a fost adăugată capacitatea de a elimina programatic punctele de suspendare.
- Clasa AdwSwipeTracker a fost adăugată cu un flag „:allow-window-handle”, care permite derularea peste panoul superior (folosit în foile atașate la marginea inferioară).
- A crescut luminozitatea culorilor folosite la umbrirea feroniturilor în stilul întunecat.
Sursa: opennet.ro
