Fix keys scrolling stuck (+ some function double calls)

This commit is contained in:
rob-v
2017-04-12 18:52:19 +02:00
committed by Oliver Brakmann
parent f4988356a0
commit fc0495ac27

View File

@@ -368,99 +368,95 @@ namespace OpenRA.Mods.Common.Widgets
var key = Hotkey.FromKeyInput(e); var key = Hotkey.FromKeyInput(e);
var ks = Game.Settings.Keys; var ks = Game.Settings.Keys;
if (key == ks.MapScrollUp) Func<Hotkey, ScrollDirection, bool> handleMapScrollKey = (hotkey, scrollDirection) =>
{ {
keyboardDirections = keyboardDirections.Set(ScrollDirection.Up, e.Event == KeyInputEvent.Down); var isHotkey = false;
return true; if (key.Key == hotkey.Key)
} {
isHotkey = key == hotkey;
keyboardDirections = keyboardDirections.Set(scrollDirection, e.Event == KeyInputEvent.Down && (isHotkey || hotkey.Modifiers == Modifiers.None));
}
if (key == ks.MapScrollDown) return isHotkey;
{ };
keyboardDirections = keyboardDirections.Set(ScrollDirection.Down, e.Event == KeyInputEvent.Down);
return true;
}
if (key == ks.MapScrollLeft) if (handleMapScrollKey(ks.MapScrollUp, ScrollDirection.Up) || handleMapScrollKey(ks.MapScrollDown, ScrollDirection.Down)
{ || handleMapScrollKey(ks.MapScrollLeft, ScrollDirection.Left) || handleMapScrollKey(ks.MapScrollRight, ScrollDirection.Right))
keyboardDirections = keyboardDirections.Set(ScrollDirection.Left, e.Event == KeyInputEvent.Down);
return true; return true;
}
if (key == ks.MapScrollRight) if (e.Event != KeyInputEvent.Down)
{ return false;
keyboardDirections = keyboardDirections.Set(ScrollDirection.Right, e.Event == KeyInputEvent.Down);
return true;
}
if (key == ks.MapPushTop) if (key == ks.MapPushTop)
{ {
worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, 0, 0)); worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, 0, 0));
return false; return true;
} }
if (key == ks.MapPushBottom) if (key == ks.MapPushBottom)
{ {
worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, worldRenderer.World.Map.ProjectedBottomRight.Y, 0)); worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, worldRenderer.World.Map.ProjectedBottomRight.Y, 0));
return false; return true;
} }
if (key == ks.MapPushLeftEdge) if (key == ks.MapPushLeftEdge)
{ {
worldRenderer.Viewport.Center(new WPos(0, worldRenderer.Viewport.CenterPosition.Y, 0)); worldRenderer.Viewport.Center(new WPos(0, worldRenderer.Viewport.CenterPosition.Y, 0));
return false; return true;
} }
if (key == ks.MapPushRightEdge) if (key == ks.MapPushRightEdge)
{ {
worldRenderer.Viewport.Center(new WPos(worldRenderer.World.Map.ProjectedBottomRight.X, worldRenderer.Viewport.CenterPosition.Y, 0)); worldRenderer.Viewport.Center(new WPos(worldRenderer.World.Map.ProjectedBottomRight.X, worldRenderer.Viewport.CenterPosition.Y, 0));
return true;
} }
if (key == ks.ViewPortBookmarkSaveSlot1) if (key == ks.ViewPortBookmarkSaveSlot1)
{ {
SaveCurrentPositionToBookmark(0); SaveCurrentPositionToBookmark(0);
return false; return true;
} }
if (key == ks.ViewPortBookmarkSaveSlot2) if (key == ks.ViewPortBookmarkSaveSlot2)
{ {
SaveCurrentPositionToBookmark(1); SaveCurrentPositionToBookmark(1);
return false; return true;
} }
if (key == ks.ViewPortBookmarkSaveSlot3) if (key == ks.ViewPortBookmarkSaveSlot3)
{ {
SaveCurrentPositionToBookmark(2); SaveCurrentPositionToBookmark(2);
return false; return true;
} }
if (key == ks.ViewPortBookmarkSaveSlot4) if (key == ks.ViewPortBookmarkSaveSlot4)
{ {
SaveCurrentPositionToBookmark(3); SaveCurrentPositionToBookmark(3);
return false; return true;
} }
if (key == ks.ViewPortBookmarkUseSlot1) if (key == ks.ViewPortBookmarkUseSlot1)
{ {
JumpToSavedBookmark(0); JumpToSavedBookmark(0);
return false; return true;
} }
if (key == ks.ViewPortBookmarkUseSlot2) if (key == ks.ViewPortBookmarkUseSlot2)
{ {
JumpToSavedBookmark(1); JumpToSavedBookmark(1);
return false; return true;
} }
if (key == ks.ViewPortBookmarkUseSlot3) if (key == ks.ViewPortBookmarkUseSlot3)
{ {
JumpToSavedBookmark(2); JumpToSavedBookmark(2);
return false; return true;
} }
if (key == ks.ViewPortBookmarkUseSlot4) if (key == ks.ViewPortBookmarkUseSlot4)
{ {
JumpToSavedBookmark(3); JumpToSavedBookmark(3);
return false; return true;
} }
return false; return false;