GTK 4.2.0

GTK 4.2.0 现在可以在通常的地方下载。

此版本是应用程序开发人员将其项目移植到 GTK4 的初始反馈的结果,因此它主要包含错误修复和 API 改进——但我们也添加了新功能,例如新的 GL 渲染器;工具包如何处理组合键和死键序列的各种改进;在 Windows 和 macOS 上编译 GTK 的构建系统改进;以及全新的 API 参考,该参考是从语言绑定也使用的同一自省数据生成的。

有关更多信息,您可以查看之前关于 4.1 开发周期的博客文章

NGL 渲染器

感谢 Christian Hergert 的辛勤工作,NGL 渲染器现在是 Linux、Windows 和 macOS 的默认渲染器。我们收到了来自移动平台用户(使用 Lima 等驱动程序)的非常积极的反馈,在每秒帧数以及功耗和 CPU 使用率方面都有显着改进;后两者也将对台式机和笔记本电脑用户产生积极影响。NGL 渲染器才刚刚开始:新的代码库将使我们能够在未来进行更多改进。

目前,我们保留了旧的 GL 渲染器;您可以在您的环境中使用export GSK_RENDERER=gl来返回到 4.0 GL 渲染器——但如果您需要这样做,请务必提交问题,以便我们有机会修复 NGL 渲染器。

输入

Matthias 写了一整篇关于处理组合键和死键输入序列的博客文章,所以您可以直接阅读它。死键处理已经进行了一些迭代,以处理输入堆栈较低层中引入的怪异之处和解决方法。

在某些键盘布局中,死区锐音符与撇号的处理存在一个已知问题,仍在调查中。如果您发现键盘输入的其他问题,特别是关于组合序列或死键的问题,请提交问题

可移植性

GTK 的目标之一是拥有一个“交钥匙”构建系统,能够从 Git 存储库的克隆到工具包的完全可部署安装,而无需手动处理所有依赖项或使用奇怪的装置。您可以在 Collabora 的朋友的这篇文章中看到它在 Windows 上如何使用本机工具工作。

此外,我们现在确保您可以将 GTK 用作 Meson 子项目;这意味着您可以将 GTK 及其所有依赖项构建为您自己的应用程序构建环境的一部分,并且您可以使用您选择的工具链轻松收集所有构建工件,以便与您的应用程序一起分发。

文档

对于 GTK 的新手来说,最臭名昭著的问题之一一直是文档。不熟悉我们 API 的应用程序开发人员经常发现在我们的文档中难以找到信息;此外,API 参考的样式和结构已经很久没有刷新了。为了改善第一印象和我们文档的使用,GTK 已切换到新的文档生成器,称为 gi-docgen。这个新工具为 API 参考添加了新功能,例如在文档中对术语进行客户端搜索;以及一些不错的可用性改进,例如

  • 代码片段和示例的“复制到剪贴板”按钮
  • 每个类的祖先和接口的可视层次结构
  • 类中继承的属性、信号和方法的列表
  • 响应式设计,使得在小屏幕上使用 API 参考更容易

一个 API 的好坏取决于它是否允许开发人员以最惯用的方式使用它。GTK 不仅具有 C API,它还通过 GObject-Introspection 公开了一个用于语言绑定使用的完整 API。新的文档使用相同的数据,这不仅使我们能够将构建时间缩短一半,而且还从源代码中的注释生成公共文档位,使 API 参考更加一致和可靠;最后,C API 参考与语言绑定作者在使用自省数据时看到的内容相匹配,这意味着我们将在引入新 API 时加强工具包和绑定开发人员之间的反馈循环。

Pango 和 GdkPixbuf 也已切换到 gi-docgen,这使我们能够通过我们的 CI 管道构建各种依赖项的 API 参考,并将其发布到一个全新的网站:docs.gtk.org。您始终可以在那里找到 GTK 文档的最新版本。

杂项

当然,除了这些可见的更改之外,我们还有较小的更改

  • 从用于渲染我们内容的 GLSL 着色器到按需而不是预先创建的可访问性对象,性能在各方面都有所提高
  • 当使用具有适当 API 的较新版本的 Cairo 时,文本的亚像素定位
  • 表情符号选择器的响应式布局
  • 改进了弹出窗口小部件中阴影的渲染
  • 微调按钮中的本地化数字
  • 改进了对 Wayland 输入法协议的支持
  • 提高了文本视图小部件的滚动性能

数据

GTK 4.2 是四个月开发的结果,由 54 位开发人员进行了 1268 项单独更改;总共添加了 73950 行代码,删除了 60717 行代码。

更改集最多的开发人员
Matthias Clasen 843 66.5%
Emmanuele Bassi 124 9.8%
Timm Bäder 87 6.9%
Christian Hergert 33 2.6%
Jakub Steiner 24 1.9%
Benjamin Otte 21 1.7%
Chun-wei Fan 15 1.2%
Alexander Mikhaylenko 14 1.1%
Fabio Lagalla 10 0.8%
Bilal Elmoussaoui 8 0.6%
Carlos Garnacho 6 0.5%
Ignacio Casal Quinteiro 6 0.5%
Michael Catanzaro 6 0.5%
Emmanuel Gil Peyrot 5 0.4%
Xavier Claessens 4 0.3%
David Lechner 4 0.3%
Jan Alexander Steffens (heftig) 4 0.3%
Kalev Lember 3 0.2%
wisp3rwind 3 0.2%
Mohammed Sadiq 2 0.2%
更改行数最多的开发人员
Matthias Clasen 38475 42.6%
Emmanuele Bassi 15997 17.7%
Christian Hergert 13913 15.4%
Kalev Lember 9202 10.2%
Timm Bäder 5890 6.5%
Jakub Steiner 2397 2.7%
Benjamin Otte 902 1.0%
Chun-wei Fan 783 0.9%
Ignacio Casal Quinteiro 717 0.8%
Fabio Lagalla 292 0.3%
Marek Kasik 267 0.3%
Alexander Mikhaylenko 254 0.3%
Emmanuel Gil Peyrot 232 0.3%
Simon McVittie 214 0.2%
Jan Tojnar 83 0.1%
wisp3rwind 74 0.1%
Jan Alexander Steffens (heftig) 65 0.1%
Carlos Garnacho 62 0.1%
Michael Catanzaro 61 0.1%
Ungedummt 60 0.1%
删除行数最多的开发人员
Emmanuele Bassi 8408 13.8%
Jakub Steiner 1890 3.1%
Timm Bäder 493 0.8%
Simon McVittie 203 0.3%
Emmanuel Gil Peyrot 146 0.2%
Chun-wei Fan 43 0.1%
Jan Tojnar 26 0.0%
Alexander Mikhaylenko 25 0.0%
Jonas Ådahl 17 0.0%
Luca Bacci 13 0.0%
Robert Mader 4 0.0%
Chris Mayo 3 0.0%
Bartłomiej Piotrowski 2 0.0%
Marc-André Lureau 2 0.0%
Jan Alexander Steffens (heftig) 1 0.0%
Tom Schoonjans 1 0.0%