Dopo sei mesi di sviluppo, è stato rilasciato il toolkit multipiattaforma per la creazione di interfacce grafiche — GTK 4.22. GTK 4 si evolve all'interno di un processo di sviluppo che mira a fornire agli sviluppatori un'API stabile e supportata per diversi anni, permettendo di usarla senza temere di dover rifare le proprie applicazioni ogni sei mesi a causa di modifiche all'API in una nuova versione di GTK.
Tra i miglioramenti significativi in GTK 4.22:
- È stata aggiunta una sistema integrato di rendering e parsing delle immagini in formato SVG, che supporta l'animazione e consente di creare icone animate, elementi interattivi dell'interfaccia e indicatori dinamici, come gli indicatori di progresso. GtkSvg si integra direttamente con la libreria GSK (GTK Scene Kit), offrendo capacità di rendering di scene grafiche tramite OpenGL e Vulkan. La libreria librsvg, precedentemente utilizzata per il rendering delle icone SVG, è stata rimossa dalle dipendenze.
Per lavorare con il formato SVG è stata proposta la classe Gtk.Svg, che consente di evitare dipendenze esterne durante il rendering di icone vettoriali e risorse per le applicazioni. L'implementazione del formato SVG è stata progettata appositamente per GTK e supera con successo 1250 dei 1616 test di compatibilità del set resvg (per confronto, Firefox supera 1385 test, librsvg 1168, e QtSvg 591).
- È stato aggiunto il widget GtkPopoverBin, che semplifica l'aggiunta di menu contestuali e finestre di dialogo a discesa in altri widget. GtkPopoverBin può essere utilizzato come contenitore per integrare la funzionalità delle finestre pop-up in widget che di per sé non sono in grado di farlo.
- È stato introdotto un nuovo tipo di espressioni GtkTryExpression, che consente di definire operazioni di fallback. GtkTryExpression prova a eseguire ogni espressione dall'elenco fino a quando una di esse non viene eseguita con successo.
- È stato implementato un nuovo formato di icone simboliche che supportano l'animazione e gli stati mutevoli (ad esempio, per indicare l'attività). È stata aggiunta la proprietà CSS «-gtk-icon-weight» per controllare la larghezza delle icone. È stata aggiunta l'app dimostrativa org.gtk.Shaper con l'implementazione di un editor per il nuovo formato di icone simboliche.

- Nel backend, è stata realizzata un supporto sperimentale per il protocollo xx-session-management, che può essere utilizzato per il ripristino dello stato delle finestre in sessioni interrotte (ad esempio, dopo un arresto anomalo del compositore). Per attivarlo, impostare la variabile ambientale «GDK_DEBUG=session-mgmt».
- Nell'API GtkApplication è stata aggiunta la possibilità di salvare lo stato utilizzando il protocollo xx-session-management. Nella versione GNOME 50, questa funzionalità è attivata per salvare le sessioni e ripristinare le posizioni delle finestre.
- Per accedere alle impostazioni nel backend per Wayland è stato utilizzato il portale freedesktop.portal.Settings.
- Nell'API GtkFileLauncher è stata realizzata la possibilità di accedere a file in scrittura, se utilizzati all'interno di pacchetti flatpak.
- In GSK (GTK Scene Kit) è stata aggiunta la supporto per il profilo e la possibilità di spostare pixel dell'immagine originale in base a una «mappa di spostamento» (displacement map) per creare effetti grafici complessi.
- È stato aggiunto l'API GskRenderNodeReplay per gestire l'albero dei nodi di rendering (Render Node).
- Sono stati aggiunti nuovi tipi di nodi di rendering «copy» e «paste», che consentono di copiare e incollare un'area sotto l'elemento corrente in un'altra parte del grafo della scena.
- È stato aggiunto un nuovo tipo di nodi di rendering «composite», che consente di utilizzare operazioni di composizione aggiuntive durante il rendering di un elemento sopra uno sfondo, come il sovrapposto utilizzando una maschera.
- In CSS è stata aggiunta la proprietà «backdrop-filter» per applicare effetti all'area di sfondo, come l'effetto di sfocatura dello sfondo.
- In CSS è stata aggiunta la supporto per la configurazione «reduced-motion», informando della necessità di minimizzare l'uso delle animazioni.
Fonte: opennet.ru

