diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 1780bd55c3..2386f15cec 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -51,7 +51,6 @@ namespace OpenRA public static Renderer Renderer; public static Sound Sound; - public static bool HasInputFocus = false; public static string EngineVersion { get; private set; } public static LocalPlayerProfile LocalPlayerProfile; diff --git a/OpenRA.Game/Graphics/PlatformInterfaces.cs b/OpenRA.Game/Graphics/PlatformInterfaces.cs index 0a582dd636..966240eb9d 100644 --- a/OpenRA.Game/Graphics/PlatformInterfaces.cs +++ b/OpenRA.Game/Graphics/PlatformInterfaces.cs @@ -49,6 +49,7 @@ namespace OpenRA Size SurfaceSize { get; } int DisplayCount { get; } int CurrentDisplay { get; } + bool HasInputFocus { get; } event Action OnWindowScaleChanged; diff --git a/OpenRA.Game/Renderer.cs b/OpenRA.Game/Renderer.cs index bf26034bc3..c7c93fe299 100644 --- a/OpenRA.Game/Renderer.cs +++ b/OpenRA.Game/Renderer.cs @@ -31,6 +31,15 @@ namespace OpenRA public RgbaColorRenderer RgbaColorRenderer { get; private set; } public SpriteRenderer SpriteRenderer { get; private set; } public RgbaSpriteRenderer RgbaSpriteRenderer { get; private set; } + + public bool WindowHasInputFocus + { + get + { + return Window.HasInputFocus; + } + } + public IReadOnlyDictionary Fonts; internal IPlatformWindow Window { get; private set; } diff --git a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs index bd370daff2..c04013d99a 100644 --- a/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ViewportControllerWidget.cs @@ -192,7 +192,7 @@ namespace OpenRA.Mods.Common.Widgets else if (!isStandardScrolling) { edgeDirections = ScrollDirection.None; - if (Game.Settings.Game.ViewportEdgeScroll && Game.HasInputFocus) + if (Game.Settings.Game.ViewportEdgeScroll && Game.Renderer.WindowHasInputFocus) edgeDirections = CheckForDirections(); if (keyboardDirections != ScrollDirection.None || edgeDirections != ScrollDirection.None) diff --git a/OpenRA.Platforms.Default/Sdl2Input.cs b/OpenRA.Platforms.Default/Sdl2Input.cs index 40dba07cd6..656df74f10 100644 --- a/OpenRA.Platforms.Default/Sdl2Input.cs +++ b/OpenRA.Platforms.Default/Sdl2Input.cs @@ -81,11 +81,11 @@ namespace OpenRA.Platforms.Default switch (e.window.windowEvent) { case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST: - Game.HasInputFocus = false; + device.HasInputFocus = false; break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED: - Game.HasInputFocus = true; + device.HasInputFocus = true; break; // Triggered when moving between displays with different DPI settings diff --git a/OpenRA.Platforms.Default/Sdl2PlatformWindow.cs b/OpenRA.Platforms.Default/Sdl2PlatformWindow.cs index ed1d3f37b1..c168fed622 100644 --- a/OpenRA.Platforms.Default/Sdl2PlatformWindow.cs +++ b/OpenRA.Platforms.Default/Sdl2PlatformWindow.cs @@ -105,6 +105,8 @@ namespace OpenRA.Platforms.Default } } + public bool HasInputFocus { get; internal set; } + public event Action OnWindowScaleChanged = (oldNative, oldEffective, newNative, newEffective) => { }; [DllImport("user32.dll")] @@ -221,11 +223,11 @@ namespace OpenRA.Platforms.Default switch (e.window.windowEvent) { case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST: - Game.HasInputFocus = false; + HasInputFocus = false; break; case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED: - Game.HasInputFocus = true; + HasInputFocus = true; break; } }