Browse Source

use UpdateWindowProperties to MarkFullScreen.

pull/3849/head
Dan Walmsley 7 years ago
parent
commit
a41162dce6
  1. 47
      src/Windows/Avalonia.Win32/WindowImpl.cs

47
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -580,23 +580,19 @@ namespace Avalonia.Win32
/// <summary>
/// Ported from https://github.com/chromium/chromium/blob/master/ui/views/win/fullscreen_handler.cc
/// Method must only be called from inside UpdateWindowProperties.
/// </summary>
/// <param name="fullscreen"></param>
private void SetFullScreen(bool fullscreen)
{
// Save current window state if not already fullscreen.
if (!_windowProperties.IsFullScreen)
if (fullscreen)
{
// Save current window state if not already fullscreen.
_savedWindowInfo.Style = GetStyle();
_savedWindowInfo.ExStyle = GetExtendedStyle();
GetWindowRect(_hwnd, out var windowRect);
_savedWindowInfo.WindowRect = windowRect;
}
_windowProperties.IsFullScreen = fullscreen;
if (_windowProperties.IsFullScreen)
{
// Set new window style and size.
SetStyle(_savedWindowInfo.Style & ~(WindowStyles.WS_CAPTION | WindowStyles.WS_THICKFRAME));
SetExtendedStyle(_savedWindowInfo.ExStyle & ~(WindowStyles.WS_EX_DLGMODALFRAME | WindowStyles.WS_EX_WINDOWEDGE | WindowStyles.WS_EX_CLIENTEDGE | WindowStyles.WS_EX_STATICEDGE));
@ -635,42 +631,40 @@ namespace Avalonia.Win32
{
ShowWindowCommand command;
var newWindowProperties = _windowProperties;
switch (state)
{
case WindowState.Minimized:
if (_windowProperties.IsFullScreen)
{
SetFullScreen(false);
}
newWindowProperties.IsFullScreen = false;
command = ShowWindowCommand.Minimize;
break;
case WindowState.Maximized:
if (_windowProperties.IsFullScreen)
{
SetFullScreen(false);
}
newWindowProperties.IsFullScreen = false;
command = ShowWindowCommand.Maximize;
break;
case WindowState.Normal:
if (_windowProperties.IsFullScreen)
{
SetFullScreen(false);
}
newWindowProperties.IsFullScreen = false;
command = ShowWindowCommand.Restore;
break;
case WindowState.FullScreen:
SetFullScreen(true);
return;
newWindowProperties.IsFullScreen = true;
command = ShowWindowCommand.Maximize;
break;
default:
throw new ArgumentException("Invalid WindowState.");
}
UpdateWindowProperties(newWindowProperties);
if (newWindowProperties.IsFullScreen)
{
return;
}
UnmanagedMethods.ShowWindow(_hwnd, command);
if (state == WindowState.Maximized)
@ -800,6 +794,11 @@ namespace Avalonia.Win32
SetWindowPosFlags.SWP_NOZORDER | SetWindowPosFlags.SWP_NOACTIVATE |
SetWindowPosFlags.SWP_FRAMECHANGED);
}
if (oldProperties.IsFullScreen != newProperties.IsFullScreen)
{
SetFullScreen(newProperties.IsFullScreen);
}
}
#if USE_MANAGED_DRAG

Loading…
Cancel
Save