From dc15a9139f9d86fea7727c28b2ffe625d9df5e72 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 8 Nov 2021 02:11:05 +0100 Subject: [PATCH] added a bound check for the auto-calculated scroller size --- MLEM.Ui/Elements/Panel.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MLEM.Ui/Elements/Panel.cs b/MLEM.Ui/Elements/Panel.cs index 7ff137e..b4c411b 100644 --- a/MLEM.Ui/Elements/Panel.cs +++ b/MLEM.Ui/Elements/Panel.cs @@ -221,21 +221,21 @@ namespace MLEM.Ui.Elements { // if there is only one child, then we have just the scroll bar if (this.Children.Count == 1) return; - + // the "real" first child is the scroll bar, which we want to ignore var firstChild = this.Children.First(c => c != this.ScrollBar); var lowestChild = this.GetLowestChild(c => c != this.ScrollBar && !c.IsHidden); var childrenHeight = lowestChild.Area.Bottom - firstChild.Area.Top; - + // the max value of the scrollbar is the amount of non-scaled pixels taken up by overflowing components var scrollBarMax = (childrenHeight - this.ChildPaddedArea.Height) / this.Scale; - if (this.ScrollBar.MaxValue != scrollBarMax) { + if (!this.ScrollBar.MaxValue.Equals(scrollBarMax, Epsilon)) { this.ScrollBar.MaxValue = scrollBarMax; this.relevantChildrenDirty = true; } - + // the scroller height has the same relation to the scroll bar height as the visible area has to the total height of the panel's content - var scrollerHeight = this.ChildPaddedArea.Height / childrenHeight / this.Scale * this.ScrollBar.Area.Height; + var scrollerHeight = Math.Min(this.ChildPaddedArea.Height / childrenHeight / this.Scale, 1) * this.ScrollBar.Area.Height; this.ScrollBar.ScrollerSize = new Vector2(this.ScrollerSize.Value.X, Math.Max(this.ScrollerSize.Value.Y, scrollerHeight)); // update the render target