diff --git a/OpenRA.Game/GameRules/UserSettings.cs b/OpenRA.Game/GameRules/UserSettings.cs old mode 100644 new mode 100755 index d1df8679cf..b7baea117a --- a/OpenRA.Game/GameRules/UserSettings.cs +++ b/OpenRA.Game/GameRules/UserSettings.cs @@ -19,8 +19,9 @@ namespace OpenRA.GameRules { public class UserSettings { - // Behaviour settings - public bool ViewportEdgeScroll = true; + // Behaviour settings + public bool ViewportEdgeScroll = true; + public bool InverseDragScroll = false; // Debug settings public bool PerfDebug = false; diff --git a/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs b/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs old mode 100644 new mode 100755 index a598505817..55ef60d0b0 --- a/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/SettingsMenuDelegate.cs @@ -44,15 +44,23 @@ namespace OpenRA.Widgets.Delegates else Game.Settings.PlayerName = name.Text; }; - name.OnEnterKey = () => { name.LoseFocus(); return true; }; - - var edgeScroll = general.GetWidget("EDGE_SCROLL"); - edgeScroll.Checked = () => Game.Settings.ViewportEdgeScroll; - edgeScroll.OnMouseDown = mi => - { - Game.Settings.ViewportEdgeScroll ^= true; - return true; - }; + name.OnEnterKey = () => { name.LoseFocus(); return true; }; + + var edgeScroll = general.GetWidget("EDGE_SCROLL"); + edgeScroll.Checked = () => Game.Settings.ViewportEdgeScroll; + edgeScroll.OnMouseDown = mi => + { + Game.Settings.ViewportEdgeScroll ^= true; + return true; + }; + + var inverseScroll = general.GetWidget("INVERSE_SCROLL"); + inverseScroll.Checked = () => Game.Settings.InverseDragScroll; + inverseScroll.OnMouseDown = mi => + { + Game.Settings.InverseDragScroll ^= true; + return true; + }; // Audio var audio = bg.GetWidget("AUDIO_PANE"); diff --git a/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs b/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs old mode 100644 new mode 100755 index d851d3d6de..253ed378fe --- a/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs +++ b/OpenRA.Game/Widgets/ViewportScrollControllerWidget.cs @@ -38,8 +38,9 @@ namespace OpenRA.Widgets { if (mi.Event == MouseInputEvent.Move && (mi.Button == MouseButton.Middle || mi.Button == (MouseButton.Left | MouseButton.Right))) - { - Game.viewport.Scroll(Viewport.LastMousePos - mi.Location); + { + int InverseScroll = Game.Settings.InverseDragScroll ? -1 : 1; + Game.viewport.Scroll((Viewport.LastMousePos - mi.Location) * InverseScroll); return true; } return false; diff --git a/mods/cnc/chrome/settings.yaml b/mods/cnc/chrome/settings.yaml index fbe9d327a9..5d1d154b22 100644 --- a/mods/cnc/chrome/settings.yaml +++ b/mods/cnc/chrome/settings.yaml @@ -93,6 +93,13 @@ Container@ROOT: Width:200 Height:20 Text: Enable Edge Scrolling + Checkbox@INVERSE_SCROLL: + Id:INVERSE_SCROLL + X:0 + Y:60 + Width:200 + Height:20 + Text: Invert Mouse Drag Scrolling Container@AUDIO_PANE: Id:AUDIO_PANE X:37 diff --git a/mods/ra/chrome/settings.yaml b/mods/ra/chrome/settings.yaml index 34f2703f53..eedbfcc35d 100644 --- a/mods/ra/chrome/settings.yaml +++ b/mods/ra/chrome/settings.yaml @@ -91,6 +91,13 @@ Background@SETTINGS_MENU: Width:200 Height:20 Text: Enable Edge Scrolling + Checkbox@INVERSE_SCROLL: + Id:INVERSE_SCROLL + X:0 + Y:60 + Width:200 + Height:20 + Text: Invert Mouse Drag Scrolling Container@AUDIO_PANE: Id:AUDIO_PANE X:37