本周,我们发布了 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。