几天前,我发布了 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 已转换为事件控制器:GtkDragSource 和 GtkDropTarget。已为 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