Het GNOME-project heeft de release van de Libadwaita-bibliotheek 1.5 aangekondigd, die een set componenten bevat voor het stylen van gebruikersinterfaces in overeenstemming met de GNOME HIG (Human Interface Guidelines). De bibliotheek bevat kant-en-klare widgets en objecten voor het bouwen van applicaties die voldoen aan de algemene stijl van GNOME, waarbij de interface zich kan aanpassen aan schermen van elke grootte. De code van de bibliotheek is geschreven in C en valt onder de LGPL 2.1+-licentie.
De libadwaita-bibliotheek wordt gebruikt in combinatie met GTK4 en omvat de componenten van het in GNOME gebruikte thema Adwaita, die zijn geƫxtraheerd uit GTK en in een aparte bibliotheek zijn geplaatst. Het scheiden van de visuele elementen van GNOME in een aparte bibliotheek maakt het mogelijk om noodzakelijke wijzigingen voor GNOME onafhankelijk van GTK te ontwikkelen, waardoor GTK-ontwikkelaars zich kunnen concentreren op de basisaspecten, terwijl GNOME-ontwikkelaars sneller en flexibeler de noodzakelijke veranderingen in de stijl kunnen doorvoeren zonder de kern van GTK aan te tasten.
De bibliotheek bevat standaardwidgets die verschillende interface-elementen omvatten, zoals lijsten, panelen, invoervakken, knoppen, tabbladen, zoekformulieren, dialoogvensters, enzovoort. De voorgestelde widgets maken het mogelijk om veelzijdige interfaces te creƫren die goed functioneren zowel op grote schermen van pc's en laptops als op kleine touchscreen-schermen van smartphones. De interface van applicaties past zich dynamisch aan op basis van de schermgrootte en de beschikbare invoerapparaten. De bibliotheek bevat ook een set Adwaita-stijlen die het uiterlijk in overeenstemming brengen met de aanbevelingen van GNOME, zonder dat handmatige aanpassing nodig is.

De belangrijkste wijziging in libadwaita 1.5 is de herziening van de responsieve widgets voor het maken van dialoogvensters die zich aanpassen aan de zichtbare ruimte. In tegenstelling tot traditionele dialoogvensters, die in aparte vensters worden geplaatst, worden nieuwe dialoogvensters aan de clientzijde gegenereerd, weergegeven binnen bestaande vensters en kunnen ze niet buiten het hoofdvenster verschijnen. Deze aanpak vergemakkelijkt het creƫren van universele dialoogvensters die passen bij interfaces voor zowel mobiele als desktop systemen, en biedt daarnaast extra mogelijkheden voor het beheer van dialoogvensters (bijvoorbeeld het is niet nodig om te controleren of ze buiten het venster gaan, men kan het gedrag met betrekking tot sluitknoppen kiezen, automatische uitvouwingen naar volledig scherm in mobiele versies van apps worden gegarandeerd, en de stijl van het huidige venster wordt in aanmerking genomen bij het dimmen van de dialoog).


In de toekomst is het plan om een andere variant van dergelijke dialogen te implementeren, die niet aan vensters zijn gekoppeld, maar aan tabbladen binnen een venster. Dit kan nuttig zijn in toepassingen zoals browsers, zodat dialoogvensters die met tabbladen zijn verbonden, het hoofdvenster niet overlappen bij het schakelen tussen tabbladen.
Voor mobiele apparaten is ondersteuning gerealiseerd voor het plaatsen van dialoogvensters in de vorm van bottom sheets, die aan de onderkant van het scherm zijn bevestigd, in plaats van als centered sheets. Deze aan de onderkant bevestigde dialoogvensters voorkomen verwarring bij gebruikers over het sluiten van vensters - in dergelijke dialoogvensters blijft een deel van het hoofdvenster zichtbaar en zijn de sluitknoppen van het hoofdvenster en de dialoog duidelijk gescheiden, waardoor ze moeilijk te verwarren zijn.

Het beheren van nieuwe dialogen gebeurt via de Klasse AdwDialog, waarvan het gebruik in de meeste situaties lijkt op dat van de Klasse GtkWindow. De verschillen zijn vooral te vinden in de weergave- en sluitoperaties. Bijvoorbeeld, de eigenschap ā:transient-forā is vervangen door een parameter in de functie adw_dialog_present(), een nieuw signaal ā::close-attemptā is toegevoegd, en de verwerking van de parameter ā:can-closeā is gewijzigd. In plaats van de klassen AdwPreferencesWindow, AdwAboutWindow en AdwMessageDialog wordt aanbevolen om de klassen AdwPreferencesDialog, AdwAboutDialog en AdwAlertDialog te gebruiken voor de nieuwe dialogen.
Dialogen die geen oudervenster hebben, worden nog steeds behandeld als aparte vensters. Dialogen waarvan de oudervensters niet kunnen worden gebruikt voor het plaatsen van dialogen, bijvoorbeeld als deze niet kunnen worden vergroot of als ze geen klassen AdwWindow en AdwApplicationWindow bevatten, zullen ook als vensters functioneren.
Wijzigingen in Libadwaita 1.5 die niet gerelateerd zijn aan de herziening van dialogen:
- De Klasse AdwEntryRow heeft de eigenschap ā:text-lengthā gekregen om de lengte van de tekst in het invoerveld te beperken.
- In de Klasse AdwMessageDialog is de methode remove_response() toegevoegd.
- De Klasse AdwBreakpointBin, die het mogelijk maakt om de gebruikersinterface op een willekeurige manier te wijzigen afhankelijk van de venstergrootte, heeft de mogelijkheid tot programmatic verwijdering van breekpunten gekregen.
- In de Klasse AdwSwipeTracker is de vlag ā:allow-window-handleā toegevoegd, die het mogelijk maakt om te scrollen boven de bovenste balk (gebruikte in bladen die zijn vastgemaakt aan de onderkant).
- De helderheid van de kleuren die worden gebruikt voor het vervagen van vensters bij een donker thema is verhoogd.
Bron: opennet.ru
