GTK+ 4 的进展

上周在曼彻斯特举行的 GUADEC 大会上,GTK+ 的维护者和感兴趣的人们在非会议期间举行了一次工作会议。

Georges 已经在他的博客文章中很好地总结了结果,你应该阅读一下(即使只是为了看看聚集在一起的 GTK+ 人员的照片)。

GTK+ 3

我们简要讨论了 GTK+ 3。我们的印象是,大多数人都在享受 GTK+ 3.22 带来的稳定性,并且不急于升级到新的、稳定性较低的工具包版本。

普遍的共识是,我们应该对 GTK+ 3 中的 API 添加保持相当严格的立场,但在有足够高收益的情况下允许新功能。这方面的例子包括 Wayland 的客户端与服务器端协商协议支持,或者彩色表情符号支持。

GTK+ 4

大部分时间都用于讨论我们想要或需要为 GTK+ 4 完成的所有事情。我们对谁将负责处理这些项目有一个很好的了解,但我们没有确定一个非常详细的完成时间表。

最后,我们收集了我们认为是障碍的项目列表

  • 基于约束的布局
  • 支持在 ui 文件中定义状态和过渡
  • 设计器支持
  • 将键盘处理转换为事件控制器
  • 非回退文本渲染
  • 一个完成的 GL 渲染器
  • GDK 中对子表面的干净支持
  • GDK 中不再有根窗口
  • 事件清理

其中一些要点值得更详细的讨论。

基于约束的布局、状态和设计器支持

使用约束的布局是一个灵活的系统,它在其他平台上已经取得了成功。更重要的是,它更接近于大多数人思考在屏幕或纸张上布局事物的方式,并且它有望提供一种 GTK+ 应用程序的设计师和开发人员可以用来交流的通用语言。

Emmanuele 和其他人已经开发了一段时间的 Emeus 小部件正在使用约束来查找单个容器的子小部件的位置和大小。

将其集成到 GTK+ 中的计划更加雄心勃勃:我们设想每个顶层窗口都有一个约束求解器,窗口内的所有容器都将它们的约束添加到该求解器中。这将要求 GTK+ 中当前的容器以约束的形式表达它们的布局算法,这在大多数情况下应该不会太难,并且可以逐步完成。

状态和它们之间的转换是 Christian Hergert 在 libdazzle 中已经原型化过的东西。这里的想法是在 ui 文件中定义一个复杂的窗口部件(例如对话框),以及它的主要状态以及它们之间的转换应该如何工作。这将使我们拥有一个不仅仅是在画布上排列小部件的 UI 设计工具,而是走向故事板和设计转换。当然,说起来容易做起来难……

键盘处理

Christian 花了一些时间来描述他为 gnome builder 编写的快捷键引擎,该引擎目前存在于 libdazzle 中。它有一些有趣的功能,例如捕获-冒泡事件处理、和弦(即多键序列,例如 Ctrl-C Ctrl-X)、与操作的紧密集成以及自动生成键盘快捷键帮助的功能。

这个领域的计划是从 Christian 的引擎中提取最佳功能,并将它们转换为一个或多个 GtkEventControllers。一旦这项工作完成,我们将转换所有小部件以使用事件控制器而不是按键信号处理程序。

GtkBindingSet 也将被事件控制器取代。

文本渲染

GSK 的 Vulkan 渲染器或多或少已经完成。它可以使用着色器有效地渲染 CSS 机制产生的大部分内容。最大的例外是文本:目前文本的处理方式是,我们使用 cairo 将其渲染到表面,然后将表面上传到纹理,然后在渲染节点中使用该纹理。每一帧都如此。

这里需要做的是,我们将所需的字形上传到一个更大的纹理中,我们将其作为图集保留,然后创建引用该图集的文本渲染节点。

由于文本是用户界面中非常重要的组成部分,因此在为 Vulkan 实现适当的文本渲染之前,我们不能真正声称我们已经验证了渲染节点方法。

GL 渲染器

Benjamin 完成了大部分工作,使 Vulkan 渲染器达到几乎完成的状态。在他这样做的时候,GL 渲染器已经落后了——它没有 Vulkan 中使用的着色器。

这里需要做的是抽象出公共部分,并将其余部分从 Vulkan 向后移植到其 GL 等效项。其中一个不太有趣的方面是,我们最终可能需要不止一个 GL 渲染器变体,用于传统的 GL 和 GLES 平台。但我们可能至少在最初可以使用现代 GL 渲染器。

字体和文本

一个单独的会议专门讨论了我们的文本渲染堆栈中的新功能。这里讨论的主题是可变字体和彩色表情符号。不幸的是,我错过了大部分讨论,但结果的总结是:

  • Behdad 对在 pango 和 fontconfig 中支持可变字体需要做什么有一个粗略的计划。这涉及 PangoFontDescription 中用于指定轴值的新语法以及 PangoFontFamily 中用于获取有关可用轴信息的新 API。
  • 在 GUADEC 期间,Behdad 合并了 cairo、fontconfig 和 pango 中对彩色表情符号的支持,我开始在 GTK+ 中开发一些简单的表情符号输入。现在这也在 GTK+ 3 和 master 中实现了。

其他

我们涉及了太多其他主题,无法在此处一一总结。其中之一是可访问性的状态,但那是另一个时候的主题。