From: Benjamin Otte Date: Sat, 6 Nov 2021 15:17:59 +0000 (+0100) Subject: label: max-width-chars has no effect on smaller text X-Git-Tag: archive/raspbian/4.6.5+ds-1+rpi1~1^2~19^2~5^2~164^2~6 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cce6a603a6aa054d2d5aaaf9b3b0671cb6a9970c;p=gtk4.git label: max-width-chars has no effect on smaller text Having a short text and a large max-width-chars should request the natural width of the text, not the limit from max-width-chars. This caused huge message dialogs. Reftests added. --- diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 3c3be85406..46af2fb174 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -1077,14 +1077,15 @@ get_static_size (GtkLabel *self, int *minimum_baseline, int *natural_baseline) { + int minimum_default, natural_default; PangoLayout *layout; - layout = gtk_label_get_measuring_layout (self, NULL, -1); + get_default_widths (self, &minimum_default, &natural_default); + + layout = gtk_label_get_measuring_layout (self, NULL, natural_default); if (orientation == GTK_ORIENTATION_HORIZONTAL) { - int minimum_default, natural_default; - pango_layout_get_size (layout, natural, NULL); if (self->ellipsize) { @@ -1096,11 +1097,8 @@ get_static_size (GtkLabel *self, else *minimum = *natural; - get_default_widths (self, &minimum_default, &natural_default); if (minimum_default > *minimum) *minimum = minimum_default; - if (natural_default > -1) - *natural = natural_default; *natural = MAX (*minimum, *natural); } else @@ -1180,7 +1178,6 @@ get_width_for_height (GtkLabel *self, /* Natural width is natural width - or as wide as possible */ layout = gtk_label_get_measuring_layout (self, layout, natural_default); pango_layout_get_size (layout, natural_width, NULL); - *natural_width = MAX (*natural_width, natural_default); *natural_width = MAX (*natural_width, *minimum_width); } else diff --git a/testsuite/reftests/label-huge-max-width-chars.ref.ui b/testsuite/reftests/label-huge-max-width-chars.ref.ui new file mode 100644 index 0000000000..ec722f56ce --- /dev/null +++ b/testsuite/reftests/label-huge-max-width-chars.ref.ui @@ -0,0 +1,11 @@ + + + + 0 + + + Hello World + + + + diff --git a/testsuite/reftests/label-huge-max-width-chars.ui b/testsuite/reftests/label-huge-max-width-chars.ui new file mode 100644 index 0000000000..bf1237c1de --- /dev/null +++ b/testsuite/reftests/label-huge-max-width-chars.ui @@ -0,0 +1,12 @@ + + + + 0 + + + Hello World + 1000 + + + + diff --git a/testsuite/reftests/label-wrapped-huge-max-width-chars.ref.ui b/testsuite/reftests/label-wrapped-huge-max-width-chars.ref.ui new file mode 100644 index 0000000000..5ec6dea124 --- /dev/null +++ b/testsuite/reftests/label-wrapped-huge-max-width-chars.ref.ui @@ -0,0 +1,12 @@ + + + + 0 + + + Hello World + 1 + + + + diff --git a/testsuite/reftests/label-wrapped-huge-max-width-chars.ui b/testsuite/reftests/label-wrapped-huge-max-width-chars.ui new file mode 100644 index 0000000000..cc21161d61 --- /dev/null +++ b/testsuite/reftests/label-wrapped-huge-max-width-chars.ui @@ -0,0 +1,13 @@ + + + + 0 + + + Hello World + 1000 + 1 + + + + diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build index 7917c1d388..d6857190cf 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build @@ -347,6 +347,8 @@ testdata = [ 'label-fonts.css', 'label-fonts.ref.ui', 'label-fonts.ui', + 'label-huge-max-width-chars.ref.ui', + 'label-huge-max-width-chars.ui', 'label-max-width-chars-and-halign-and-infinite-width.ui', 'label-max-width-chars-and-halign-and-infinite-width.ref.ui', 'label-shadows.css', @@ -365,6 +367,8 @@ testdata = [ 'label-text-shadow-changes-modify-clip.ui', 'label-width-chars-dont-shrink.ref.ui', 'label-width-chars-dont-shrink.ui', + 'label-wrapped-huge-max-width-chars.ref.ui', + 'label-wrapped-huge-max-width-chars.ui', # this seems to make assumptions on text positioning # that are not valid with subpixel positioning #'label-wrap-justify.ref.ui',