和往年一样,我们在塞萨洛尼基的 Guadec 举办了 GTK BoF。今年,我们的人气相当高——每个人都对 GTK4 的计划很感兴趣。
但由于 Emmanuele 上午很忙,我们开始讨论其他一些话题。
GLib
我们从会议室收集了一些关于有用的 GLib 添加的建议。
- 用于操作系统信息的 API(基本上是 /etc/os-release 中的数据)。这似乎没有争议;Robert 将会实现它
- 一个有序的映射。这在很多地方通过将哈希表与列表或数组组合在一起进行临时实现。 如果有人做工作来提出 API,似乎大家一致认为在 GLib 中提供这个是有价值的
关于有序映射的讨论也触及了通用容器接口;Philipp 描述了如何做到这一点,请在此处查看详细信息:这里。
仍然关于容器的话题,Alex 描述了传输注释的问题。 我们讨论了各种想法,但可能没有完美的解决方案。
Matthias 指出 Pango 中仍然有一些 Unicode 数据。 我们简要讨论了如果有一个商定的、可映射的 Unicode 数据二进制格式会多么好,这样每个人都可以共享它。 除此之外,将最后一点数据移动到 GLib 是没有争议的。
黑暗模式
由于“黑暗模式”BoF加入了我们,我们接下来转而讨论黑暗模式。 第二天,在 供应商主题 BoF 中对这个话题进行了更多讨论;GTK 的讨论侧重于如何实现黑暗模式的技术细节。
有多种选择
- 向主题索引文件添加额外的元数据以将主题标记为黑暗
- 添加“dark-theme-name”设置,并将黑暗和浅色主题视为独立的
- 保留在主题名称后附加 “-dark” 以查找主题的黑暗变体的现有约定
保留现有约定的实用解决方案似乎得到了会议室的支持。 Matthias 开始在这里探索一些应用程序支持 API:这里。
GTK
最终,我们转而讨论 GTK4 的状态和进展。 高级总结是,GTK4 仍然需要完成一些功能
- 一个可扩展的列表视图,可以回收行小部件。 这包括在更多地方更广泛地切换到使用列表模型。 为了使其完整,它还应该包括使用这些技术的网格视图。 Benjamin 正在研究这个
- 动画的基础设施和 API。 这将类似于 CSS 中动画的工作方式,并且部分工作不仅是移植我们现有的 CSS 动画支持,还要将堆栈切换动画、显示器、进度条和微调器移植到新框架。 Emmanuele 正在研究这个。
- 完成菜单/弹出框的重构。 有些人试用了新的弹出框菜单栏。 反馈是,我们应该回到嵌套子菜单,至少对于菜单栏是这样,并推进删除菜单,因为菜单的一些特殊方式(例如保持三角形、滚动)很难保持工作(或保持良好工作)。 Guadec 之后,Matthias 将恢复这项工作。
- 快捷方式 – 用事件控制器替换助记符、加速器和按键绑定。 有一个相当完整的 分支,其中包含一些人已经完成的代码和 API; 感谢您帮助审查和测试它。
- 新的拖放 API 需要完成。
好消息是,这个列表很短,并且大多数项目都有名称。 坏消息是,每个项目的工作量都相当大。 因此,在所有这些合并之前,承诺一个针对 4.0 版本的严格时间表并不是一个好主意。 因此,以下是暂定的,但(我们希望)在某种程度上是现实的
- 今年年底之前再发布一个 GTK 3.9x 快照
- 在 2020 年春季 GNOME 3.36 发布的同一时间发布功能完整的 3.99 版本
- 在 2020 年秋季 GNOME 3.38 发布的同一时间发布 4.0 版本
不可避免地,我们还讨论了其他一些很棒的东西。 这些都不在 GTK4 的路线图上;但是如果有人出现来做这项工作,它们就可以发生
- 一个“小部件存储库”或“hig”库,以便不会用过于具体或实验性的小部件来超载 GTK
- 一个“UI 设计器”小部件。 这也可以存在于一个单独的库中
- 更好地支持拆分标题栏和状态转换
我们还讨论了 GTK 本身之外的事情,这些事情会阻止应用程序移植到 GTK4。 这包括常用的库,例如 GtkSourceView、vte 和 webkitgtk,所有这些库都需要 GTK4 端口,然后依赖它们的应用程序才能被移植。 这方面的一些工作已经在进行中;但欢迎您在这方面提供任何帮助!
GTK4 移植的另一个潜在障碍是平台支持。 GL 渲染器在 Linux 上运行良好;Vulkan 渲染器需要一些修复。 在 Windows 上,我们目前使用 cairo 回退,这对于 4.0 来说可能足够好。 或者,我们可以合并现有工作,以将 GL 渲染器与 ANGLE 一起使用。 在 OS X 上的情况不太乐观,我们在那里没有可用的后端;如果您想在这方面帮助我们,第一步仍然是将 GDK 后端调整为 GDK 中的更改。
黑客时间
下午,会议室从讨论转为黑客活动,人们的笔记本电脑上可以看到各种与 GTK 相关的工作:加快 GtkBuilder 模板加载速度、嵌套弹出框菜单、一个半成品 GtkSourceView 端口。
您希望很快在 GTK 主分支中看到这些(以及其他)。