Após 10 meses desde lançamento de teste , um novo lançamento experimental da futura versão estável do GTK 4. O ramo GTK 4 está sendo desenvolvido em um novo processo que visa fornecer aos desenvolvedores de aplicativos uma API estável e suportada por vários anos, que pode ser usada sem o temor de que a cada seis meses será necessário refazer o aplicativo devido a alterações na API em um novo ramo do GTK. Até a completa estabilização do GTK 4, recomenda-se que os aplicativos oferecidos aos usuários continuem a ser compilados usando o ramo .
Principais no GTK 3.96:
- Na API (GTK Scene Kit), que realiza a renderização de cenas gráficas através do OpenGL e Vulkan, agora conta com um novo depurador gtk4-node-editor que tornou mais fácil identificar erros, permitindo carregar e exibir nós de renderização em formato serializado (que pode ser salvo em modo de inspeção no GTK inspector), além de comparar o resultado de renderização utilizando diferentes backends;
- As capacidades de transformação 3D foram elevadas a um nível que permite criar efeitos de animação, como um cubo giratório;
- Totalmente O backend GDK Broadway, destinado a renderizar a saída da biblioteca GTK em uma janela do navegador web. A implementação anterior do Broadway não se encaixava nos métodos de renderização propostos no GTK 4 (em vez de saída em buffer, agora utiliza-se um modelo baseado em nós de renderização, onde a saída é composta na forma de uma árvore de operações de alto nível, processadas de forma eficiente pela GPU utilizando OpenGL e Vulkan).
A nova variante do Broadway transforma nós de renderização em nós DOM com estilos CSS para a apresentação da interface no navegador. Cada novo estado de tela é tratado como uma alteração na árvore DOM em relação ao estado anterior, o que permite reduzir o tamanho dos dados transmitidos para o cliente remoto. As transformações 3D e os efeitos gráficos são implementados através da propriedade CSS transform; - No GDK, continuou-se a implementação de APIs desenvolvidas com foco no uso do protocolo Wayland, além da limpeza das APIs ligadas ao X11, ou seu deslocamento para um backend X11 separado. Há progresso na execução de tarefas para eliminar superfícies filhas e coordenadas globais. O suporte ao GDK_SURFACE_SUBSURFACE foi removido do GDK;
- O refatoramento do código relacionado à realização de operações de Drag-and-Drop foi continuado, incluindo a proposta de objetos separados GdkDrag e GdkDrop;
- A manipulação de eventos foi simplificada, agora utilizada apenas para entrada. Os demais eventos foram substituídos por sinais separados, por exemplo, ao invés de eventos de saída, foi proposto o sinal "GdkSurface::render"; ao invés de eventos de configuração — "GdkSurface::size-changed"; ao invés de eventos de mapeamento — "GdkSurface::mapped"; e ao invés de gdk_event_handler_set() — "GdkSurface::event";
- Suporte para a interface portal de acesso às configurações GtkSettings foi adicionado ao backend GDK para Wayland. Para trabalhar com métodos de entrada, foi proposta a extensão do protocolo text-input-unstable-v3;
- Um novo objeto GtkLayoutManager foi apresentado para o desenvolvimento de widgets, implementando um sistema de gerenciamento de layout de elementos baseado na divisão da área visível. O GtkLayoutManager substituiu as propriedades filhas em contêineres GTK, como GtkBox e GtkGrid. Vários gerenciadores de layout prontos foram propostos: GtkBinLayout para contêineres simples com um único filho, GtkBoxLayout para filhos dispostos linearmente, GtkGridLayout para alinhar filhos em uma grade, GtkFixedLayout para posicionamento arbitrário de filhos, GtkCustomLayout para a tradução de elementos tradicionais com base em manipuladores size_allocate;
- Widgets GtkAssistant, GtkStack e GtkNotebook agora incluem objetos publicamente acessíveis para a saída em páginas de filhos, onde foram transferidas propriedades filhas não relacionadas ao layout (Layout) desses widgets. Como todas as propriedades filhas existentes foram convertidas em propriedades normais, as propriedades de layout foram ou transferidas para objetos de página, removendo completamente o suporte a propriedades filhas de GtkContainer;
- A funcionalidade básica do GtkEntry foi movida para o novo widget GtkText, que também inclui uma interface de edição aprimorada GtkEditable. Todas as subclasses existentes de entradas de dados foram reestruturadas sob a forma de implementações GtkEditable baseadas no novo widget GtkText;
- Um novo widget GtkPasswordEntry foi adicionado para formulários de entrada de senhas;
- Foi adicionada a capacidade em GtkWidgets de transformar elementos filhos usando métodos de transformação linear, definidos por CSS ou pelo argumento gtk_widget_allocate em GskTransform. Essa funcionalidade já foi aplicada no widget GtkFixed;
- Novos modelos de listas foram adicionados: GtkMapListModel, GtkSliceListModel, GtkSortListModel, GtkSelectionModel e GtkSingleSelection. Futuramente, está previsto adicionar suporte a modelos de lista no GtkListView;
- No GtkBuilder, foi adicionada a possibilidade de definir propriedades de objetos inline, em vez de usar referências por identificador;
- No gtk4-builder-tool, foi adicionada uma comando para converter arquivos UI do GTK 3 para o GTK 4;
- O suporte para temas de design principais (key theme), menus tabulares (tabular menu) e blocos combinados (combo box) foi interrompido. O widget GtkInvisible foi removido.
Fonte: opennet.ru
