对于即将到来的 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
并重定向到一个文件以找到有问题的窗口小部件。我们还添加了代码来解决该警告引起的任何问题,但无论如何都应该修复它。毕竟,如果一个小部件报告了错误的大小,它很可能做错了什么。