本周,我们发布了 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
上的信号和属性取代。具体来说,expose 事件已被 ::render
信号取代,configure 事件已被 ::size-changed
信号取代。Map 事件已被 :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 中可用,并且可以通过GskTransform
参数传递给 gtk_widget_allocate
。GtkFixed
是
第一个公开此功能的容器。有关更多示例,
请参阅 GtkRevealer
的摇摆过渡、GtkStack
的旋转过渡
或 gtk4-demo 中的固定布局示例。
引入了多个列表模型,供内部使用
和作为公共 API:GtkMapListModel
、GtkSliceListModel
、GtkSortListModel
、GtkSelectionModel
、GtkSingleSelection
。当我们引入基于列表模型的 GtkListView
时,这些模型将得到更广泛的应用。
GtkBuilder
可以内联指定对象值属性,而不是通过 ID 引用它们,并且 gtk4-builder-tool 的 simplify
命令已获得一个选项,可以自动将 GTK 3 UI 定义文件转换为 GTK 4。
我很高兴看到 GTK 4 成型!!
我猜想 GTK4 的实现会使 Xfce、LXDE 和 MATE 更加笨重。
@Junior:除非你说的“笨重”是指“功能丰富”,否则没有任何固有的“笨重”。无论如何,MATE、Xfce 和 LXDE 可以随着时间的推移进行移植,并且希望它们可以为它们可能有的任何“轻量级”需求做出贡献。