GTK+ 3.94

今天,我们发布了 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,应该可以开始移植应用程序了。文档有一个初始移植指南。

GTK+ 3 更新

计划

当我们开始向 GTK+ 4 开发时,我们制定了一个计划,该计划表示 GTK+ 3.22 将是 GTK+ 3 的最终稳定分支。并且我们已经坚持了一段时间。

它对我们来说相当不错 - GTK+ 3 不再以剧烈的方式进行更改,这很受欢迎,并且我们终于看到应用程序从 GTK+ 2 迁移。

现实

但是,GTK+ 4 需要时间才能成熟(有关更多信息,请参见另一篇文章),并且一些不错的新功能(例如字体变体支持或 Emoji 完成)在 master 中仍然未使用。我们还收到了一些已移植应用程序对关键 API 的请求。

因此,我们决定最好改变方向,并通过在 9 月份发布 GTK+ 3.24 来允许在 GTK+ 3.x 中加入少量新功能和 API。

git 中现在有一个 gtk-3-24 分支。GTK+ 3.x 维护已移至该分支,并且我们将不再进行任何 3.22.x 版本发布。

亮点

此新分支的第一个版本是 GTK+ 3.23.0,可以在此处找到

https://download.gnome.org/sources/gtk+/3.23/gtk+-3.23.0.tar.xz

此版本的亮点包括新的字体选择器功能,

  • 允许设置 OpenType 字体功能
  • 显示 OpenType 字体功能的示例
  • 允许选择 OpenType 字体变体
  • 支持选择的详细级别

新的 Emoji 功能,

  • 支持 Emoji 的完成弹出窗口
  • 删除 Ctrl-Shift-e 快捷方式

gdk_window_move_to_rect 作为公共 API,

以及在 FreeBSD 上使用匿名共享内存的 Wayland 后端。

数字命理学

再进行一个 3.x 循环的一个副作用是,我们将拥有 GTK+ 3.24 作为最终的 GTK+ 3,这与 GTK+ 2.24 是最终的 GTK+ 2 形成了一个令人愉快的平行。