diff --git a/MLEM.Ui/Elements/Element.cs b/MLEM.Ui/Elements/Element.cs index d23db9d..e85b18e 100644 --- a/MLEM.Ui/Elements/Element.cs +++ b/MLEM.Ui/Elements/Element.cs @@ -383,6 +383,14 @@ namespace MLEM.Ui.Elements { } } + public IEnumerable GetParentTree() { + if (this.Parent == null) + yield break; + yield return this.Parent; + foreach (var parent in this.Parent.GetParentTree()) + yield return parent; + } + public virtual void Update(GameTime time) { foreach (var child in this.SortedChildren) child.Update(time); diff --git a/MLEM.Ui/Elements/ScrollBar.cs b/MLEM.Ui/Elements/ScrollBar.cs index b88b86b..544b6e0 100644 --- a/MLEM.Ui/Elements/ScrollBar.cs +++ b/MLEM.Ui/Elements/ScrollBar.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using MLEM.Extensions; @@ -63,7 +64,7 @@ namespace MLEM.Ui.Elements { } } - if (!this.Horizontal && (moused == this.Parent || moused?.Parent == this.Parent)) { + if (!this.Horizontal && moused != null && (moused == this.Parent || moused.GetParentTree().Contains(this.Parent))) { var scroll = this.Input.LastScrollWheel - this.Input.ScrollWheel; if (scroll != 0) this.CurrentValue += this.StepPerScroll * Math.Sign(scroll);