本周,我们发布了 GTK 3.96.0。同样,距离上次发布已经有一段时间了,因此值得总结一下此版本中的新功能。这里的内容实在太多了,无法全部涵盖,因此这篇文章只会重点介绍最重要的更改。
此版本是我们迈向 GTK 4 的又一个里程碑。尽管仍有一些未完成的事情,但此版本更接近我们希望通过 GTK 4 实现的目标。
GSK
GSK 已经进行了许多错误修复和新的测试,使用新的调试工具 gtk4-node-editor 可以更容易地进行这些测试。它可以加载和显示序列化的渲染节点树,例如从 GTK 检查器保存的渲染节点树,并比较不同渲染器的输出。
3D 转换支持已提升到我们可以进行如下面的立方体旋转动画转换的水平。
GDK
向 Wayland 风格的 API 迁移的趋势仍在继续,更多仅限 X11 的 API 被移动到 X11 后端或直接删除。子表面和全局坐标的使用已大大减少,但这项工作尚未完成。
拖放的重构也已继续,引入了 GdkDrag
和 GdkDrop
对象。此重构的 GTK 部分仍未完成。
事件已简化,现在仅用于输入。其他事件已被 GdkSurface
上的信号和属性替换。详细来说,暴露事件已被 ::render
信号替换,配置事件已被 ::size-changed
信号替换。映射事件已被 :mapped
属性替换,gdk_event_handler_set()
已被 ::event
信号替换。
Wayland 后端已获得对 GtkSettings
的设置门户的支持,并使用 text-input-unstable-v3 协议来支持其输入法。
GTK
小部件
自定义小部件的一大变化是引入了 GtkLayoutManager
,这是一个新的委托对象,负责大小分配。布局管理器可以选择使用布局子项来保存布局属性。这取代了 GTK 容器(如 GtkBox
或 GtkGrid
)中与布局相关的子属性。
提供了许多布局管理器
GtkBinLayout
,用于简单的单子容器GtkBoxLayout
,用于线性排列的子项GtkGridLayout
,用于排列在网格中的子项GtkFixedLayout
,用于自由定位和转换的子项GtkCustomLayout
,作为将传统的measure
和size_allocate
vfuncs 转换为布局管理器的快速方法
未来会出现更多的布局管理器实现。最重要的是,正在进行基于约束的布局管理器的工作。
GtkAssistant
、GtkStack
和 GtkNotebook
具有公开的
其子项的可访问页面对象。页面对象
也通过列表模型公开。这些容器的非布局相关子属性已转换为这些页面对象上的常规属性。
由于所有现有的子属性都已转换为常规属性、移动到布局属性或移动到此类页面对象,因此已从 GtkContainer
中删除了对子属性的支持。
核心的 GtkEntry
功能已移至新的 GtkText
小部件中,该小部件还实现了扩展的 GtkEditable
接口。GTK 中所有现有的条目子类都已转换为包装 GtkText
小部件的 GtkEditable
实现。这还包括一个新的 GtkPasswordEntry
。
其他更改
GTK 小部件可以使用投影线性变换来转换其子项。
此功能在 CSS 中可用,并且
作为 gtk_widget_allocate
的 GskTransform
参数。GtkFixed
是
第一个公开此功能的容器。有关更多示例,
请参阅 GtkRevealer
的摆动过渡、旋转过渡GtkStack
或 gtk4-demo 中的固定布局示例。
已引入了许多列表模型,用于内部使用
并作为公共 API:GtkMapListModel
、GtkSliceListModel
、GtkSortListModel
、GtkSelectionModel
、GtkSingleSelection
。当我们引入基于列表模型的 GtkListView
时,它们将得到更广泛的应用。
GtkBuilder
可以内联指定对象值属性,而不是通过 ID 引用它们,gtk4-builder-tool 的 simplify
命令已获得一个选项,可自动将 GTK 3 UI 定义文件转换为 GTK 4。