diff --git a/Testing/VelaptorTests/Scene/SceneBaseTests.cs b/Testing/VelaptorTests/Scene/SceneBaseTests.cs index bd40a40c0..173f56207 100644 --- a/Testing/VelaptorTests/Scene/SceneBaseTests.cs +++ b/Testing/VelaptorTests/Scene/SceneBaseTests.cs @@ -143,6 +143,19 @@ public void UnloadContent_WhenContentHasNotBeenLoaded_DoesNotUnloadContent() // Assert sut.IsLoaded.Should().BeFalse(); } + + [Fact] + public void Resize_WhenInvoked_UpdatesWindowSize() + { + // Arrange + var sut = CreateSystemUnderTest(); + + // Act + sut.Resize(new SizeU(10u, 10u)); + + // Assert + sut.WindowSize.Should().Be(new SizeU(10u, 10u)); + } #endregion #region Reactable Tests diff --git a/Testing/VelaptorTests/Scene/SceneManagerTests.cs b/Testing/VelaptorTests/Scene/SceneManagerTests.cs index a716c0172..7ac3c648a 100644 --- a/Testing/VelaptorTests/Scene/SceneManagerTests.cs +++ b/Testing/VelaptorTests/Scene/SceneManagerTests.cs @@ -711,6 +711,26 @@ public void SceneExists_WhenSceneDoesNotExist_ReturnsFalse() actual.Should().BeFalse(); } + [Fact] + public void Resize_WhenInvoked_UpdatesWindowSizeForEachScene() + { + // Arrange + var mockSceneA = Substitute.For(); + mockSceneA.Id.Returns(Guid.NewGuid()); + var mockSceneB = Substitute.For(); + mockSceneB.Id.Returns(Guid.NewGuid()); + var sut = new SceneManager(); + sut.AddScene(mockSceneA); + sut.AddScene(mockSceneB); + + // Act + sut.Resize(new SizeU(15u, 15u)); + + // Assert + mockSceneA.Received(1).Resize(new SizeU(15u, 15u)); + mockSceneB.Received(1).Resize(new SizeU(15u, 15u)); + } + [Fact] [SuppressMessage("csharpsquid", "S3966", Justification = "Disposing twice is required for testing.")] public void Dispose_WhenInvokedS_DisposesOfScenes() diff --git a/Velaptor/Scene/IScene.cs b/Velaptor/Scene/IScene.cs index 355b03595..32aa3fdb0 100644 --- a/Velaptor/Scene/IScene.cs +++ b/Velaptor/Scene/IScene.cs @@ -50,4 +50,10 @@ public interface IScene : IUpdatable, IDrawable, IDisposable /// Unloads the scene's content. /// void UnloadContent(); + + /// + /// Updates the . + /// + /// The new size. + void Resize(SizeU size); } diff --git a/Velaptor/Scene/ISceneManager.cs b/Velaptor/Scene/ISceneManager.cs index 21573d6ad..8028f34c0 100644 --- a/Velaptor/Scene/ISceneManager.cs +++ b/Velaptor/Scene/ISceneManager.cs @@ -99,4 +99,10 @@ public interface ISceneManager : IUpdatable, IDrawable, IDisposable /// [SuppressMessage("ReSharper", "UnusedMemberInSuper.Global", Justification = "Used by library users.")] bool SceneExists(Guid id); + + /// + /// Updates the size of the window for each scene. + /// + /// The new size. + void Resize(SizeU size); } diff --git a/Velaptor/Scene/SceneBase.cs b/Velaptor/Scene/SceneBase.cs index 93519fd4d..c5748e52d 100644 --- a/Velaptor/Scene/SceneBase.cs +++ b/Velaptor/Scene/SceneBase.cs @@ -70,6 +70,9 @@ public virtual void UnloadContent() IsLoaded = false; } + /// + public virtual void Resize(SizeU size) => WindowSize = size; + /// public virtual void Update(FrameTime frameTime) { diff --git a/Velaptor/Scene/SceneManager.cs b/Velaptor/Scene/SceneManager.cs index 1a897f470..7bcccbeff 100644 --- a/Velaptor/Scene/SceneManager.cs +++ b/Velaptor/Scene/SceneManager.cs @@ -202,6 +202,15 @@ public void UnloadContent() /// True if the scene exists. public bool SceneExists(Guid id) => this.scenes.Exists(s => s.scene?.Id == id); + /// + public void Resize(SizeU size) + { + foreach ((IScene? scene, _) in this.scenes) + { + scene?.Resize(size); + } + } + /// public void Dispose() { diff --git a/Velaptor/UI/Window.cs b/Velaptor/UI/Window.cs index 21d3de33f..8526ffd72 100644 --- a/Velaptor/UI/Window.cs +++ b/Velaptor/UI/Window.cs @@ -267,9 +267,7 @@ protected virtual void OnUnload() /// The new size. [ExcludeFromCodeCoverage(Justification = "Not originally intended to have a method body.")] [SuppressMessage("ReSharper", "VirtualMemberNeverOverridden.Global", Justification = "Used by library users.")] - protected virtual void OnResize(SizeU size) - { - } + protected virtual void OnResize(SizeU size) => this.nativeWindow.SceneManager.Resize(size); /// ///