Projekt GNOME opublikował pierwszą stabilną wersję biblioteki Libadwaita, która zawiera zestaw komponentów do stylizacji interfejsu użytkownika zgodnych z wytycznymi GNOME HIG (Human Interface Guidelines). Biblioteka ta obejmuje gotowe widżety i obiekty do tworzenia aplikacji, które zachowują ogólny styl GNOME i mogą adaptacyjnie dostosowywać się do ekranów o różnych rozmiarach. Kod biblioteki napisano w języku C i jest rozpowszechniany na licencji LGPL 2.1+.

Biblioteka libadwaita jest używana w połączeniu z GTK4 i zawiera komponenty używane w motywie Adwaita GNOME, które zostały przeniesione z GTK do osobnej biblioteki. Kod libadwaita bazuje na bibliotece libhandy i jest pozycjonowany jako zastępca tej biblioteki, która była pierwotnie stworzona do budowy adaptacyjnego interfejsu na platformach mobilnych opartych na technologiach GNOME i była doskonalona w środowisku GNOME Phosh dla smartfona Librem 5.
Biblioteka zawiera typowe widżety obejmujące różne elementy interfejsu, takie jak listy, panele, pola edycji, przyciski, zakładki, formularze wyszukiwania, okna dialogowe itp. Proponowane widżety pozwalają na tworzenie uniwersalnych interfejsów, które sprawnie działają zarówno na dużych ekranach komputerów i laptopów, jak i na małych ekranach dotykowych smartfonów. Interfejs aplikacji dynamicznie zmienia się w zależności od rozmiaru ekranu i dostępnych urządzeń wejściowych. Biblioteka zawiera również zestaw stylów Adwaita, które dostosowują wygląd do wytycznych GNOME, bez konieczności ręcznej adaptacji.
Wydzielenie elementów wizualnych GNOME do osobnej biblioteki pozwala rozwijać niezbędne zmiany dla GNOME niezależnie od GTK, co daje możliwość deweloperom GTK skoncentrowania się na podstawowych rzeczach, a deweloperom GNOME szybszego i elastycznego wprowadzania wymaganych zmian w stylizacji, nie dotykając samego GTK. Niemniej jednak takie podejście stwarza trudności dla deweloperów zewnętrznych środowisk użytkowych opartych na GTK, którzy muszą albo używać libadwaita i dostosowywać się do szczegółów GNOME i powtarzać jego styl, albo rozwijać własną wersję biblioteki stylów dla GTK, godząc się z tym, że aplikacje GNOME będą wyglądać niejednorodnie w środowiskach opartych na zewnętrznych bibliotekach stylów.
Główne niezadowolenie deweloperów zewnętrznych środowisk dotyczy problemów z nadpisywaniem kolorów elementów interfejsu, jednak deweloperzy libadwaita pracują nad udostępnieniem API do elastycznego zarządzania kolorami, które znajdzie się w jednym z nadchodzących wydań. Do nierozwiązanych problemów należy również prawidłowe działanie widżetów sterowania gestami tylko na ekranach dotykowych — dla touchpadów prawidłowe działanie takich widżetów będzie zapewnione później, ponieważ wymaga to wprowadzenia zmian w GTK.
Główne zmiany w libadwaita w porównaniu do libhandy:
- Kompletnie przearanżowany zestaw stylów. Temat graficzny Adwaita używany w GNOME został wyodrębniony z GTK i zmodernizowany, a stary temat graficzny został zablokowany w GTK pod nazwą „Default”. Do najbardziej zauważalnych różnic między libadwaita a tematem „Default” należy zmiana wyglądu tytułów okien.

- Zmieniły się mechanizmy przypisywania kolorów do elementów oraz zmiany kolorów podczas pracy aplikacji (problemy wynikają z tego, że libadwaita przeszedł na SCSS, co wymaga ponownego budowania w celu zmiany koloru). Aby zmienić kolory elementów, co na przykład jest wymagane w GNOME Web do oznaczenia przejścia w tryb incognito, zastosowano metodę zaproponowaną w elementary OS, opartą na ustaleniu stałej listy nazwanych kolorów poprzez „@define-color”. Przy tym kolory wielu elementów interfejsu są teraz obliczane względem podstawowego koloru tekstu i zmieniają się automatycznie, co nie pozwala aplikacjom w pełni kontrolować schematu kolorów (programiści pracują nad usunięciem tego ograniczenia).


- Zwiększona jakość wyświetlania podczas korzystania z ciemnych motywów dzięki bardziej kontrastowemu wyróżnieniu elementów. Kolor akcentujący (accent) stał się jaśniejszy, a także dodano jeszcze jeden kolor do wyróżnienia, który może się zmieniać w zależności od ciemnego lub jasnego motywu.


- Dodano dużą ilość nowych klas stylów do użycia w aplikacjach. Na przykład, „.pill” dla dużych zaokrąglonych przycisków, możliwość użycia „.flat” w GtkHeaderBar, „.accent” do ustawiania koloru akcentu w etykietach, „.numeric” dla typografii tabelarycznej, „.card” do użycia tła i cienia jak w listach.

- Duże monolityczne pliki SCSS zostały podzielone na zbiór mniejszych plików ze stylami.
- Dodano API do dostosowania ciemnego stylu graficznego oraz trybu wysokiego kontrastu.

- Przebudowano dokumentację, do jej generacji teraz wykorzystywane jest narzędzie gi-docgen.

- Dodano API do animacji, którą można wykorzystać do tworzenia efektów przejścia przy zmianie jednego stanu na inny, a także do tworzenia efektów sprężynowych (spring animation).

- Dla zakładek zbudowanych na bazie AdwViewSwitcher dodano możliwość wyświetlania etykiet z liczbą nieprzeczytanych powiadomień.

- Dodano klasę AdwApplication (podklasa GtkApplication) do automatycznej inicjalizacji Libadwaita i ładowania stylów.
- Dodano zestawów widgetów ułatwiających typowe operacje: AdwWindowTitle służący do ustalania tytułu okna, AdwBin do uproszczenia tworzenia podklas, AdwSplitButton dla przycisków kombinowanych, AdwButtonContent dla przycisków z ikoną i etykietą.
- Przeprowadzono czyszczenie API.
Źródło: opennet.ru










