diff --git a/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs b/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs index 625acb17c3..09f9ed7c1b 100644 --- a/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs +++ b/src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs @@ -65,7 +65,9 @@ namespace Avalonia.Controls.Embedding.Offscreen public Action Closed { get; set; } public abstract IMouseDevice MouseDevice { get; } - public WindowTransparencyLevel TransparencyLevelHint { get => WindowTransparencyLevel.None; set { } } + public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { } + + public WindowTransparencyLevel TransparencyLevel { get; private set; } public IPopupImpl CreatePopup() => null; } diff --git a/src/Avalonia.Controls/Platform/ITopLevelImpl.cs b/src/Avalonia.Controls/Platform/ITopLevelImpl.cs index 4bcfaf91d6..c7875f6413 100644 --- a/src/Avalonia.Controls/Platform/ITopLevelImpl.cs +++ b/src/Avalonia.Controls/Platform/ITopLevelImpl.cs @@ -114,8 +114,13 @@ namespace Avalonia.Platform IPopupImpl CreatePopup(); /// - /// Gets or sets the of the TopLevel. + /// Sets the hint of the TopLevel. /// - WindowTransparencyLevel TransparencyLevelHint { get; set; } + void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel); + + /// + /// Gets the current of the TopLevel. + /// + WindowTransparencyLevel TransparencyLevel { get; } } } diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 6c09420f35..b61623a759 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -83,7 +83,7 @@ namespace Avalonia.Controls AffectsMeasure(ClientSizeProperty); TransparencyLevelHintProperty.Changed.AddClassHandler( - (tl, e) => { if (tl.PlatformImpl != null) tl.PlatformImpl.TransparencyLevelHint = (WindowTransparencyLevel)e.NewValue; }); + (tl, e) => { if (tl.PlatformImpl != null) tl.PlatformImpl.SetTransparencyLevelHint((WindowTransparencyLevel)e.NewValue); }); } /// @@ -402,7 +402,7 @@ namespace Avalonia.Controls _transparencyFallbackBorder = e.NameScope.Find("PART_TransparencyFallback"); - HandleTransparencyLevelChanged(PlatformImpl.TransparencyLevelHint); + HandleTransparencyLevelChanged(PlatformImpl.TransparencyLevel); } /// diff --git a/src/Avalonia.DesignerSupport/Remote/Stubs.cs b/src/Avalonia.DesignerSupport/Remote/Stubs.cs index 95284f18fe..a9665b1519 100644 --- a/src/Avalonia.DesignerSupport/Remote/Stubs.cs +++ b/src/Avalonia.DesignerSupport/Remote/Stubs.cs @@ -144,7 +144,9 @@ namespace Avalonia.DesignerSupport.Remote public Action GotInputWhenDisabled { get; set; } - public WindowTransparencyLevel TransparencyLevelHint { get => WindowTransparencyLevel.None; set { } } + public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { } + + public WindowTransparencyLevel TransparencyLevel { get; private set; } } class ClipboardStub : IClipboard diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index 5852675fb6..5072d98256 100644 --- a/src/Avalonia.Native/WindowImplBase.cs +++ b/src/Avalonia.Native/WindowImplBase.cs @@ -391,23 +391,19 @@ namespace Avalonia.Native _native.BeginDragAndDropOperation(effects, point, clipboard, callback, sourceHandle); } - private WindowTransparencyLevel _transparencyLevel; - - public WindowTransparencyLevel TransparencyLevelHint + public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { - get => _transparencyLevel; - set + if (TransparencyLevel != transparencyLevel) { - if(_transparencyLevel != value) - { - _transparencyLevel = value; + TransparencyLevel = transparencyLevel; - _native.SetBlurEnabled(_transparencyLevel >= WindowTransparencyLevel.Blur); - TransparencyLevelChanged?.Invoke(_transparencyLevel); - } - } + _native.SetBlurEnabled(TransparencyLevel >= WindowTransparencyLevel.Blur); + TransparencyLevelChanged?.Invoke(TransparencyLevel); + } } + public WindowTransparencyLevel TransparencyLevel { get; private set; } + public IPlatformHandle Handle { get; private set; } } } diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs index 6006135a2b..bce82b2954 100644 --- a/src/Avalonia.X11/X11Window.cs +++ b/src/Avalonia.X11/X11Window.cs @@ -1086,6 +1086,9 @@ namespace Avalonia.X11 public IPopupPositioner PopupPositioner { get; } public ITopLevelNativeMenuExporter NativeMenuExporter { get; } - public WindowTransparencyLevel TransparencyLevelHint { get; set; } + + public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { } + + public WindowTransparencyLevel TransparencyLevel { get; private set; } } } diff --git a/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs b/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs index 3f50e1e4eb..d4a29e39c6 100644 --- a/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs +++ b/src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs @@ -83,6 +83,8 @@ namespace Avalonia.LinuxFramebuffer public Size ScaledSize => _outputBackend.PixelSize.ToSize(Scaling); - public WindowTransparencyLevel TransparencyLevelHint { get => WindowTransparencyLevel.None; set { } } + public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { } + + public WindowTransparencyLevel TransparencyLevel { get; private set; } } } diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 5eb92a4023..e9c14274cd 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -66,8 +66,7 @@ namespace Avalonia.Win32 private OleDropTarget _dropTarget; private Size _minSize; private Size _maxSize; - private WindowImpl _parent; - private WindowTransparencyLevel _transparencyLevel = WindowTransparencyLevel.None; + private WindowImpl _parent; public WindowImpl() { @@ -210,18 +209,16 @@ namespace Avalonia.Win32 } } - public WindowTransparencyLevel TransparencyLevelHint + public WindowTransparencyLevel TransparencyLevel { get; private set; } + + public void SetTransparencyLevelHint (WindowTransparencyLevel transparencyLevel) { - get => _transparencyLevel; - set - { - var oldValue = _transparencyLevel; - _transparencyLevel = EnableBlur(value); + var level = EnableBlur(transparencyLevel); - if (oldValue != _transparencyLevel) - { - TransparencyLevelChanged?.Invoke(_transparencyLevel); - } + if (TransparencyLevel != level) + { + TransparencyLevel = level; + TransparencyLevelChanged?.Invoke(TransparencyLevel); } } @@ -281,7 +278,7 @@ namespace Avalonia.Win32 SetWindowCompositionAttribute(_hwnd, ref data); - Marshal.FreeHGlobal(accentPtr); + Marshal.FreeHGlobal(accentPtr); return transparencyLevel; }