Pārlūkot izejas kodu

Merge pull request #9469 from AvaloniaUI/fixes/window-border-for-opaque-windows

[OSX] Use non-opaque window background for non-transparent windows
Dan Walmsley 3 gadi atpakaļ
vecāks
revīzija
e67bb01c5f

+ 0 - 2
native/Avalonia.Native/src/OSX/AvnWindow.mm

@@ -171,9 +171,7 @@
     _closed = false;
     _closed = false;
     _isEnabled = true;
     _isEnabled = true;
 
 
-    [self backingScaleFactor];
     [self setOpaque:NO];
     [self setOpaque:NO];
-    [self setBackgroundColor: [NSColor clearColor]];
 
 
     _isExtended = false;
     _isExtended = false;
     _isTransitioningToFullScreen = false;
     _isTransitioningToFullScreen = false;

+ 1 - 1
native/Avalonia.Native/src/OSX/WindowBaseImpl.h

@@ -90,7 +90,7 @@ BEGIN_INTERFACE_MAP()
 
 
     virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost **retOut) override;
     virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost **retOut) override;
 
 
-    virtual HRESULT SetBlurEnabled(bool enable) override;
+    virtual HRESULT SetTransparencyMode(AvnWindowTransparencyMode mode) override;
 
 
     virtual HRESULT BeginDragAndDropOperation(AvnDragDropEffects effects, AvnPoint point,
     virtual HRESULT BeginDragAndDropOperation(AvnDragDropEffects effects, AvnPoint point,
             IAvnClipboard *clipboard, IAvnDndResultCallback *cb,
             IAvnClipboard *clipboard, IAvnDndResultCallback *cb,

+ 3 - 2
native/Avalonia.Native/src/OSX/WindowBaseImpl.mm

@@ -489,10 +489,11 @@ HRESULT WindowBaseImpl::CreateNativeControlHost(IAvnNativeControlHost **retOut)
     return S_OK;
     return S_OK;
 }
 }
 
 
-HRESULT WindowBaseImpl::SetBlurEnabled(bool enable) {
+HRESULT WindowBaseImpl::SetTransparencyMode(AvnWindowTransparencyMode mode) {
     START_COM_CALL;
     START_COM_CALL;
 
 
-    [StandardContainer ShowBlur:enable];
+    [Window setBackgroundColor: (mode != Transparent ? [NSColor windowBackgroundColor] : [NSColor clearColor])];
+    [StandardContainer ShowBlur: mode == Blur];
 
 
     return S_OK;
     return S_OK;
 }
 }

+ 7 - 9
src/Avalonia.Native/WindowImplBase.cs

@@ -501,19 +501,17 @@ namespace Avalonia.Native
         {
         {
             if (TransparencyLevel != transparencyLevel)
             if (TransparencyLevel != transparencyLevel)
             {
             {
-                if (transparencyLevel >= WindowTransparencyLevel.Blur)
-                {
+                if (transparencyLevel > WindowTransparencyLevel.Transparent)
                     transparencyLevel = WindowTransparencyLevel.AcrylicBlur;
                     transparencyLevel = WindowTransparencyLevel.AcrylicBlur;
-                }
-
-                if(transparencyLevel == WindowTransparencyLevel.None)
-                {
-                    transparencyLevel = WindowTransparencyLevel.Transparent;
-                }
 
 
                 TransparencyLevel = transparencyLevel;
                 TransparencyLevel = transparencyLevel;
 
 
-                _native?.SetBlurEnabled((TransparencyLevel >= WindowTransparencyLevel.Blur).AsComBool());
+                _native.SetTransparencyMode(transparencyLevel == WindowTransparencyLevel.None
+                    ? AvnWindowTransparencyMode.Opaque 
+                    : transparencyLevel == WindowTransparencyLevel.Transparent 
+                        ? AvnWindowTransparencyMode.Transparent
+                        : AvnWindowTransparencyMode.Blur);
+
                 TransparencyLevelChanged?.Invoke(TransparencyLevel);
                 TransparencyLevelChanged?.Invoke(TransparencyLevel);
             }
             }
         }
         }

+ 8 - 1
src/Avalonia.Native/avn.idl

@@ -466,6 +466,13 @@ enum AvnAutomationControlType
     AutomationSeparator,
     AutomationSeparator,
 }
 }
 
 
+enum AvnWindowTransparencyMode
+{
+    Opaque,
+    Transparent,
+    Blur
+}
+
 [uuid(809c652e-7396-11d2-9771-00a0c9b4d50c)]
 [uuid(809c652e-7396-11d2-9771-00a0c9b4d50c)]
 interface IAvaloniaNativeFactory : IUnknown
 interface IAvaloniaNativeFactory : IUnknown
 {
 {
@@ -527,7 +534,7 @@ interface IAvnWindowBase : IUnknown
      HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut);
      HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut);
      HRESULT BeginDragAndDropOperation(AvnDragDropEffects effects, AvnPoint point,
      HRESULT BeginDragAndDropOperation(AvnDragDropEffects effects, AvnPoint point,
                                               IAvnClipboard* clipboard, IAvnDndResultCallback* cb, [intptr]void* sourceHandle);
                                               IAvnClipboard* clipboard, IAvnDndResultCallback* cb, [intptr]void* sourceHandle);
-     HRESULT SetBlurEnabled(bool enable);
+     HRESULT SetTransparencyMode(AvnWindowTransparencyMode mode);
 }
 }
 
 
 [uuid(83e588f3-6981-4e48-9ea0-e1e569f79a91), cpp-virtual-inherits]
 [uuid(83e588f3-6981-4e48-9ea0-e1e569f79a91), cpp-virtual-inherits]