Nach sieben Monaten Entwicklung wurde die plattformübergreifende Toolkit-Version zur Erstellung grafischer Benutzeroberflächen – GTK 4.14.0 – veröffentlicht. GTK 4 entwickelt sich im Rahmen eines neuen Entwicklungsprozesses weiter, der versucht, Programmierern eine stabile und über mehrere Jahre unterstützte API bereitzustellen, die genutzt werden kann, ohne Angst haben zu müssen, dass alle sechs Monate die Anwendungen aufgrund von API-Änderungen in der nächsten GTK-Version überarbeitet werden müssen.
In Zukunft ist geplant, einen experimentellen Branch 4.90 zu bilden, in dem die Funktionalität für die zukünftige GTK5-Version weiterentwickelt wird. In den Branch GTK5 werden Änderungen aufgenommen, die die API-Kompatibilität brechen, beispielsweise in Bezug auf die Abwertung bestimmter Widgets, wie den alten Dateiauswahl-Dialog. Auch wird die Möglichkeit diskutiert, die Unterstützung des X11-Protokolls im Branch GTK5 einzustellen und die Funktionalität nur mit dem Wayland-Protokoll zu ermöglichen.
Zu den bemerkenswertesten Verbesserungen in GTK 4.14 gehören:
- Neue vereinheitlichte Rendering-Engines «ngl» und «vulkan» wurden integriert, die die Grafik-APIs OpenGL (GL 3.3+ und GLES 3.0+) und Vulkan verwenden. Beide Engines basieren auf der Vulkan-API, aber in der Engine «ngl» wurde eine separate Abstraktionsschicht für OpenGL geschaffen, die auf Vulkan aufsetzt und die Unterschiede zwischen OpenGL und Vulkan berücksichtigt. Dieser Ansatz hat es ermöglicht, in beiden Engines eine gemeinsame Infrastruktur zur Verarbeitung von Szenengraphen, Transformationen, Textur- und Glyphen-Caching zu verwenden. Die Vereinheitlichung hat auch die Wartung des Codebases beider Engines erheblich vereinfacht und deren Aktualisierung und Synchronisierung erleichtert.
Im Gegensatz zur alten Engine «gl», bei der für jeden Typ von Rendering-Knoten (rendernode) ein einfacher Shader verwendet wurde und eine periodische Neusortierung der Daten beim Offscreen-Rendering stattfand, setzen die neuen Engines anstelle des Offscreen-Renderings einen komplexen Shader (ubershader) ein, der die Daten aus dem Puffer interpretiert. Zu den besonderen Funktionen der neuen Engines gehören Kantenglättung (erlaubt das Beibehalten feiner Details und das Erzeugen gleichmäßigerer Konturen), die Bildung beliebiger Verläufe (es können beliebig viele Farben und Glättungen verwendet werden) und die fraktionale Skalierung.
- Standardmäßig ist die neue Rendering-Engine „ngl“ aktiviert, und die Unterstützung von Vulkan-API ist ebenfalls standardmäßig eingeschaltet. Bei der Erstellung in der Standardkonfiguration ist jetzt die Unterstützung von Vulkan 1.3 erforderlich.
- Die GSK-Bibliothek (GTK Scene Kit), die Rendering-Funktionen für Grafikszenen über OpenGL und Vulkan bietet, hat bedeutende Verbesserungen in Bezug auf das Rendering von Schriften, Hinting und die Verwendung von nicht ganzzahligen Skalierungswerten beim Text-Rendering erfahren. Beim Hinting (Glatte Konturen von Glyphen bei der Rasterung für verbesserte Klarheit auf Bildschirmen mit niedriger Auflösung) wurde subpixelgenaues Positionieren von Glyphen implementiert. Die Qualität des Schrift-Renderings bei nicht ganzzahligen Skalierungswerten (z.B. 125%) wurde verbessert. Die Unterstützung für das Auslagern von Elementen aus den Caches für Glyphen und Texturen wurde implementiert. Die Effizienz der Glyphen-Caching wurde erhöht.
- Im Rahmen der Bemühungen, die Verwendung der Cairo-Bibliothek zugunsten von GPU-Rendering zu reduzieren, wurde Unterstützung für „Pfade“ (Path) hinzugefügt, um Formen und Flächen mit einer Sequenz von Linien oder kubischen und quadratischen Bézier-Kurven zu rendern. Für das Rendering mit Pfaden wurde das Objekt GskPath eingeführt, das die Parameter von Linien oder Kurven definiert, sowie die Objekte GskPathBuilder zur Erstellung von Kurven, GskPathPoint zur Definition eines Punkts auf der Form und GskPathMeasure zur Durchführung von Messungen, wie z.B. der Konturlänge.

- In der GDK-Bibliothek, die eine Schicht zwischen GTK und der Grafik-Subsystem bereitstellt, wurde die Unterstützung des DMA-BUF-Mechanismus erweitert, der es ermöglicht, Kernel-Puffer zu verwenden, die über einen Descriptor adressiert werden. Dies ermöglicht es, Pixel-Daten anstelle von Kopieren zwischen den Subsystemen des Kernels über den Descriptor zu übertragen. Im Kontext von GTK kann DMA-BUF verwendet werden, um das Kopieren von Pixel-Daten im Kompositionsprozess und bei der Arbeit mit Videos zu minimieren (z.B. kann Video von einem Hardware-Dekoder in dmabuf aufgenommen werden, das dann an eine Wayland-Oberfläche angehängt und an den Komposite-Manager zur Überlagerung von UI-Elementen und Anzeige auf dem Bildschirm ohne zusätzliche Kopieroperationen übergeben wird).
Für die direkte Übertragung von Inhalten wie Videos an den Composite-Manager (um die GSK-Rendering-Pipeline zu umgehen), wurde das GtkGraphicsOffload-Widget hinzugefügt, und zum Erstellen von Inhalten für die direkte Übertragung wurde die Klasse GdkDmabufTextureBuilder hinzugefügt, die GdkTexture-Objekte aus dmabuf erstellt. Als Quelle für dmabuf können pipewire, video4linux oder gstreamer verwendet werden. Die Formate von dmabuf NV16, NV61, NV24, NV42 und YUV werden unterstützt.
- Die Klasse GtkPrintDialog wurde hinzugefügt, die zur Erstellung von Druckausgabedialogen dient und eine asynchrone API zur Verwendung anstelle von GtkPrintOperation bietet.
- Im GtkEmojiChooser-Widget wurden die Emoji-Daten aktualisiert und die Möglichkeit zur Suche in verschiedenen Sprachen unter Berücksichtigung unterschiedlicher Sprachen hinzugefügt.
- Im GtkEntry-Widget wurde das Tracking von Änderungen, die vom Benutzer vorgenommen wurden (zur Durchführung der Rückgängig-Operation), verbessert.
- Im GtkFileChooser-Widget wurde das Öffnen des Datei-Auswahldialogs beschleunigt.
- Die Klasse GtkShortcutsWindow, die Hinweise zu Tastenkombinationen und Bildschirmgesten anzeigt, wurde für kleine Bildschirme optimiert.
- Im Inspektionsmodus (GTK-Inspektor) wird jetzt Informationen über OpenGL, Unterschichten und FPS angezeigt.
- Dem gtk4-rendernode-tool wurde der Befehl „compare“ hinzugefügt.
- Ein neues Werkzeug gtk4-path-tool für die Arbeit mit Pfaden wurde vorgeschlagen.
- Im gtk4-node-editor wurde die Unterstützung für automatisches Speichern hinzugefügt.
- Ein Absturzproblem, das bei der Verwendung von Wayland in Nicht-GNOME-Shell-Umgebungen auftrat, wurde behoben.
- Neue Tools für Menschen mit Behinderungen, die sich auf die Anzeige komplex formatierter Texte, die Verwendung von WebKitGTK und die Ausgabe von Benachrichtigungen beziehen, wurden hinzugefügt. Die Unterstützung der ARIA-Spezifikationen wurde verbessert. Das GtkAccessibleText-Interface wurde hinzugefügt, um Zugänglichkeits-Funktionen in externen Text-Widgets zu nutzen. Im GtkText-Interface wurde die Unterstützung für das AT-SPI-Protokoll zur Interaktion mit Bildschirmlesern hinzugefügt.
- Die Möglichkeit zum Rendern unter Verwendung von GPU mit der WGL-API auf Windows-Plattformen wurde hinzugefügt.
- Der Speicherverbrauch beim Laden von CSS-basierten Designs wurde reduziert.
Quelle: opennet.ru

