summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2020-09-09 17:34:35 +0200
committerBenjamin Otte <otte@redhat.com>2020-09-09 17:38:37 +0200
commitcb5b375f43bbfbd55e2d143cf55d396e5e319dc7 (patch)
treea575063dc6320587b9ed89ed67eaec619c1ff3ca
parentdfccaa8831589576e081c9d6d39a5eff3b80284a (diff)
downloadgtk+-cb5b375f43bbfbd55e2d143cf55d396e5e319dc7.tar.gz
revealer: Remove arbitrary 100x scale limit
This is no longer necessary because the bug it was rying to solve is now solved via the preference for min and nat size.
-rw-r--r--gtk/gtkrevealer.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/gtk/gtkrevealer.c b/gtk/gtkrevealer.c
index ee45854fb4..34d538d03f 100644
--- a/gtk/gtkrevealer.c
+++ b/gtk/gtkrevealer.c
@@ -473,26 +473,22 @@ gtk_revealer_size_allocate (GtkWidget *widget,
* some other form of clipping. We do this by reverse-applying
* the scale when size allocating the child.
*
- * Unfortunately this causes precision issues, because the scaled
- * size request is always rounded up to an integer. For instance if
- * natural with is 100, and scale is 0.001. we will request a
- * natural size of ceil(0.1) == 1, but reversing this results in 1 /
- * 0.001 == 1000 (rather than 100). In the swing case we can get the
- * scale arbitrarily near 0 causing arbitrary large problems here.
+ * Unfortunately this causes precision issues.
*
- * In order to avoid such issue we pick an arbitrary maximum upscale
- * scale factor of 100. This means that in the case where the allocated
- * size is 1 we never allocate the child at > 100 px. This means
- * that in large downscaling cases we may run into the clipping issue
- * described above. However, at these downscaling levels (100 times!)
- * we're unlikely to notice much detail anyway.
- *
- * On top, we assume that the fully expanded revealer will likely get
+ * So we assume that the fully expanded revealer will likely get
* an allocation that matches the child's minimum or natural allocation,
* so we special-case these two values.
* So when - due to the precision loss - multiple sizes would match
* the current allocation, we don't pick one at random, we prefer the
* min and nat size.
+ *
+ * On top, the scaled size request is always rounded up to an integer.
+ * For instance if natural with is 100, and scale is 0.001, we would
+ * request a natural size of ceil(0.1) == 1, but reversing this would
+ * result in 1 / 0.001 == 1000 (rather than 100).
+ * In the swing case we can get the scale arbitrarily near 0 causing
+ * arbitrary large problems.
+ * These also get avoided by the preference.
*/
if (hscale < 1.0)
@@ -505,7 +501,7 @@ gtk_revealer_size_allocate (GtkWidget *widget,
else if (ceil (min * hscale) == width)
child_width = min;
else
- child_width = MIN (100 * width, floor (width / hscale));
+ child_width = floor (width / hscale);
child_height = height;
}
else if (vscale < 1.0)
@@ -518,7 +514,7 @@ gtk_revealer_size_allocate (GtkWidget *widget,
else if (ceil (min * vscale) == height)
child_height = min;
else
- child_height = MIN (100 * height, floor (height / vscale));
+ child_height = floor (height / vscale);
}
else
{