重要新闻

对于即将到来的 GTK 4.6,我们对许多尺寸调整基础设施进行了全面改进,以使小部件更紧凑,并确保我们的尺寸调整基础设施真正发挥其作用。

halign/valign

当使用 GtkWidget::halignGtkWidget::valign 属性时,GTK 4.4 会查看小部件的默认大小,然后相应地放置小部件。当其中一个值设置为填充时,这会留下很多额外的空间。在 GTK 4.6 中,GTK 将测量相对于填充维度的另一维度的大小。这使得小部件更薄,但避免了额外的空间。

A centered label with empty space in GTK 4.4
GTK 4.4 中带有空白的居中标签

A centered label with no extra space in GTK 4.6
GTK 4.6 中没有额外空间的居中标签

如果您喜欢旧的行为怎么办?

如果您在任何方向都不使用填充,则行为将与以前一样。因此,请更新另一个维度使其不为默认填充,您应该可以恢复旧的行为。

GtkBox

GtkBox 已经学会了根据需要为小部件分配大小。在 GTK 4.4 中,大小始终在具有相同默认大小的子项之间平均分配。GTK 4.6 将查询子项的实际大小,以决定将多少额外大小分配给哪个子项。

您可以在示例中看到这一点,其中框被赋予了足够容纳 3、4、5 或 6 行文本的空间。

GTK 4.4 中的左对齐框
GTK 4.6 中的左对齐框

GtkLabel

正如您在上面看到的,GtkLabel 也学会了正确地换行到任何给定的行数。这使得标签可以占用比以前少得多的宽度,因此当它们可以简单地换行时,它们不再占用空白空间。

xalign 和 halign

值得指出的是,在很多情况下,应用程序使用 GtkWidget::halign = GTK_HALIGN_START;,而他们应该使用 GtkLabel::xalign = 0.0;。第一个将小部件尽可能向左对齐,而第二个将分配空间内的文本向左对齐。因此,如果你的小部件突然看起来像粘在了左边缘,你可能需要注意这一点。

GtkWindow

GtkWindow 已经学会了如何使最小尺寸适应长宽比。因此,您现在可以随意调整窗口大小,它们永远不会太小,但它们总是会尽可能小,无论您是想使它们扁平而宽还是细而高。

一个新的警告

在完成这项工作时,我们发现一些小部件不符合测量要求,并添加了一个新的警告。因此,如果您看到类似以下内容:
Gtk-CRITICAL **: 00:48:33.319: gtk_widget_measure: assertion 'for_size >= minimum opposite size' failed: 23 >= 42
这意味着您有一个小部件报告大小 -1 的最小大小大于它报告的不同大小的最小大小,这永远不应该发生。您可以使用 GTK_DEBUG=size-request 并重定向到一个文件来查找有问题的窗口小部件。我们还添加了代码来解决该警告的任何问题,但仍然应该修复它。毕竟,如果一个小部件报告了错误的大小,则很可能它做错了什么。

作者:Benjamin Otte

在会议简介中,我这样描述自己:自 2002 年进入自由软件世界以来,Benjamin Otte 一直在努力让计算机更有趣。他的成功案例包括 Swfdec Flash 播放器,共同维护 GStreamer,在 GVfs 上工作以及在 Ohloh 上获得高排名。白天,他在 Red Hat 花时间研究所有多媒体相关的事情。