对于即将到来的 GTK 4.6,我们对大量的尺寸调整基础设施进行了全面改进,以使小部件更加紧凑,并确保我们的尺寸调整基础设施真正做到其所说的。
halign/valign
当使用 GtkWidget::halign 或 GtkWidget::valign 属性时,GTK 4.4 会查看小部件的默认大小,然后相应地放置小部件。当其中一个值设置为填充时,这会留下很多额外的空间。在 GTK 4.6 中,GTK 将测量相对于填充尺寸的另一个尺寸的大小。这使得小部件更薄,但避免了额外的空间。


如果您喜欢旧的行为该怎么办?
如果您不在任何一个方向使用填充,则行为将与之前相同。因此,更新另一个维度使其不为默认填充,您应该可以恢复旧的行为。
GtkBox
GtkBox 已经学会了根据需要为小部件分配大小。在 GTK 4.4 中,大小总是平均分配给具有相同默认大小的子项。GTK 4.6 将查询子项的实际大小,以决定将多少额外大小分配给哪个子项。
您可以在示例中看到这一点,其中给定的框足够容纳 3、4、5 或 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
并重定向到文件以找到有问题的窗口小部件。我们还添加了代码来解决任何警告问题,但它仍然应该被修复。毕竟,如果一个小部件报告了错误的尺寸,那么它很可能做错了什么。