Dopo 10 mesi dal rilascio di prova , nuova versione sperimentale del futuro rilascio stabile di GTK 4. Il ramo GTK 4 si sviluppa nell'ambito di un nuovo processo di sviluppo, che cerca di offrire agli sviluppatori di applicazioni un'API stabile e supportata per anni, senza il timore di dover rifare l'applicazione ogni sei mesi a causa di modifiche all'API nel ramo successivo di GTK. Fino alla piena stabilizzazione di GTK 4, le applicazioni suggerite per gli utenti sono raccomandate per continuare a essere compile con il ramo .
Principali in GTK 3.96:
- Nell'API (GTK Scene Kit), che fornisce il rendering di scene grafiche attraverso OpenGL e Vulkan, sono stati fatti progressi nella risoluzione di errori, che ora possono essere identificati più facilmente grazie al nuovo strumento di debug gtk4-node-editor, che consente di caricare e visualizzare un nodo di rendering in formato serializzato (può essere salvato in modalità di ispezione tramite GTK inspector), nonché di confrontare il risultato del rendering utilizzando diversi backend;
- Le capacità di trasformazione 3D sono state elevate a un livello che consente di creare effetti di animazione come il cubo rotante;
- Completamente Il backend GDK Broadway, destinato al rendering dell'output della libreria GTK in una finestra del browser. La vecchia implementazione di Broadway non si adattava ai metodi di rendering proposti in GTK 4 (invece di inviare l'output a un buffer, ora viene utilizzato un modello basato su nodi di rendering, in cui l'output è composto in una struttura ad albero di operazioni di alto livello, gestite in modo efficiente dalla GPU tramite OpenGL e Vulkan).
La nuova versione di Broadway trasforma i nodi di rendering in nodi DOM con stili CSS per l'output dell'interfaccia nel browser. Ogni nuovo stato dello schermo è trattato come una modifica dell'albero DOM rispetto allo stato precedente, riducendo così la dimensione dei dati inviati al client remoto. Le trasformazioni 3D e gli effetti grafici sono realizzati tramite la proprietà CSS transform; - In GDK è proseguita l'implementazione delle API sviluppate tenendo conto dell'uso del protocollo Wayland, e la pulizia delle API legate a X11, o il loro spostamento in un backend separato X11. Si segnala progresso nel lavoro per abbandonare l'uso delle superfici figlie e delle coordinate globali. È stata rimossa dal GDK la supporto a GDK_SURFACE_SUBSURFACE;
- È proseguita la rifattorizzazione del codice relativo all'esecuzione delle operazioni di Drag-and-Drop, compresa la proposta di oggetti separati GdkDrag e GdkDrop;
- È stata semplificata la gestione degli eventi, che ora vengono utilizzati solo per l'input. Altri eventi sono stati sostituiti con segnali separati, ad esempio, invece degli eventi di output è stato proposto il segnale 'GdkSurface::render', invece degli eventi di ridimensionamento — 'GdkSurface::size-changed', invece degli eventi di mappatura — 'GdkSurface::mapped', invece di gdk_event_handler_set() — 'GdkSurface::event';
- Nel backend GDK per Wayland è stato aggiunto il supporto dell'interfaccia portal per l'accesso alle impostazioni di GtkSettings. Per lavorare con i metodi di input è stata proposta la supporto all'estensione del protocollo text-input-unstable-v3;
- Per lo sviluppo dei widget è stato introdotto un nuovo oggetto GtkLayoutManager con l'implementazione di un sistema di gestione del layout degli elementi in base alla dimensione dell'area visibile. GtkLayoutManager ha sostituito le proprietà figlie nei contenitori GTK, come GtkBox e GtkGrid. Sono stati proposti diversi manager di layout pronti all'uso: GtkBinLayout per contenitori semplici con un singolo elemento figlio, GtkBoxLayout per elementi figli allineati linearmente, GtkGridLayout per l'allineamento degli elementi figli su una griglia, GtkFixedLayout per il posizionamento arbitrario degli elementi figli, GtkCustomLayout per la traduzione di elementi tradizionali basati sui gestori size_allocate;
- Nei widget GtkAssistant, GtkStack e GtkNotebook sono stati aggiunti oggetti pubblicamente accessibili per l'output a schede degli elementi figli, ai quali sono state trasferite le proprietà dei dati figli non legate al layout. Poiché tutte le proprietà figlie esistenti sono state convertite in normali proprietà, le proprietà di layout sono state spostate negli oggetti paginati, quindi è stata completamente rimossa dal GtkContainer la supporto per le proprietà figlie;
- La funzionalità di base di GtkEntry è stata trasferita nel nuovo widget GtkText, che include anche un'interfaccia di editing estesa GtkEditable. Tutti gli attuali sottotipi di input sono stati riprogettati sotto forma di implementazioni GtkEditable basate sul nuovo widget GtkText;
- Aggiunto un nuovo widget GtkPasswordEntry per i moduli di input delle password;
- In GtkWidgets è stata aggiunta la possibilità di trasformare gli elementi figli utilizzando metodi di trasformazione lineari, specificati tramite CSS o l'argomento gtk_widget_allocate in GskTransform. Questa funzionalità è già stata applicata nel widget GtkFixed;
- Aggiunti nuovi modelli per la formazione di liste: GtkMapListModel, GtkSliceListModel, GtkSortListModel, GtkSelectionModel e GtkSingleSelection. In futuro è prevista l'aggiunta del supporto per i modelli di lista in GtkListView;
- In GtkBuilder è stata aggiunta la possibilità di assegnare proprietà agli oggetti in loco (inline), invece di utilizzare riferimenti per identificatore;
- Nel gtk4-builder-tool è stato aggiunto un comando per convertire i file UI da GTK 3 a GTK 4;
- Sospesa la supporto per i temi chiave (key theme), i menu tabulari (tabular menu) e i blocchi combinati (combo box). Rimosso il widget GtkInvisible.
Fonte: opennet.ru
