今天,我们发布了 GTK+ 3.94.0。同样,距离上次发布已经有一段时间了,所以值得总结一下此版本中的新内容。这里的内容实在太多了,无法全部涵盖,因此这篇文章只会重点介绍最重要的更改。
此版本是我们迈向 GTK+ 4 的另一个里程碑。虽然还有一些未完成的事情,但此版本更接近我们希望通过 GTK+ 4 实现的目标。
GSK
Broadway 后端现在有一个 GskRenderer,因此 Broadway 的未来看起来会更好。
我们引入了一种新型的渲染节点,GskOffsetNode,它是简化的 GskTransformNode,负责在我们上下移动渲染节点树时转换内容。通过此更改,我们现在可以为多个帧缓存小部件的渲染节点,并在必要时重新定位它们。
我们还引入了 GskDebugNodes,它接管了节点名称,并让我们简化了一些用于创建渲染节点的 GTK+ API。
当回退到 Cairo 进行渲染时,我们现在使用记录表面而不是图像表面,因此我们可以以不同的比例重放渲染。
一个新的重要操作是 gsk_render_node_diff,用于比较两个渲染节点树(有关更多信息,请参见下文)。
GDK
遵循将 GDK API 与 Wayland 而不是 X 对齐的总体趋势,GdkWindow 重命名为 GdkSurface。
GdkTexture API 得到了改进,具有新的 GdkMemoryTexture 和 GdkGLTexture 子类,并且引入了一个强大的新抽象,GdkPaintable。
GdkPaintable 表示一个可以在任何位置以任何大小绘制的对象,而无需任何类型的布局。这受到了其他地方类似概念的启发,例如 ClutterContent、HTML/CSS 绘制源或 SVG 绘制服务器。为了展示此概念的强大功能,在 gtk4-demo 中添加了一些新的演示。
DND 代码继续进行重大重构。它现在使用在 3.93 中引入的用于剪贴板处理的相同内容提供程序基础结构,并且它为 DND 操作的源端和目标端提供了单独的对象。这里将会有更多更改。
GTK
小部件
GTK+ 增加了对显示视频的支持,具有 GtkVideo 和 GtkMediaControls 小部件,并且还有一个新的 GtkPicture 小部件,用于将图像查看从 GtkImage(实际上是关于图标)中分离出来。
GtkFontChooser 允许调整 OpenType 功能和字体变体,并且用于颜色 Emoji 输入的 Ctrl-Shift-e 已被完成替换,可以使用 GtkEntry::enable-emoji-completion 属性启用完成。
输入
GtkWidget 中特定于事件的信号继续消失。此时仅剩下 ::event,但它也将消失。相反,我们正在使用事件控制器,并且添加了几个新的控制器来覆盖所有需要的事件
- GtkEventControllerMotion
- GtkEventControllerKey
- GtkGestureStylus
为了使此转换更容易,现在可以在 ui 文件中创建事件控制器。
Wayland 有自己的平台输入法,基于 Wayland 文本协议。
绘制
::draw 信号已被删除,所有小部件都必须实现 ::snapshot。它们现在可以创建自己的 GtkSnapshot 实例以进行中间渲染。剪切不再在 GTK+ 级别应用 - 小部件可以自由地在其分配之外绘制,如果需要的话。
小部件无效化已更改,它现在通过丢弃无效小部件的缓存渲染节点,并重新创建渲染节点树的缺失部分来工作。
为了找到需要重绘的区域,GTK+ 会比较上一帧和当前帧的渲染节点树,并应用一些启发式方法来防止矩形数量增长过大。
GTK+ 检查器允许您跟踪无效化,您可以在此处看到其运行情况
其他更改
GTK+ 不再支持通用可加载模块。输入法、打印后端和媒体后端已转换为 GIOModules 和扩展点。
平台 im 模块(即 Windows、Wayland、Broadway im 上下文)始终包含在内,并且默认情况下在其平台上启用。
GDK 中的 Vulkan 支持现在可以使用 GDK_VULKAN_DEVICE 环境变量指定的特定设备。使用 GDK_VULKAN_DEVICE=list 可以查看所有可用设备。
试用一下
使用 GTK+ 3.94.0,应该可以开始移植应用程序了。文档有一个初始移植指南。