@ -231,26 +231,26 @@ namespace Avalonia.Win32
private WindowTransparencyLevel EnableBlur ( WindowTransparencyLevel transparencyLevel )
{
if ( Win32Platform . WindowsVersion . Major > = 6 ) //On Windows Vista or newer
if ( Win32Platform . WindowsVersion . Major > = 6 )
{
if ( DwmIsCompositionEnabled ( out var compositionEnabled ) ! = 0 | | ! compositionEnabled ) //DWM is Disabled
if ( DwmIsCompositionEnabled ( out var compositionEnabled ) ! = 0 | | ! compositionEnabled )
{
return WindowTransparencyLevel . None ;
}
else if ( Win32Platform . WindowsVersion . Major > = 1 0 ) //On Windows 10 or Server 2016
else if ( Win32Platform . WindowsVersion . Major > = 1 0 )
{
return Win10EnableBlur ( transparencyLevel ) ;
}
else if ( Win32Platform . WindowsVersion . Minor > = 2 ) //On Windows 8.x
else if ( Win32Platform . WindowsVersion . Minor > = 2 )
{
return Win8xEnableBlur ( transparencyLevel ) ;
}
else
{
return Win7EnableBlur ( transparencyLevel ) ; //On Windows Vista or 7
return Win7EnableBlur ( transparencyLevel ) ;
}
}
else //Impossible case or maybe Shorthorn/OneCore idk
else
{
return WindowTransparencyLevel . None ;
}
@ -259,9 +259,11 @@ namespace Avalonia.Win32
private WindowTransparencyLevel Win7EnableBlur ( WindowTransparencyLevel transparencyLevel )
{
if ( transparencyLevel = = WindowTransparencyLevel . AcrylicBlur )
{
transparencyLevel = WindowTransparencyLevel . Blur ;
DWM_BLURBEHIND blurInfo = new DWM_BLURBEHIND ( false ) ;
}
var blurInfo = new DWM_BLURBEHIND ( false ) ;
if ( transparencyLevel = = WindowTransparencyLevel . Blur )
{
@ -271,9 +273,13 @@ namespace Avalonia.Win32
DwmEnableBlurBehindWindow ( _ hwnd , ref blurInfo ) ;
if ( transparencyLevel = = WindowTransparencyLevel . Transparent )
{
return WindowTransparencyLevel . None ;
}
else
{
return transparencyLevel ;
}
}
private WindowTransparencyLevel Win8xEnableBlur ( WindowTransparencyLevel transparencyLevel )
@ -286,17 +292,15 @@ namespace Avalonia.Win32
transparencyLevel = WindowTransparencyLevel . Blur ;
}
if ( transparencyLevel = = WindowTransparencyLevel . Transparent )
{
accent . AccentState = AccentState . ACCENT_ENABLE_BLURBEHIND ; //Some of the AccentState Enum's values have different meanings on Windows 8.x than on Windows 10
accent . AccentState = AccentState . ACCENT_ENABLE_BLURBEHIND ;
}
else
{
accent . AccentState = AccentState . ACCENT_DISABLED ;
}
var accentPtr = Marshal . AllocHGlobal ( accentStructSize ) ;
Marshal . StructureToPtr ( accent , accentPtr , false ) ;
@ -309,20 +313,17 @@ namespace Avalonia.Win32
Marshal . FreeHGlobal ( accentPtr ) ;
if ( transparencyLevel > = WindowTransparencyLevel . Blur ) //Use Windows 7 blur logic, which will produce blur if the Aero glass mod is installed and will merely look kinda stupid if not
if ( transparencyLevel > = WindowTransparencyLevel . Blur )
{
Win7EnableBlur ( transparencyLevel ) ;
}
return transparencyLevel ;
}
private WindowTransparencyLevel Win10EnableBlur ( WindowTransparencyLevel transparencyLevel )
{
bool canUseAcrylic = false ;
if ( Win32Platform . WindowsVersion . Major > 1 0 | | Win32Platform . WindowsVersion . Build > = 1 9 6 2 8 )
{
canUseAcrylic = true ;
}
bool canUseAcrylic = Win32Platform . WindowsVersion . Major > 1 0 | | Win32Platform . WindowsVersion . Build > = 1 9 6 2 8 ;
var accent = new AccentPolicy ( ) ;
var accentStructSize = Marshal . SizeOf ( accent ) ;