GTK+ 3.92

昨天,我们发布了 GTK+ 3.92.1,重庆市。由于距离上次 3.91 版本发布已经有一段时间了,这里简要介绍一下主要更改。

此版本是我们迈向 GTK+ 4 的另一个里程碑。虽然还有很多工作要做,但此版本可以初步了解我们在 GTK+ 4 中希望实现的一些目标。

GSK

自上次发布以来,大部分工作都投入到了 GSK 中。Vulkan 渲染器现在接近完成,在避免 Cairo 回退方面。唯一缺失的部分是模糊阴影(不可否认,这是一个重要的部分)。

自 3.91.2 版本以来向前迈进的一大步是,我们不再对所有文本使用 Cairo 回退。相反,文本(在标签和条目中,遗憾的是,文本视图中还不行)被转换为文本节点。每个文本节点都包含一个 PangoGlyphString 和一个 PangoFont。Vulkan 渲染器使用字形缓存来避免为每帧重新渲染字形。

Vulkan 渲染器的内部逻辑已进行了重新设计,以使用纹理而不是 Cairo 表面来获得中间结果,从而避免更多的 Cairo 回退。

在 Vulkan 渲染器中获得支持的其他节点类型包括模糊、重复节点、混合模式和交叉淡入淡出。在某些情况下,我们使用的着色器是非常简单的实现。如果您能帮助改进它们,我们将非常欢迎!

作为渲染节点的一个初步示例,我们为 GtkOverlay 实现了一个模糊底层功能。它的工作原理是将覆盖层的“主子项”捕获为渲染节点,然后多次重复使用它,并进行正确的裁剪,有时还会使用模糊节点。

检查器

为了帮助您探索 GSK,检查器现在会显示 Vulkan 信息,而记录器会显示有关渲染节点的更多信息。

输入

在输入方面,事件已获得访问器,我们不再直接访问它们的字段。这是一个中间步骤,清理事件仍在进行中。我们已将事件的传统小部件信号(例如 ::key-press-event)移动到事件控制器,并且 GTK+ 内的大多数小部件已完全停止使用它们。

构建系统

我们已完全切换到使用 Meson 进行 GTK+ 的构建,而 3.92.1 版本是第一个使用 Meson 的 dist 支持完成的版本。为了发布此版本,我们还必须将文档、测试套件和已安装的测试移植到使用 Meson。

仍然存在一些粗糙的边缘(我们无法 100% 正确地获得所有依赖项),但总的来说,Meson 对我们来说效果很好。

其余部分

当然,每个人都喜欢表情符号,并且 GTK+ 3.22 中提供的相同颜色表情符号支持在此版本中也可用。除此之外,CSS 中的字体支持有所改进,增加了对 CSS3 font-variant 属性的支持。

当然,这取决于具有相应功能的字体。

试用一下

使用 GTK+ 3.92.1,您应该可以轻松地亲自尝试其中的一些功能。

如果您一直想参与 GTK+ 开发但从未找到合适的机会,那么现在是参与的绝佳时机!

GTK+ 中的版本控制和长期稳定性承诺

本文中提出的计划取代了 2016 年 6 月在多伦多 GTK+ 黑客马拉松之后公开的计划。

本月,GTK+ 团队将发布一系列长期稳定版本中的第一个。这将使 GTK+ 更具可预测性和可靠性,同时不会阻碍未来 GTK+ 的改进。

这些计划是自去年 6 月在多伦多 GTK+ 黑客马拉松上制定初始计划以来,与各种利益相关者讨论的结果。

背景

自 2002 年发布 2.0 版本以来,GTK+ 一直遵循相当简单的版本控制方案

  • 主版本指定通用 API 版本
  • 次版本指定开发周期(如果为奇数)和稳定周期(如果为偶数)
  • 微版本指定错误修复更新

在 GTK+ 中引入的任何 API 都保证存在到下一个主要版本;在开发周期中引入的 API 保证在稳定周期开始后仍然存在。稳定周期不提供新功能或新 API。

此方案为我们提供了很好的服务,但是其问题在 3.x 系列中变得越来越明显,特别是与基于时间的 6 个月开发周期结合使用时。在 2.x 周期中,GNOME 应用程序的新功能被迫出现在其他库中,因为该工具包太复杂或移动太慢。自 3.0 以来,GTK+ 的开发速度一直在加快。GTK+ 一直处于中心位置,每六个月都会引入新的小部件和新功能。但是,为了实现这些新的小部件和功能,该工具包的一些内部组件一直处于不断变化的状态。

从 GNOME 的角度来看,GTK+ 一直是一个相当稳定,但不断变化的目标,因为 GNOME 开发人员和 GTK+ 开发人员可以共享反馈和建议,并快速跟上内部更改。另一方面,从社区的角度来看,跟踪 GTK+ 的开发一直比较痛苦。GNOME 项目之外的应用程序开发人员很难了解工具包中的哪些更改会影响他们的代码库。GTK+ 团队试图改进其沟通渠道,但是在开发周期中发布有关更改的博客对于更广泛的 GTK+ 用户社区中的许多人来说还不够。

长期稳定的 GTK+ 版本

GTK+ 有三个主要利益相关者:希望获得功能和 API 稳定版本的应用程序开发人员;希望访问 GTK+ 开发版本以便快速引入新功能的桌面开发人员(包括 GNOME 项目的大部分);以及 GTK+ 团队本身,他们需要在较长的开发周期中迭代库的内部组件。

引入长期稳定的 GTK+ 版本旨在确保 GTK+ 在这些受众之间取得良好的平衡。特别是,应用程序开发人员将可以访问一个稳定的平台,该平台仍然可以访问在 3.x 系列中开发的新 GTK+ 功能,例如 CSS 样式、触摸屏支持、HiDPI 显示支持、Wayland 支持、新的小部件、GTK+ 检查器等等。

GTK+ 将继续发布主版本、次版本和微版本。一旦新功能稳定下来,就会发布新的主版本,预计大约每 2-3 年发布一次。当升级到新的主版本时,将删除已弃用的 API。之后,此 API 系列将被视为稳定。新的次版本可能会引入新的小部件,或更新 GDK 后端中窗口系统协议的实现,但不允许其他功能或主题更改。以前每六个月发布一次次版本,现在会根据需要生成它们。我们还将继续进行错误修复和安全问题的微版本发布,至少三年。此后的维护可能会继续,具体取决于可用的志愿者资源量。具有超过三年长期支持发布周期的操作系统的分发商可能希望与 GTK 团队联系,以建立向后移植的策略。

长期稳定系列中的更新将在 ABI 方面保持稳定。除了这些稳定系列之外,GTK+ 开发将在半稳定的开发系列中继续进行。这些开发版本在次版本之间会包含一些 API 更改,尽管更改将尽可能受到限制。这是我们期望 GNOME 应用程序采取的路径,但是其他应用程序开发人员可以选择此选项,如果他们希望访问最新功能,但代价是每次次版本发布都可能进行一些移植工作。

尽管 GTK+ 团队保留在开发系列中更改 API 的权利,但这并不意味着整个 GTK+ API 会在每次发布时不断中断;只有 API 的特定部分,并且希望很少使用的部分可能会更改,如果更改过于广泛,则很可能会延迟到下一个主要开发周期。我们将确保提前充分沟通这些更改。

新的版本控制方案

新的 GTK+ 版本控制方案是我们之前一直遵循的“语义版本控制”方案的修改。一旦发布了新的主要稳定版本,开发周期就开始,我们将

  • 将 pkg-config 文件更新为新的主要版本,以允许 GNOME 开发人员在开发期间定位新的 API
  • 将现有主要版本保留在相同的数字上
  • 将次版本更新为 90 以指示开发版本

例如,在 3.22.0 版本发布之后以及新的开发周期开始时,pkg-config 文件将被称为 gtk+-4.0,并且 configure.ac 文件中的版本将设置为 3.90

每六个月将发布一个新的偶数开发版本,例如 x.90x.92x.94,直到 GTK+ 团队确信新的 API 和功能集是稳定的。这些次版本的每个版本都将更新共享库的soname,以确保自动化工具可以获取最终更改并通知分发商和维护人员。一旦我们达到 API 和功能集对于更广泛的社区使用足够稳定的程度,我们将发布一个新的主要版本 (x + 1).0 并声明 API 稳定。

一旦发布了此零点版本,将创建一个新的稳定分支,并且主分支将升级到下一个 90 点版本并开始新的开发周期。九十点版本可以与以前的稳定版本并行安装。

gtk-versioning-scheme

3.22 将是 3.x 系列的最后一个次版本,新的版本控制方案将在 3.90 中生效。3.22 版本在该方案中是不规则的,因为它是一个长期稳定版本,但不会收到进一步的次版本,并且没有 .0 版本号。这是一个必要的过渡步骤。

下一步是什么

有关这些计划的更多详细信息,包括针对库开发人员和分发打包人员的详细信息,将在后续的博客文章中发布。GTK+ 开发博客还将继续提供有关 GTK+ 本身技术更改的更新,以便提供有关每个即将到来的主要版本中将发生的更改的信息。

我们对这些计划感到兴奋,并希望它们将迎来 GTK+ 的新时代,应用程序作者可以对我们的平台更有信心,同时仍然允许我们在 3.x 系列中看到的快速开发步伐。

本文中提出的计划取代了 2016 年 6 月在多伦多 GTK+ 黑客马拉松之后公开的计划。