From facf4c4e1f1179be0807a6aeb0d82ecc140751b2 Mon Sep 17 00:00:00 2001 From: Dylan Wilson Date: Fri, 18 Dec 2015 22:19:12 +1000 Subject: [PATCH] inject the game window to the boxing viewport adapter and remove the dependency on calling an method manually when client size changes --- .../MonoGame.Extended.Tests/MockGameWindow.cs | 36 +++++++++++++++++++ .../MonoGame.Extended.Tests.csproj | 1 + .../BoxingViewportAdapterTests.cs | 10 +++--- .../ViewportAdapters/BoxingViewportAdapter.cs | 6 ++-- .../DefaultViewportAdapter.cs | 4 --- .../ScalingViewportAdapter.cs | 4 --- .../ViewportAdapters/ViewportAdapter.cs | 1 - Source/Sandbox/SandboxGame.cs | 3 +- 8 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 Source/MonoGame.Extended.Tests/MockGameWindow.cs diff --git a/Source/MonoGame.Extended.Tests/MockGameWindow.cs b/Source/MonoGame.Extended.Tests/MockGameWindow.cs new file mode 100644 index 00000000..d703211f --- /dev/null +++ b/Source/MonoGame.Extended.Tests/MockGameWindow.cs @@ -0,0 +1,36 @@ +using System; +using Microsoft.Xna.Framework; + +namespace MonoGame.Extended.Tests +{ + public class MockGameWindow : GameWindow + { + public void RaiseOnClientSizeChangedEvent() + { + OnClientSizeChanged(); + } + + public override void BeginScreenDeviceChange(bool willBeFullScreen) + { + } + + public override void EndScreenDeviceChange(string screenDeviceName, int clientWidth, int clientHeight) + { + } + + protected override void SetSupportedOrientations(DisplayOrientation orientations) + { + } + + protected override void SetTitle(string title) + { + } + + public override bool AllowUserResizing { get; set; } + public override Rectangle ClientBounds { get; } + public override Point Position { get; set; } + public override DisplayOrientation CurrentOrientation { get; } + public override IntPtr Handle { get; } + public override string ScreenDeviceName { get; } + } +} \ No newline at end of file diff --git a/Source/MonoGame.Extended.Tests/MonoGame.Extended.Tests.csproj b/Source/MonoGame.Extended.Tests/MonoGame.Extended.Tests.csproj index eaf51e88..71487ad5 100644 --- a/Source/MonoGame.Extended.Tests/MonoGame.Extended.Tests.csproj +++ b/Source/MonoGame.Extended.Tests/MonoGame.Extended.Tests.csproj @@ -48,6 +48,7 @@ + diff --git a/Source/MonoGame.Extended.Tests/ViewportAdapters/BoxingViewportAdapterTests.cs b/Source/MonoGame.Extended.Tests/ViewportAdapters/BoxingViewportAdapterTests.cs index 9542c0b2..1844e119 100644 --- a/Source/MonoGame.Extended.Tests/ViewportAdapters/BoxingViewportAdapterTests.cs +++ b/Source/MonoGame.Extended.Tests/ViewportAdapters/BoxingViewportAdapterTests.cs @@ -10,11 +10,12 @@ namespace MonoGame.Extended.Tests.ViewportAdapters [Test] public void BoxingViewportAdapter_Letterbox_Test() { + var gameWindow = new MockGameWindow(); var graphicsDevice = TestHelper.CreateGraphicsDevice(); - var viewportAdapter = new BoxingViewportAdapter(graphicsDevice, 800, 480); + var viewportAdapter = new BoxingViewportAdapter(gameWindow, graphicsDevice, 800, 480); graphicsDevice.Viewport = new Viewport(0, 0, 1024, 768); - viewportAdapter.OnClientSizeChanged(); + gameWindow.RaiseOnClientSizeChangedEvent(); Assert.AreEqual(1024, graphicsDevice.Viewport.Width); Assert.AreEqual(614, graphicsDevice.Viewport.Height); @@ -24,11 +25,12 @@ namespace MonoGame.Extended.Tests.ViewportAdapters [Test] public void BoxingViewportAdapter_Pillarbox_Test() { + var gameWindow = new MockGameWindow(); var graphicsDevice = TestHelper.CreateGraphicsDevice(); - var viewportAdapter = new BoxingViewportAdapter(graphicsDevice, 800, 480); + var viewportAdapter = new BoxingViewportAdapter(gameWindow, graphicsDevice, 800, 480); graphicsDevice.Viewport = new Viewport(0, 0, 900, 500); - viewportAdapter.OnClientSizeChanged(); + gameWindow.RaiseOnClientSizeChangedEvent(); Assert.AreEqual(833, graphicsDevice.Viewport.Width); Assert.AreEqual(500, graphicsDevice.Viewport.Height); diff --git a/Source/MonoGame.Extended/ViewportAdapters/BoxingViewportAdapter.cs b/Source/MonoGame.Extended/ViewportAdapters/BoxingViewportAdapter.cs index b7d65fc5..7a26c194 100644 --- a/Source/MonoGame.Extended/ViewportAdapters/BoxingViewportAdapter.cs +++ b/Source/MonoGame.Extended/ViewportAdapters/BoxingViewportAdapter.cs @@ -1,3 +1,4 @@ +using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; @@ -11,14 +12,15 @@ namespace MonoGame.Extended.ViewportAdapters public class BoxingViewportAdapter : ScalingViewportAdapter { - public BoxingViewportAdapter(GraphicsDevice graphicsDevice, int virtualWidth, int virtualHeight) + public BoxingViewportAdapter(GameWindow window, GraphicsDevice graphicsDevice, int virtualWidth, int virtualHeight) : base(graphicsDevice, virtualWidth, virtualHeight) { + window.ClientSizeChanged += OnClientSizeChanged; } public BoxingMode BoxingMode { get; private set; } - public override void OnClientSizeChanged() + private void OnClientSizeChanged(object sender, EventArgs eventArgs) { var viewport = GraphicsDevice.Viewport; var aspectRatio = (float) VirtualWidth / VirtualHeight; diff --git a/Source/MonoGame.Extended/ViewportAdapters/DefaultViewportAdapter.cs b/Source/MonoGame.Extended/ViewportAdapters/DefaultViewportAdapter.cs index bfc1efcb..f6bbc8b4 100644 --- a/Source/MonoGame.Extended/ViewportAdapters/DefaultViewportAdapter.cs +++ b/Source/MonoGame.Extended/ViewportAdapters/DefaultViewportAdapter.cs @@ -33,10 +33,6 @@ namespace MonoGame.Extended.ViewportAdapters get { return _graphicsDevice.Viewport.Height; } } - public override void OnClientSizeChanged() - { - } - public override Matrix GetScaleMatrix() { return Matrix.Identity; diff --git a/Source/MonoGame.Extended/ViewportAdapters/ScalingViewportAdapter.cs b/Source/MonoGame.Extended/ViewportAdapters/ScalingViewportAdapter.cs index d5eaa55d..d616fc2c 100644 --- a/Source/MonoGame.Extended/ViewportAdapters/ScalingViewportAdapter.cs +++ b/Source/MonoGame.Extended/ViewportAdapters/ScalingViewportAdapter.cs @@ -37,10 +37,6 @@ namespace MonoGame.Extended.ViewportAdapters get { return GraphicsDevice.Viewport.Height; } } - public override void OnClientSizeChanged() - { - } - public override Matrix GetScaleMatrix() { var scaleX = (float)ViewportWidth / VirtualWidth; diff --git a/Source/MonoGame.Extended/ViewportAdapters/ViewportAdapter.cs b/Source/MonoGame.Extended/ViewportAdapters/ViewportAdapter.cs index 3d02f304..fc05544e 100644 --- a/Source/MonoGame.Extended/ViewportAdapters/ViewportAdapter.cs +++ b/Source/MonoGame.Extended/ViewportAdapters/ViewportAdapter.cs @@ -13,7 +13,6 @@ namespace MonoGame.Extended.ViewportAdapters public abstract int VirtualHeight { get; } public abstract int ViewportWidth { get; } public abstract int ViewportHeight { get; } - public abstract void OnClientSizeChanged(); public abstract Matrix GetScaleMatrix(); public Point PointToScreen(Point point) diff --git a/Source/Sandbox/SandboxGame.cs b/Source/Sandbox/SandboxGame.cs index 7217fda4..612bed5c 100644 --- a/Source/Sandbox/SandboxGame.cs +++ b/Source/Sandbox/SandboxGame.cs @@ -37,7 +37,7 @@ namespace Sandbox protected override void Initialize() { _fpsCounter = new FramesPerSecondCounter(); - _viewportAdapter = new BoxingViewportAdapter(GraphicsDevice, 800, 480); + _viewportAdapter = new BoxingViewportAdapter(Window, GraphicsDevice, 800, 480); _camera = new Camera2D(_viewportAdapter) { MinimumZoom = 0.1f, @@ -48,7 +48,6 @@ namespace Sandbox }; Window.AllowUserResizing = true; - Window.ClientSizeChanged += (s, e) => _viewportAdapter.OnClientSizeChanged(); base.Initialize(); }