上周在曼彻斯特举行的 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 的引擎中提取最佳功能,并将其转化为一个或多个 GtkEventController。一旦这项工作完成,我们将转换所有窗口小部件以使用事件控制器,而不是按键信号处理程序。
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 分支。
其他
我们涉及的主题太多,无法在此处全部总结。其中之一是可访问性的状态,但这将在另一个时间讨论。