随着 GTK 4 越来越接近完成,现在是概述 GTK 4 中自定义小部件外观的好时机。
本系列文章将探讨编写小部件的主要方面,以及它们与 GTK 3 相比的变化。这些文章将提供一个高层次的概述;有关将应用程序移植到 GTK 4 的详细清单,请查看迁移指南。
简介
我们 API 更改的总体方向是强调委托而不是子类化。这样做的动机之一是为了使编写您自己的小部件更容易,并且不易出错。因此,您将看到更多辅助对象从核心小部件类接管功能方面的工作。并且许多小部件现在是最终类 – 预计直接从 GtkWidget 派生。
我们 API 的另一个总体趋势是“一切皆是小部件”。在 GTK 3 中,我们慢慢地将复杂的小部件分解为它们的组成部分,首先是 CSS 节点,然后是小工具。在 GTK 4 中,例如 GtkScale 的滑槽和滑块是完全形成的小部件,可以保持它们自己的状态并像任何其他小部件一样接收输入。
GTK 4 过渡中的一个大输家是 GtkContainer 基类。它变得不那么重要了。现在,任何小部件都可以有子小部件。子属性已被布局子项及其属性所取代。并且所有焦点处理都已从 GtkContainer 移动到 GtkWidget。
另一个大输家是 GtkWindow。在 GTK 3 中,所有“弹出窗口” (条目完成、菜单、工具提示等)都在底层使用 GtkWindow。在 GTK 4 中,它们中的大多数已转换为弹出窗口,并且 GtkPopover 的实现已从 GtkWindow 中解耦。此外,许多特定于顶层的功能已被分解为单独的接口,称为 GtkRoot 和 GtkNative。
展望
在下一篇文章中,我们将介绍 GTK 4 中的小部件如何使用渲染节点进行自己的绘制。