From 4af61a372f93ae91bfc504b8d84c536e9b17aa44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Tue, 21 Sep 2021 13:14:38 +0200 Subject: [PATCH] Fire WindowResizeEvent when window minimizes Also no longer updates layer-stack when the application is minimized --- GlitchyEngine/src/Application.bf | 20 ++++++++++++++- .../src/Platform/Windows/WindowsWindow.bf | 25 ++++++++----------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/GlitchyEngine/src/Application.bf b/GlitchyEngine/src/Application.bf index 239670c..ea480f4 100644 --- a/GlitchyEngine/src/Application.bf +++ b/GlitchyEngine/src/Application.bf @@ -14,6 +14,7 @@ namespace GlitchyEngine private EffectLibrary _effectLibrary ~ delete _; private bool _running = true; + private bool _isMinimized = false; private LayerStack _layerStack = new LayerStack() ~ delete _; @@ -26,6 +27,8 @@ namespace GlitchyEngine public EffectLibrary EffectLibrary => _effectLibrary; + public bool IsMinimized => _isMinimized; + [Inline] public static Application Get() => s_Instance; @@ -65,6 +68,8 @@ namespace GlitchyEngine EventDispatcher dispatcher = EventDispatcher(e); dispatcher.Dispatch(scope => OnWindowClose); + dispatcher.Dispatch(scope => OnWindowResize); + for(Layer layer in _layerStack) { layer.OnEvent(e); @@ -100,7 +105,7 @@ namespace GlitchyEngine } #endif - if(allowFrame) + if(allowFrame && !_isMinimized) { for(Layer layer in _layerStack) layer.Update(_gameTime); @@ -126,5 +131,18 @@ namespace GlitchyEngine _running = false; return true; } + + public bool OnWindowResize(WindowResizeEvent e) + { + if(e.Width == 0 || e.Height == 0) + { + _isMinimized = true; + return false; + } + + _isMinimized = false; + + return false; + } } } diff --git a/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf b/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf index 77cd3b8..e1e7f5e 100644 --- a/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf +++ b/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf @@ -263,26 +263,21 @@ namespace GlitchyEngine // Window size changed case WM_SIZE: { - if (wParam == (.)ResizingType.Minimized) - { - window._isMinimized = true; - } - else if (window._isMinimized) - { - window._isMinimized = false; - } - else - { - SplitHighAndLowOrder!(lParam, out window._clientRect.Width, out window._clientRect.Height); + window._isMinimized = wParam == (.)ResizingType.Minimized; + + SplitHighAndLowOrder!(lParam, out window._clientRect.Width, out window._clientRect.Height); + + if(window._clientRect.Width != 0 && window._clientRect.Height != 0) + { window._graphicsContext.SwapChain.Width = (.)window._clientRect.Width; window._graphicsContext.SwapChain.Height = (.)window._clientRect.Height; - + window._graphicsContext.SwapChain.ApplyChanges(); - - WindowResizeEvent event = scope WindowResizeEvent(window._clientRect.Width, window._clientRect.Height, window._isResizingOrMoving); - window._eventCallback(event); } + + WindowResizeEvent event = scope WindowResizeEvent(window._clientRect.Width, window._clientRect.Height, window._isResizingOrMoving); + window._eventCallback(event); } // Window position changed case WM_MOVE: