publicação experimental final do framework , que implementa todas as funcionalidades planejadas para o GTK 4. O ramo GTK 4 está sendo desenvolvido dentro de um novo processo de desenvolvimento que tenta fornecer aos desenvolvedores de aplicativos uma API estável e suportada por vários anos, que pode ser usada sem o medo de que a cada seis meses seja necessário reformular os aplicativos devido às mudanças na API em outro ramo do GTK. O lançamento do GTK 4 está previsto para o final do ano.
Das mais em pode-se destacar:
- Método de layout de elementos baseado em restrições (), onde a posição e o tamanho dos elementos filhos são determinados com base na distância das bordas e no tamanho de outros elementos.
- Módulo de renderização baseado na API gráfica Vulkan, que implementa shaders para muitos elementos CSS que consomem muitos recursos, aplicados nos widgets GTK.
- Integração (GTK Scene Kit) com capacidades de renderização de cenas gráficas através do OpenGL e Vulkan.
- A organização da renderização foi revisada – em vez da saída para um buffer, agora é utilizada um modelo baseado em nós de renderização (render nodes), onde a saída é composta na forma de uma árvore de operações de alto nível, eficientemente processadas pela GPU através do OpenGL e Vulkan.
- para processamento flexível da alteração do foco de entrada.
- Modelo de entrega de eventos modernizado, que permite evitar subwindows na roteação de eventos de entrada. A necessidade de implementar um novo modelo está relacionada ao uso mais intenso de efeitos de animação, cuja renderização deve ser realizada sem mudar o layout dos elementos visíveis e, consequentemente, sem subwindows.
- API do GDK reestruturada com foco no uso do protocolo Wayland e conceitos relacionados. Funcionalidades amarradas ao X11 e Wayland foram transferidas para .
- Uma grande limpeza da API foi realizada, incluindo a remoção das classes GtkMenu, GtkMenuBar e GtkToolbar, que foram substituídas pelo GMenu e opções baseadas em menus suspensos (popover).
- Um stack para desfazer alterações (undo) foi integrado no GtkTextView e outros widgets de entrada.
- Foi adicionado uma nova classe GtkNative para widgets que têm sua própria superfície de exibição e podem funcionar de forma independente no primeiro nível, sem depender de widgets pais.
- Novos widgets foram adicionados, incluindo GtkPicture, GtkText, GtkPasswordEntry, GtkListView, GtkGridView, GtkColumnView, e também um widget para exibir Emojis.
- Para o desenvolvimento de widgets, foi apresentado um novo objeto GtkLayoutManager com a implementação de um sistema de controle de layout de elementos com base no tamanho da área visível. O GtkLayoutManager substituiu as propriedades filhas em contêineres GTK, como GtkBox e GtkGrid.
- O processamento de eventos foi simplificado, agora sendo utilizado apenas para entrada. Outros eventos foram substituídos por sinais separados, por exemplo, ao invés de eventos de saída, foi proposto o sinal "GdkSurface::render", e ao invés de eventos de ajuste — "GdkSurface::size-changed".
- Adicionado um novo nível de abstração GdkPaintable, representando objetos que podem ser desenhados em qualquer lugar com qualquer tamanho, sem a necessidade de realizar a ordenação das camadas de layout.
- O backend Broadway foi reescrito, permitindo que a saída da biblioteca GTK seja desenhada em uma janela de navegador web.
- A API relacionada à execução de operações de Arrastar e Soltar foi reformulada, incluindo a oferta de objetos separados GdkDrag e GdkDrop.
Melhorias em relação à versão de teste anterior:
- A antiga implementação da API de Acessibilidade para pessoas com deficiência foi removida, sendo substituída por uma nova versão baseada na especificação e no widget GtkAccessible.
- Adicionada suporte a rótulos editáveis (GtkEditableLabel).
- Novos modelos de listas foram propostos para exibição de marcadores (GtkBookmarkList), strings (GtkStringList) e blocos de seleção (GtkBitset).
- No widget GtkTreeView, foi implementada a capacidade de edição de células.
- Em GtkGridView e GtkListView, a implementação de rolagem foi aprimorada, adicionando suporte à rolagem automática e autoabrindo.
- No GtkWidget, o processamento de várias ações foi significativamente acelerado.
- Em GtkFilterListModel e GtkSortListModel, foi adicionada suporte à rolagem e filtragem incrementais.
- No Inspector, foi adicionada suporte à inspeção de modelos de listas e a capacidade de navegação direta entre objetos.
- No GDK, foi garantido o armazenamento do histórico de rolagem, realizada a limpeza da API GdkDevice, encerrando a divisão de dispositivos em mestre e escravo.
- Adicionado um novo backend GDK para macOS.
- Para Windows, foi proposto um novo backend GDK de rendering baseado em , para permitir a tradução de chamadas OpenGL ES em OpenGL, Direct3D 9/11, GL Desktop e Vulkan.
Fonte: opennet.ru
