Beküldte kami911 -
A GTK eddig is támogatta a SVG (Scalable Vector Graphics) ikonokat, azonban mindig a külső librsvg könyvtárra támaszkodott, ami miatt a megvalósítás nem volt teljesen natív. A Red Hat mérnöke, Matthias Clasen, az elmúlt hónapokban azon dolgozott, hogy a GTK saját natív SVG támogatást kapjon, beleértve az SVG animációkat is.
Korábbi helyzet
GTK 3 és korábbi verziók során a SVG ikonok megjelenítéséhez a következő folyamat zajlott:
- librsvg a SVG fájlok renderelésére, a gdk-pixbuf-on keresztül.
- A kapott raszterizált képet pixel szinten színezték át a témának megfelelően.
Ez működött, de elveszett az SVG skálázhatóságának előnye: egyszerűen csak pixelek maradtak, amelyek nem skálázhatóak rugalmasan a GTK 4 frakcionális skálázásának és jelenetgrafikájának kihasználására.
A változás története
- GTK 4.20: Clasen elkezdte a saját SVG parser fejlesztését a szimbolikus ikonokhoz, képes volt feldolgozni a 99%-át az Adwaita ikonoknak.
- GTK 4.21: Megjelent a GtkPathPaintable, amely lehetővé tette dinamikus vonalvastagság és egyszerű animációk támogatását inspirálva az Apple SF Symbols megoldásából.
- GTK 4.22: A GtkPathPaintable-t felváltotta a GtkSvg, egy GdkPaintable, amely támogatja az SVG-t és az animációkat – legalább az ikonokhoz legrelevánsabb SVG részhalmazt.
Mit kínál az új támogatás?
- Natív SVG renderelés a GTK-ban, külső librsvg nélkül.
- Animációk támogatása, így mozgó ikonok is használhatók.
- Stroke és fill kezelés, azaz a vonalak és kitöltések megfelelő megjelenítése.
- Transzformációk, szűrők, klippek, utak és gradiensek támogatása a GTK renderelési infrastruktúrájában.
Miért fontos ez?
- A GTK 4.22 lehetővé teszi, hogy a ikonok skálázhatósága teljes mértékben kihasználható legyen, különösen magas DPI és frakcionális skálázás mellett.
- Az animációk révén a felhasználói felület élőbb és dinamikusabb lehet, például interaktív gomboknál vagy alkalmazásikonoknál.
- A natív megoldás csökkenti a külső Rust-alapú librsvg függőséget, egyszerűbbé és stabilabbá téve a GTK alkalmazásokat, különösen Android és egyéb platformokon.

