diff --git a/sources/engine/Stride.UI.Tests/Layering/SliderTests.cs b/sources/engine/Stride.UI.Tests/Layering/SliderTests.cs index 7366000351..23d3188426 100644 --- a/sources/engine/Stride.UI.Tests/Layering/SliderTests.cs +++ b/sources/engine/Stride.UI.Tests/Layering/SliderTests.cs @@ -115,6 +115,53 @@ public void TestMinimumMaximumValues() slider.Value = 10; Assert.Equal(1.0f, slider.Value); } + + [Fact] + public void TestMinimumMaximumChangesCoerceValue() + { + var slider = new Slider { Maximum = 10, Value = 8 }; + var valueChangedCount = 0; + slider.ValueChanged += (s, e) => valueChangedCount++; + + slider.Maximum = 4; + + Assert.Equal(4, slider.Maximum); + Assert.Equal(4, slider.Value); + Assert.Equal(1, valueChangedCount); + + slider.Minimum = 5; + + Assert.Equal(5, slider.Minimum); + Assert.Equal(5, slider.Maximum); + Assert.Equal(5, slider.Value); + Assert.Equal(2, valueChangedCount); + + slider.Minimum = 5; + + Assert.Equal(2, valueChangedCount); + } + + [Fact] + public void TestMinimumMaximumChangesCoerceValueWithSnapping() + { + var slider = new Slider + { + Maximum = 10, + Value = 8, + TickFrequency = 5, + ShouldSnapToTicks = true, + }; + + slider.Maximum = 4; + + Assert.Equal(4, slider.Value); + + slider.Minimum = 5; + + Assert.Equal(5, slider.Minimum); + Assert.Equal(5, slider.Maximum); + Assert.Equal(5, slider.Value); + } /// /// Test the event. diff --git a/sources/engine/Stride.UI/Controls/Slider.cs b/sources/engine/Stride.UI/Controls/Slider.cs index 38e264ad1a..b696c6f6e1 100644 --- a/sources/engine/Stride.UI/Controls/Slider.cs +++ b/sources/engine/Stride.UI/Controls/Slider.cs @@ -459,6 +459,7 @@ protected override void Update(GameTime time) private void CoerceMaximum(float newValue) { maximum = MathUtil.Clamp(newValue, minimum, float.MaxValue); + Value = Value; } private void InvalidateMeasure(object sender, EventArgs eventArgs)