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 中分离出来(GtkImage 实际上是关于图标的)。

GtkFontChooser 允许调整 OpenType 功能和字体变体,用于颜色表情符号输入的 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.94” 的 10 个想法

  1. 这对我来说完全不起作用。当我在“慢速滚动”模式下停止移动鼠标时,它会停止滚动,无论我的鼠标在哪里。

    这是一个错误吗?我正在运行 gtk3-3.94,并且我可以使用包括 nautilus 和 gtk3-demo 在内的大多数 gtk3 应用程序重现此问题。

  2. “GTK+ 不再支持通用可加载模块”。

    所以,这对我的意思就是:如果你不喜欢 gtk 的某些行为方式,你将无法再对其进行修改。

    这会很遗憾,并使 gtk 对我来说无法使用。

    事实上,例如,如果我不喜欢 CSD,我就不能使用像 Gtk3-nocsd 这样的模块,因为它将无法在内部修改(破解)gtk。

    另一件事是,例如,应用程序的开发人员将需要自己导出菜单栏或应用菜单。结果是某些应用程序会导出菜单栏,其他应用程序会导出应用菜单,而其他应用程序则不会导出任何内容。我认为这将使 Linux 桌面成为一个弗兰肯斯坦,一个应用程序以一种方式工作,而另一个应用程序以另一种方式工作。

    外壳开发人员将无法应用程序来使其桌面上的应用程序更加统一,并且他们将仅限于从其他地方创建或移植概念,就像 Unity 桌面在很多方面的情况一样。这将使所有 Gtk Linux 桌面越来越像塑料,并且缺乏创新概念,因为他们需要接受上游构想的 gtk 功能,或者他们将需要避免使用 gtk 而支持具有更多可配置选项的其他工具包。

    此外,某些应用程序开发人员会更喜欢停留在较旧版本的 gtk 中,以保持与过去由于通用 gtk 模块支持的功能的兼容性,而现在将无法加载该模块。这一事实将阻止该应用程序正常发展到新版本的 gtk,毫无疑问,新版本的 gtk 会有很多改进。

评论已关闭。