diff --git a/OpenRA.Game/Exts.cs b/OpenRA.Game/Exts.cs index d37669448a..0150dd7662 100755 --- a/OpenRA.Game/Exts.cs +++ b/OpenRA.Game/Exts.cs @@ -67,15 +67,5 @@ namespace OpenRA Log.Write("perf", text, x, dt * 1000, Game.LocalTick); }); } - - public static T Clamp(this T val, T min, T max) where T : IComparable - { - if (val.CompareTo(min) < 0) - return min; - else if (val.CompareTo(max) > 0) - return max; - else - return val; - } } } diff --git a/OpenRA.Game/Server/Exts.cs b/OpenRA.Game/Server/Exts.cs index bbc3099bf2..823afc3df0 100755 --- a/OpenRA.Game/Server/Exts.cs +++ b/OpenRA.Game/Server/Exts.cs @@ -33,15 +33,5 @@ namespace OpenRA.Server { return ts.Except( new[] { t } ); } - - public static T Clamp(this T val, T min, T max) where T : IComparable - { - if (val.CompareTo(min) < 0) - return min; - else if (val.CompareTo(max) > 0) - return max; - else - return val; - } } } diff --git a/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs b/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs index 8a893c8267..87a12175e7 100644 --- a/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs @@ -57,9 +57,10 @@ namespace OpenRA.Widgets.Delegates // Added scroll sensitivity - Gecko var edgeScrollSlider = general.GetWidget("EDGE_SCROLL_AMOUNT"); if (edgeScrollSlider != null) // Backwards compatible - Gecko - { - edgeScrollSlider.OnChange += x => { x += 0.1f; Game.Settings.Game.ViewportEdgeScrollStep = x; }; - edgeScrollSlider.GetOffset = () => { return Game.Settings.Game.ViewportEdgeScrollStep - 0.1f; }; + { + edgeScrollSlider.SetOffset(Game.Settings.Game.ViewportEdgeScrollStep); + edgeScrollSlider.OnChange += _ => { Game.Settings.Game.ViewportEdgeScrollStep = edgeScrollSlider.GetOffset(); }; + Game.Settings.Game.ViewportEdgeScrollStep = edgeScrollSlider.GetOffset(); } var inverseScroll = general.GetWidget("INVERSE_SCROLL"); @@ -76,10 +77,12 @@ namespace OpenRA.Widgets.Delegates var soundslider = audio.GetWidget("SOUND_VOLUME"); soundslider.OnChange += x => { Sound.SoundVolume = x; }; soundslider.GetOffset = () => { return Sound.SoundVolume; }; + soundslider.SetOffset(Sound.SoundVolume); var musicslider = audio.GetWidget("MUSIC_VOLUME"); musicslider.OnChange += x => { Sound.MusicVolume = x; }; musicslider.GetOffset = () => { return Sound.MusicVolume; }; + musicslider.SetOffset(Sound.MusicVolume); // Display diff --git a/OpenRA.Game/Widgets/SliderWidget.cs b/OpenRA.Game/Widgets/SliderWidget.cs index 3f00c59d2c..d25242c43b 100755 --- a/OpenRA.Game/Widgets/SliderWidget.cs +++ b/OpenRA.Game/Widgets/SliderWidget.cs @@ -37,7 +37,7 @@ namespace OpenRA.Widgets return Spread * Offset + Little; }; - OnChange = x => Offset = x; + OnChange = x => Offset = x.Clamp(0f, 1f); } public SliderWidget(SliderWidget other) @@ -45,8 +45,9 @@ namespace OpenRA.Widgets { OnChange = other.OnChange; GetOffset = other.GetOffset; - Offset = other.Offset; Ticks = other.Ticks; + Range = other.Range; + Offset = GetOffset(); TrackHeight = other.TrackHeight; lastMouseLocation = other.lastMouseLocation; isMoving = other.isMoving; @@ -58,7 +59,7 @@ namespace OpenRA.Widgets var Little = Math.Min(Range.X, Range.Y); var Spread = Big - Little; - Offset = (newOffset - Little) / Spread; + Offset = ((newOffset - Little) / Spread).Clamp(0f, 1f); } public override bool HandleInputInner(MouseInput mi) diff --git a/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs b/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs index fcf9f73197..45eb7c2f06 100755 --- a/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs +++ b/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs @@ -144,14 +144,18 @@ namespace OpenRA.Widgets // Modified to use the ViewportEdgeScrollStep setting - Gecko if (Keyboard.Includes(ScrollDirection.Up) || Edge.Includes(ScrollDirection.Up)) - scroll += new float2(0, -(Game.Settings.Game.ViewportEdgeScrollStep * 100)); + scroll += new float2(0, -1); if (Keyboard.Includes(ScrollDirection.Right) || Edge.Includes(ScrollDirection.Right)) - scroll += new float2((Game.Settings.Game.ViewportEdgeScrollStep * 100), 0); + scroll += new float2(1, 0); if (Keyboard.Includes(ScrollDirection.Down) || Edge.Includes(ScrollDirection.Down)) - scroll += new float2(0, (Game.Settings.Game.ViewportEdgeScrollStep * 100)); + scroll += new float2(0, 1); if (Keyboard.Includes(ScrollDirection.Left) || Edge.Includes(ScrollDirection.Left)) - scroll += new float2(-(Game.Settings.Game.ViewportEdgeScrollStep * 100), 0); - + scroll += new float2(-1, 0); + + float length = scroll.Length; + scroll.X = (scroll.X / length) * Game.Settings.Game.ViewportEdgeScrollStep; + scroll.Y = (scroll.Y / length) * Game.Settings.Game.ViewportEdgeScrollStep; + Game.viewport.Scroll(scroll); } } diff --git a/mods/cnc/chrome/settings.yaml b/mods/cnc/chrome/settings.yaml index fa375763d3..0b59a884e6 100644 --- a/mods/cnc/chrome/settings.yaml +++ b/mods/cnc/chrome/settings.yaml @@ -102,6 +102,7 @@ Background@SETTINGS_MENU: Width:250 Height:20 Ticks:5 + Range:10,50 Checkbox@INVERSE_SCROLL: Id:INVERSE_SCROLL X:0 diff --git a/mods/ra/chrome/settings.yaml b/mods/ra/chrome/settings.yaml index 50e4c826e3..48e441f7c1 100644 --- a/mods/ra/chrome/settings.yaml +++ b/mods/ra/chrome/settings.yaml @@ -103,6 +103,7 @@ Background@SETTINGS_MENU: Width:250 Height:20 Ticks:5 + Range:10,50 Checkbox@INVERSE_SCROLL: Id:INVERSE_SCROLL X:0