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: