Merge pull request #11148 from pchote/improve-scroll-input

Expose separate middle and right mouse scroll config.
This commit is contained in:
reaperrr
2016-05-13 22:44:18 +02:00
5 changed files with 107 additions and 72 deletions

View File

@@ -402,9 +402,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
MakeMouseFocusSettingsLive();
};
var mouseScrollDropdown = panel.Get<DropDownButtonWidget>("MOUSE_SCROLL");
mouseScrollDropdown.OnMouseDown = _ => ShowMouseScrollDropdown(mouseScrollDropdown, gs);
mouseScrollDropdown.GetText = () => gs.MouseScroll.ToString();
var middleMouseScrollDropdown = panel.Get<DropDownButtonWidget>("MIDDLE_MOUSE_SCROLL");
middleMouseScrollDropdown.OnMouseDown = _ => ShowMouseScrollDropdown(middleMouseScrollDropdown, gs, false);
middleMouseScrollDropdown.GetText = () => gs.MiddleMouseScroll.ToString();
var rightMouseScrollDropdown = panel.Get<DropDownButtonWidget>("RIGHT_MOUSE_SCROLL");
rightMouseScrollDropdown.OnMouseDown = _ => ShowMouseScrollDropdown(rightMouseScrollDropdown, gs, true);
rightMouseScrollDropdown.GetText = () => gs.RightMouseScroll.ToString();
var zoomModifierDropdown = panel.Get<DropDownButtonWidget>("ZOOM_MODIFIER");
zoomModifierDropdown.OnMouseDown = _ => ShowZoomModifierDropdown(zoomModifierDropdown, gs);
@@ -591,7 +595,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return () =>
{
gs.UseClassicMouseStyle = dgs.UseClassicMouseStyle;
gs.MouseScroll = dgs.MouseScroll;
gs.MiddleMouseScroll = dgs.MiddleMouseScroll;
gs.RightMouseScroll = dgs.RightMouseScroll;
gs.LockMouseWindow = dgs.LockMouseWindow;
gs.ViewportEdgeScroll = dgs.ViewportEdgeScroll;
gs.ViewportEdgeScrollStep = dgs.ViewportEdgeScrollStep;
@@ -651,7 +656,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
};
}
static bool ShowMouseScrollDropdown(DropDownButtonWidget dropdown, GameSettings s)
static bool ShowMouseScrollDropdown(DropDownButtonWidget dropdown, GameSettings s, bool rightMouse)
{
var options = new Dictionary<string, MouseScrollType>()
{
@@ -664,8 +669,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => s.MouseScroll == options[o],
() => s.MouseScroll = options[o]);
() => (rightMouse ? s.RightMouseScroll : s.MiddleMouseScroll) == options[o],
() => { if (rightMouse) s.RightMouseScroll = options[o]; else s.MiddleMouseScroll = options[o]; });
item.Get<LabelWidget>("LABEL").GetText = () => o;
return item;
};

View File

@@ -225,32 +225,37 @@ namespace OpenRA.Mods.Common.Widgets
return true;
}
var scrolltype = Game.Settings.Game.MouseScroll;
if (scrolltype == MouseScrollType.Disabled)
var scrollType = MouseScrollType.Disabled;
if (mi.Button == MouseButton.Middle || mi.Button == (MouseButton.Left | MouseButton.Right))
scrollType = Game.Settings.Game.MiddleMouseScroll;
else if (mi.Button == MouseButton.Right)
scrollType = Game.Settings.Game.RightMouseScroll;
if (scrollType == MouseScrollType.Disabled)
return false;
if (scrolltype == MouseScrollType.Standard || scrolltype == MouseScrollType.Inverted)
if (scrollType == MouseScrollType.Standard || scrollType == MouseScrollType.Inverted)
{
if (mi.Event == MouseInputEvent.Move &&
(mi.Button == MouseButton.Middle || mi.Button == (MouseButton.Left | MouseButton.Right)))
if (mi.Event == MouseInputEvent.Move)
{
var d = scrolltype == MouseScrollType.Inverted ? -1 : 1;
var d = scrollType == MouseScrollType.Inverted ? -1 : 1;
worldRenderer.Viewport.Scroll((Viewport.LastMousePos - mi.Location) * d, false);
return true;
}
}
// Tiberian Sun style right-click-and-drag scrolling
if (scrolltype == MouseScrollType.Joystick)
// Tiberian Sun style click-and-drag scrolling
if (scrollType == MouseScrollType.Joystick)
{
if (mi.Button == MouseButton.Right && mi.Event == MouseInputEvent.Down)
if (mi.Event == MouseInputEvent.Down)
{
if (!TakeMouseFocus(mi))
return false;
joystickScrollStart = mi.Location;
}
if (mi.Button == MouseButton.Right && mi.Event == MouseInputEvent.Up)
if (mi.Event == MouseInputEvent.Up)
{
var wasJoystickScrolling = IsJoystickScrolling;
@@ -261,10 +266,8 @@ namespace OpenRA.Mods.Common.Widgets
return true;
}
if (mi.Event == MouseInputEvent.Move && mi.Button == MouseButton.Right && joystickScrollStart.HasValue)
{
if (mi.Event == MouseInputEvent.Move && joystickScrollStart.HasValue)
joystickScrollEnd = mi.Location;
}
}
return false;