布鲁塞尔 GTK 黑客马拉松报告

感谢 GNOME 基金会,许多 GTK 开发人员得以在 FOSDEM 之后在布鲁塞尔会面,参加我们一年一度的 黑客马拉松

本次黑客马拉松的主要议题是

  • 回顾过去 6-12 个月合并到主分支的工作,以便每个人都保持一致。
  • 讨论仍在独立分支中进行的功能,评估它们的完成状态,并找出障碍。
  • 找出 GTK 4.0 的首个版本的障碍。

与在线沟通渠道相比,黑客马拉松让我们能够以更大的带宽进行此类讨论,因此它们对项目非常重要。

您可以在维基上查看完整议程,我们将确保撰写关于其中最大项目的文章。

讨论的最大项目包括引入新的列表模型和列表/网格视图小部件;统一的按键处理 API;将布局管理策略与容器分离,并引入约束布局管理;合并来自 libhandy 的小部件的可能性,以允许编写对窗体因素变化做出响应的应用程序;切换到纯声明式菜单描述 API,并删除公共菜单小部件;向 GtkWidget 添加 2D 和 3D 变换;实现应用程序可以使用的动画 API。

  • 列表模型和列表/网格小部件 — 我们真的很想弃用 GtkTreeViewGtkIconView,但现有的替代品 GtkListBoxGtkFlowBox 在扩展到非常大且动态的数据集时性能不够。我们需要更好的数据存储类型,这些类型可以组合起来执行映射、过滤和排序等操作,但也可以避免在调整大小和绘制小部件时迭代所有元素。Benjamin Otte 已经向 GTK 添加了各种模型,并且正在开发一个可以有效显示其内容的列表和小部件。Benjamin 和其他 GNOME 应用程序开发人员正在为单独的黑客马拉松确定各个利益相关者,专门用于收集更多需求并获得关于新 API 的反馈。
  • 统一的按键处理 API — 现在我们将所有指针和触摸输入处理从事件转移到手势,我们希望对按键处理(如按键绑定、助记符和加速键)执行相同的操作。总体设计基于触发操作,并允许自省 GTK 检查器当前可用的所有“快捷方式”,以便于调试。已经有一个开发分支可用。
  • 布局管理器 — 在 GTK 3 中,布局由容器施加在其子项上;我们希望能够将布局与小部件分离,并将其移动到单独的委托对象层次结构中。布局管理器允许我们降低编写新小部件的复杂性;它们将布局代码保留在一个单独的、不可导出的类型中;并且它们允许我们简化工具包内部结构,以至于我们将来甚至可能使 GtkWidget 成为可实例化的类型。布局管理器是向 GTK 添加基于约束的布局管理的第一步,它无需嵌套盒子来创建复杂的 UI。已经有一个开发分支可用。有关约束布局的更多信息,您可以查看 GTK 3 的Emeus 实验库
  • 合并来自 libhandy 的小部件 — Adrien Plazas 概述libhandy 当前提供的功能,以及未来直接从 GTK4 中获取哪些功能会很有用。我们讨论了反应式布局,以及使用百分比表达大小的能力,以及可能使用约束来获得类似的结果。
  • 声明式菜单 — 多年来,GTK 迭代了不同的菜单 API;从使用小部件构建菜单,到 GtkUIManager,到 GtkBuilder,再到 GMenu;我们还转向声明弹出菜单的行为,以便让窗口系统更准确地显示它们,而无需暴露全局坐标。有很多重叠之处,但没有明确的赢家,主要是因为我们仍然允许使用小部件来构建应用程序菜单和上下文菜单。完全切换到声明式菜单风格,添加新的 API 使它们更具表现力,并使 GtkMenu 及其朋友成为工具包的私有实现,这将使我们能够获得诸如能够检查所有菜单,即使是进程外菜单;可由插件系统操作的菜单,而无需创建小部件并跟踪它们;避免定位错误。维基上有一个完整的初步提案,Matthias Clasen 正在开发分支中将上下文菜单切换到 GMenu
  • 小部件变换 — 可惜的是,Timm Bädert 无法参加黑客马拉松,但我们一直在审查他的开发分支,该分支向 GTK 小部件添加了 2D 和 3D 变换,对此我们感到非常兴奋。
  • 动画 — 我们希望为 GTK4 落实的最后一件事是 GTK 小部件的动画框架,以取代当前通用的“帧时钟回调”。它的模型是 Clutter 显式动画 API,它又是基于 Core Animation 和 CSS3 过渡的。这项工作仍处于设计阶段,但您可以预期其开发分支很快就会落实。

除了大的议题之外,我们还讨论了各种较小的议题

  • 提高性能和内存使用率;我们希望在帧时钟阶段公开 SysProf 计数器,以便我们能够轻松识别问题。
  • 改进测试套件,尤其是在报告故障方面;目前,我们必须浏览 CI 失败日志,但我们希望使用 GitLab CI 基础设施发布正确的报告
  • 用辅助对象上的真正的 GObject 属性替换子属性,特别是对于布局管理器;这将使文档、自省和用法更加清晰。
  • 完成拖放重做,以获得更现代的 API。
  • 为“类似窗口”的对象(如窗口、对话框、弹出窗口、菜单/弹出窗口)添加顶级接口,这对于建立通用行为以及消除 GtkWindow 中的黑客和复杂性非常有用。

最后,是的:我们确实从 GTK 中删除了“加号”。 ;-)