Nach sieben Monaten Entwicklung wurde die Veröffentlichung des plattformübergreifenden Toolkits zur Erstellung grafischer Benutzeroberflächen – GTK 4.14.0 – bekannt gegeben. GTK 4 entwickelt sich im Rahmen eines neuen Entwicklungsprozesses, der darauf abzielt, Anwendungsentwicklern eine stabile und über mehrere Jahre unterstützte API bereitzustellen, die verwendet werden kann, ohne dass alle sechs Monate Anwendungen aufgrund von Änderungen in der API einer neuen GTK-Version überarbeitet werden müssen.
Zukünftig ist geplant, einen experimentellen Branch 4.90 zu bilden, in dem die Funktionalität für die bevorstehende GTK5-Version weiterentwickelt wird. In den Branch GTK5 werden Änderungen aufgenommen, die die API-Kompatibilität brechen, etwa solche, die mit der Abwertung bestimmter Widgets verbunden sind, wie zum Beispiel dem alten Dateiauswahl-Dialog. Es wird auch die Möglichkeit erörtert, die Unterstützung des X11-Protokolls im Branch GTK5 einzustellen und nur noch die Verwendung des Wayland-Protokolls zu ermöglichen.
Zu den bemerkenswertesten Verbesserungen in GTK 4.14 gehören:
- Es wurden neue, einheitliche Rendering-Engines namens „ngl“ und „vulkan“ in die Architektur integriert, die die grafischen APIs OpenGL (GL 3.3+ und GLES 3.0+) sowie Vulkan nutzen. Beide Engines basieren auf der Vulkan-API, aber in der Engine „ngl“ wurde eine separate Abstraktionsschicht für OpenGL entwickelt, die auf Vulkan aufbaut und die Unterschiede zwischen OpenGL und Vulkan berücksichtigt. Dieser Ansatz ermöglicht es, eine gemeinsame Infrastruktur für die Verarbeitung des Szenengraphen, Transformationen, Caching von Texturen und Glyphen in beiden Engines zu nutzen. Die Einheitlichkeit hat auch die Wartung der Codebasis beider Engines erheblich vereinfacht und ihre Aktualität sowie Synchronisation verbessert.
Im Gegensatz zur alten Engine "gl", bei der für jeden Typ von Renderknoten (rendernode) ein separater einfacher Shader verwendet wurde und eine periodische Neusortierung der Daten beim Offscreen-Rendering stattfand, kommt in den neuen Engines ein komplexer Shader (ubershader) zum Einsatz, der die Daten aus dem Puffer interpretiert. Zu den besonderen Merkmalen der neuen Engines gehören die Kantenglättung (die es ermöglicht, feine Details zu erhalten und gleichmäßigere Konturen zu zeichnen), die Erstellung beliebiger Gradienten (es kann jede Anzahl von Farben und Glättungen verwendet werden) sowie die fractionale Skalierung.
- Standardmäßig ist die neue Rendering-Engine "ngl" aktiviert, und auch die Unterstützung des Grafik-APIs Vulkan ist standardmäßig aktiviert. Bei der Erstellung in der Standardkonfiguration ist nun die Unterstützung für Vulkan 1.3 erforderlich.
- In die GSK-Bibliothek (GTK Scene Kit), die Möglichkeiten zur Zeichnung grafischer Szenen über OpenGL und Vulkan bietet, wurden bedeutende Verbesserungen in Bezug auf das Rendering von Schriften, Hinting und die Verwendung von nicht-ganzzahligen Maßstabswerten beim Textausgeben eingeführt. Beim Hinting (Kantenglättung von Glyphen während der Rasterisierung zur Verbesserung der Klarheit auf Bildschirmen mit niedriger Auflösung) wurde subpixelgenaue Positionierung von Glyphen implementiert. Die Qualität der Schriftgestaltung bei nicht-ganzzahligen Maßstabswerten (z. B. 125%) wurde erhöht. Es wurde die Unterstützung für das Auslagern von Elementen aus den Caches für Glyphen und Texturen implementiert. Die Effizienz der Glyphen-Caches wurde verbessert.
- Im Rahmen der Arbeit, um von der Verwendung der Cairo-Bibliothek zur GPU-gestützten Zeichnung abzurücken, wurde Unterstützung für "Pfade" (Path) eingeführt, um Formen und Bereiche mithilfe einer Sequenz von Linien oder kubischen und quadratischen Bézier-Kurven zu zeichnen. Für die Zeichnung mit Pfaden wurde das Objekt GskPath vorgeschlagen, das die Parameter von Linien oder Kurven definiert, sowie die Objekte GskPathBuilder zur Erstellung von Kurven, GskPathPoint zur Definition eines Punktes auf der Figur und GskPathMeasure zur Durchführung von Messungen wie der Konturlänge.

- In der GDK-Bibliothek, die eine Schicht zwischen GTK und dem Grafiksubsystem bereitstellt, wurde die Unterstützung für den DMA-BUF-Mechanismus erweitert. Dieser ermöglicht die Verwendung von Kern-Level-Puffern, die über Deskriptoren adressiert werden. Dadurch können Pixel-Daten zwischen den Kernsubsystemen über den Deskriptor übertragen werden, anstatt sie zu kopieren. Im Kontext von GTK kann DMA-BUF verwendet werden, um das Kopieren von Pixel-Daten beim Compositing und der Videoverarbeitung zu minimieren (z.B. kann ein Video von einem Hardware-Dekodierer in einen dmabuf geschrieben werden, der dann an eine Wayland-Oberfläche angehängt und an den Compositormanagern zur Überlagerung von Schnittstellenelementen und zur Ausgabe auf den Bildschirm übertragen wird, ohne unnötige Datenkopieroperationen).
Für die direkte Übertragung von Inhalten wie Videos an den Compositormanagern (unter Umgehung des GSK-Renderings) wurde das Widget GtkGraphicsOffload hinzugefügt. Um Inhalte für die direkte Übertragung zu erstellen, wurde die Klasse GdkDmabufTextureBuilder eingeführt, die GdkTexture-Objekte aus dmabuf generiert. Als Quelle für dmabuf können pipewire, video4linux oder gstreamer verwendet werden. Die Formate dmabuf NV16, NV61, NV24, NV42 und YUV werden unterstützt.
- Die Klasse GtkPrintDialog wurde hinzugefügt, die für die Erstellung von Druckdialogen gedacht ist und eine asynchrone API bietet, die anstelle von GtkPrintOperation verwendet werden kann.
- Im Widget GtkEmojiChooser wurden die Emoji-Daten aktualisiert und die Möglichkeit zur Sprachsuche unter Berücksichtigung verschiedener Lokalisierungen hinzugefügt.
- Im Widget GtkEntry wurde das Tracking von Benutzeränderungen verbessert (um die Undo-Operation zu ermöglichen).
- Im Widget GtkFileChooser 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 nun Informationen über OpenGL, Subflächen und FPS angezeigt.
- Im Tool gtk4-rendernode-tool wurde der Befehl „compare“ hinzugefügt.
- Ein neues Tool gtk4-path-tool zur Arbeit mit Pfaden wurde vorgeschlagen.
- Im Tool gtk4-node-editor wurde die Unterstützung für die Auto-Save-Funktion hinzugefügt.
- Ein Absturzproblem wurde behoben, das bei der Nutzung von Wayland in nicht GNOME Shell-basierten Umgebungen auftrat.
- Neue Hilfsmittel für Menschen mit Einschränkungen wurden hinzugefügt, die mit der Anzeige von komplex formatiertem Text, der Arbeit mit WebKitGTK und der Ausgabe von Benachrichtigungen zusammenhängen. Die Unterstützung für ARIA-Spezifikationen wurde verbessert. Die GtkAccessibleText-Schnittstelle wurde hinzugefügt, um Barrierefreiheitsfunktionen in externen Text-Widgets zu nutzen. Im GtkText-Interface wurde die Unterstützung des AT-SPI-Protokolls für die Interaktion mit Bildschirmlesegeräten hinzugefügt.
- Die Möglichkeit zur Renderung mit GPU-Unterstützung wurde hinzugefügt, unter Verwendung der WGL-API auf der Windows-Plattform.
- Der Speicherverbrauch beim Laden von CSS-basierten Themen wurde reduziert.
Quelle: opennet.ru

