Das GNOME-Projekt hat die Bibliothek Libadwaita 1.5 veröffentlicht, die eine Reihe von Komponenten fĂŒr das Design von BenutzeroberflĂ€chen enthĂ€lt, die den Empfehlungen der GNOME HIG (Human Interface Guidelines) entsprechen. Die Bibliothek umfasst fertige Widgets und Objekte zum Erstellen von Anwendungen, die dem allgemeinen Stil von GNOME entsprechen und deren Schnittstellen sich an Bildschirme jeder GröĂe anpassen können. Der Code der Bibliothek ist in der Programmiersprache C geschrieben und wird unter der LGPL 2.1+ Lizenz verteilt.
Die Bibliothek libadwaita wird zusammen mit GTK4 verwendet und umfasst Komponenten des in GNOME genutzten Adwaita-Thema, die aus GTK in eine separate Bibliothek ausgelagert wurden. Die Auslagerung der visuellen Elemente von GNOME in eine separate Bibliothek ermöglicht es, notwendige Ănderungen fĂŒr GNOME unabhĂ€ngig von GTK zu entwickeln, was den GTK-Entwicklern die Konzentration auf grundlegende Aspekte ermöglicht, wĂ€hrend den GNOME-Entwicklern ein schnellerer und flexiblerer Fortschritt bei den benötigten Ănderungen der stilistischen Gestaltung ermöglicht wird, ohne GTK selbst zu beeintrĂ€chtigen.
Die Bibliothek umfasst Standard-Widgets, die verschiedene Interface-Elemente abdecken, wie Listen, Panels, Bearbeitungsfelder, SchaltflĂ€chen, Tabs, Suchformulare, Dialogfenster usw. Die angebotenen Widgets ermöglichen die Erstellung vielseitiger OberflĂ€chen, die sowohl auf groĂen Bildschirmen von PCs und Laptops als auch auf kleinen Touchscreens von Smartphones harmonisch funktionieren. Die BenutzeroberflĂ€che von Anwendungen Ă€ndert sich dynamisch in AbhĂ€ngigkeit von der BildschirmgröĂe und den verfĂŒgbaren EingabegerĂ€ten. Die Bibliothek umfasst auch einen Satz von Adwaita-Stilen, die das Erscheinungsbild gemÀà den Empfehlungen von GNOME anpassen, ohne manuelle Anpassungen vornehmen zu mĂŒssen.

Die wichtigste Neuerung in libadwaita 1.5 ist die Ăberarbeitung von anpassungsfĂ€higen Widgets zur Erstellung von Dialogfenstern, die sich an die GröĂe des sichtbaren Bereichs anpassen. Im Gegensatz zu herkömmlichen Dialogen, die in separaten Fenstern platziert werden, werden neue Dialoge auf der Client-Seite gebildet, innerhalb bestehender Fenster gezeichnet und dĂŒrfen die Grenzen des ĂŒbergeordneten Fensters nicht ĂŒberschreiten. Dieser Ansatz vereinfacht die Erstellung universeller Dialoge, die sowohl mit mobilen als auch mit Desktop-Schnittstellen harmonieren, und bietet zusĂ€tzliche Möglichkeiten zur Steuerung der Dialoge (zum Beispiel ist es nicht erforderlich, das Verlassen des Fensters zu verfolgen, das Verhalten bezĂŒglich der SchaltflĂ€chen zum SchlieĂen kann gewĂ€hlt werden, es erfolgt eine automatische Vollbilddarstellung in mobilen Versionen von Anwendungen, und der Stil des aktuellen Fensters anstelle des Systems wird beim Abdunkeln des Dialogs berĂŒcksichtigt).


In Zukunft wird ein weiteres Modell solcher Dialoge geplant, das nicht an Fenster, sondern an Registerkarten innerhalb eines Fensters gebunden ist, was in Anwendungen wie Browsern von Bedeutung sein könnte, um sicherzustellen, dass Dialoge im Zusammenhang mit Registerkarten das Hauptfenster beim Wechseln zwischen den Registerkarten nicht ĂŒberdecken.
FĂŒr mobile GerĂ€te wurde die UnterstĂŒtzung fĂŒr die Anzeige von Dialogen in Form von BlĂ€ttern implementiert, die am unteren Bildschirmrand fixiert sind (Bottom Sheets) anstelle von zentrierten BlĂ€ttern. Am unteren Bildschirmrand befestigte Dialoge befreien die Benutzer von Verwirrungen beim SchlieĂen von Fenstern â in solchen Dialogen bleibt ein Teil des ĂŒbergeordneten Fensters sichtbar und die SchaltflĂ€chen zum SchlieĂen des ĂŒbergeordneten Fensters sowie des Dialogs sind deutlich getrennt, sodass sie nun schwer zu verwechseln sind.

Die Verwaltung neuer Dialoge erfolgt ĂŒber die Klasse AdwDialog, deren Verwendung in den meisten Situationen der Arbeit mit der Klasse GtkWindow Ă€hnelt, wobei die Unterschiede vor allem in den Anzeige- und SchlieĂvorgĂ€ngen bestehen. So wurde beispielsweise die Eigenschaft â:transient-forâ durch einen Parameter in der Funktion adw_dialog_present() ersetzt, ein neues Signal â::close-attemptâ hinzugefĂŒgt und die Behandlung des Parameters â:can-closeâ geĂ€ndert. Statt der Klassen AdwPreferencesWindow, AdwAboutWindow und AdwMessageDialog wird empfohlen, die Klassen AdwPreferencesDialog, AdwAboutDialog und AdwAlertDialog zu verwenden.
Dialoge, die kein ĂŒbergeordnetes Fenster haben, werden weiterhin als separate Fenster behandelt. Auch Dialoge, deren ĂŒbergeordnete Fenster nicht zur Platzierung von Dialogen verwendet werden können â beispielsweise, wenn sie keine GröĂenĂ€nderung zulassen oder die Klassen AdwWindow und AdwApplicationWindow fehlen â werden als Fenster fungieren.
Ănderungen in Libadwaita 1.5, die nicht mit der Ăberarbeitung von Dialogen verbunden sind:
- Der Klasse AdwEntryRow wurde die Eigenschaft â:text-lengthâ hinzugefĂŒgt, um die GröĂe des Textes im Eingabefeld zu beschrĂ€nken.
- Der Klasse AdwMessageDialog wurde die Methode remove_response() hinzugefĂŒgt.
- Der Klasse AdwBreakpointBin, die eine VerĂ€nderung der BenutzeroberflĂ€che je nach FenstergröĂe ermöglicht, wurde die Möglichkeit zur programmgesteuerten Entfernung von Haltepunkten hinzugefĂŒgt.
- Der Klasse AdwSwipeTracker wurde das Flag â:allow-window-handleâ hinzugefĂŒgt, das das BlĂ€ttern ĂŒber die obere Leiste ermöglicht (nutzbar in BlĂ€ttern, die am unteren Rand angeheftet sind).
- Die Helligkeit der Farben, die zur Abdunkelung von Fenstern im Dunkelmodus verwendet werden, wurde erhöht.
Quelle: opennet.ru
