GTK 3.98

几天前,我发布了 GTK 3.98 tarball。这是向 GTK 4 迈出的又一步。它稍微落后于计划,并且没有完全包含我们想要加入的所有内容,但是它更接近我们希望在 GTK 4 中发布的内容。

自 3.96 快照以来,已经过去了将近 9 个月,所以有很多新东西值得关注。太多了,无法全部覆盖,但这里有一些亮点

性能

GL 渲染器已经看到了稳定的优化和性能改进。

在去年西海岸 黑客节之后,通过缓存可见范围的渲染节点,GtkTextView 的滚动性能得到了极大的提高。在同一次黑客节上,文本插入符的闪烁被改为平滑动画,这与性能无关,但看起来很酷。

自新年以来,一个重点是提高 CSS 机制的性能。CSS 值实现已被优化,以尽可能避免计算值。CSS 查找现在使用 Bloom 过滤器。图标加载的 IO 已移至线程。

最近的大部分工作都得益于性能黑客节之后添加的 sysprof 性能分析支持,最近该支持已得到增强以报告更多信息。要使用它,只需在环境中以 GTK_TRACE=1 启动 GTK 应用程序,然后使用 sysprof 加载生成的 syscap 文件。

DND

DND 重构已完成。DND 的 GTK API 已转换为事件控制器:GtkDragSourceGtkDropTarget。已为 DND 和剪贴板添加了通过文件传输门户进行文件传输的支持。数据传输的底层新基础设施已在之前详细介绍过。

GDK

GDK 向 Wayland 概念的转变正在继续。此清理尚未 100% 完成。

子表面已被删除。GDK 现在仅支持顶层和弹出表面。客户端窗口实现也被删除。全局位置和相关 API(例如 gdk_surface_move())不再可用。

抓取不再作为 API 公开。作为替代,可以将弹出表面配置为在外部点击时隐藏。

构建 X11 后端时,XI2 现在是强制性的,并且删除了对 xim 输入法的支持,转而支持 IBus。

Wayland 后端不再依赖 libwayland-cursor 来加载光标主题,而是按需加载单个光标。

GTK 删除

许多类已被明确设为不可子类化,并且通过尽可能使小部件直接从 GtkWidget 派生,从而简化了小部件层次结构。

GtkMenu、GtkMenuBar、GtkToolbar 和相关类已被删除。它们将被 GMenu 和基于弹出窗口的变体所取代。弹出菜单现在可以执行传统的嵌套菜单,还可以显示加速器。

上下文菜单不再使用 ::populate-popup 信号创建,而是使用菜单模型和动作。使用诸如 gtk_widget_class_install_action() 之类的 API 在 class_init 中创建这些操作变得更加容易。

GtkGestureMultiPress 已重命名为 GtkGestureClick,使其更清楚此事件控制器的用途。

GTK 添加

我们不仅仅删除了东西。还添加了一些新东西。

为拥有自己表面的小部件引入了 GtkNative 接口。它已从 GtkRoot 接口中分离出来,后者专门用于没有父级的顶层小部件。

添加了基于约束的布局管理器。很高兴看到人们尝试一下。如果您这样做,请给我们反馈。

GtkTextView 和其他文本小部件获得了一个简单的撤消堆栈,可以与 Ctrl-Z 一起使用。

表情符号选择器小部件已公开。

未来展望

在 3.98 之后,我计划在剩余的未完成项目落地时进行更频繁的快照。您在问这些项目是什么?

以下是我们仍希望在 GTK 4 之前集成的项目

– 键盘快捷键的事件控制器
– 可移动的弹出窗口
– 行回收列表和网格视图
– 改进的可访问性基础设施
– 动画 API