Browse Source

WIP: update backends

transparency-hints-list
Max Katz 3 years ago
parent
commit
b80f63b7ad
  1. 141
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs
  2. 2
      src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs
  3. 2
      src/Avalonia.DesignerSupport/Remote/Stubs.cs
  4. 2
      src/Avalonia.Native/WindowImplBase.cs
  5. 2
      src/Avalonia.X11/X11Window.cs
  6. 14
      src/Browser/Avalonia.Browser/BrowserTopLevelImpl.cs
  7. 5
      src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs
  8. 2
      src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs
  9. 2
      src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs
  10. 2
      src/Windows/Avalonia.Win32/WindowImpl.cs
  11. 2
      src/iOS/Avalonia.iOS/AvaloniaView.cs
  12. 2
      tests/Avalonia.UnitTests/CompositorTestServices.cs

141
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@ -299,87 +299,98 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public double Scaling => RenderScaling;
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)
{
if (TransparencyLevel != transparencyLevel)
foreach (var transparencyLevel in transparencyLevels)
{
bool isBelowR = Build.VERSION.SdkInt < BuildVersionCodes.R;
bool isAboveR = Build.VERSION.SdkInt > BuildVersionCodes.R;
if (_view.Context is AvaloniaMainActivity activity)
if (TransparencyLevel != transparencyLevel)
{
switch (transparencyLevel)
bool isBelowR = Build.VERSION.SdkInt < BuildVersionCodes.R;
bool isAboveR = Build.VERSION.SdkInt > BuildVersionCodes.R;
if (_view.Context is AvaloniaMainActivity activity)
{
case WindowTransparencyLevel.AcrylicBlur:
case WindowTransparencyLevel.ForceAcrylicBlur:
case WindowTransparencyLevel.Mica:
case WindowTransparencyLevel.None:
if (!isBelowR)
{
activity.SetTranslucent(false);
}
if (isAboveR)
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
switch (transparencyLevel)
{
case WindowTransparencyLevel.AcrylicBlur:
case WindowTransparencyLevel.ForceAcrylicBlur:
case WindowTransparencyLevel.Mica:
case WindowTransparencyLevel.None:
if (!isBelowR)
{
attr.BlurBehindRadius = 0;
activity.SetTranslucent(false);
}
if (isAboveR)
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
activity.Window.Attributes = attr;
var attr = activity.Window?.Attributes;
if (attr != null)
{
attr.BlurBehindRadius = 0;
activity.Window.Attributes = attr;
}
}
}
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.White));
if(transparencyLevel != WindowTransparencyLevel.None)
{
return;
}
break;
case WindowTransparencyLevel.Transparent:
if (!isBelowR)
{
activity.SetTranslucent(true);
}
if (isAboveR)
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.White));
if (transparencyLevel != WindowTransparencyLevel.None)
{
attr.BlurBehindRadius = 0;
return;
}
activity.Window.Attributes = attr;
break;
case WindowTransparencyLevel.Transparent:
if (!isBelowR)
{
activity.SetTranslucent(true);
}
}
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));
break;
case WindowTransparencyLevel.Blur:
if (isAboveR)
{
activity.SetTranslucent(true);
activity.Window?.AddFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
if (isAboveR)
{
attr.BlurBehindRadius = 120;
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
{
attr.BlurBehindRadius = 0;
activity.Window.Attributes = attr;
activity.Window.Attributes = attr;
}
}
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));
}
else
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.White));
break;
case WindowTransparencyLevel.Blur:
if (isAboveR)
{
activity.SetTranslucent(true);
activity.Window?.AddFlags(WindowManagerFlags.BlurBehind);
var attr = activity.Window?.Attributes;
if (attr != null)
{
attr.BlurBehindRadius = 120;
activity.Window.Attributes = attr;
}
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));
}
else
{
activity.Window?.ClearFlags(WindowManagerFlags.BlurBehind);
activity.Window.SetBackgroundDrawable(new ColorDrawable(Color.White));
return;
}
break;
}
return;
}
break;
TransparencyLevel = transparencyLevel;
}
TransparencyLevel = transparencyLevel;
}
}
}

2
src/Avalonia.Controls/Embedding/Offscreen/OffscreenTopLevelImpl.cs

@ -89,7 +89,7 @@ namespace Avalonia.Controls.Embedding.Offscreen
public Action? LostFocus { get; set; }
public abstract IMouseDevice MouseDevice { get; }
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels) { }
public WindowTransparencyLevel TransparencyLevel { get; private set; }

2
src/Avalonia.DesignerSupport/Remote/Stubs.cs

@ -179,7 +179,7 @@ namespace Avalonia.DesignerSupport.Remote
public Action GotInputWhenDisabled { get; set; }
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels) { }
public void SetWindowManagerAddShadowHint(bool enabled)
{

2
src/Avalonia.Native/WindowImplBase.cs

@ -485,7 +485,7 @@ namespace Avalonia.Native
_native?.BeginDragAndDropOperation(effects, point, clipboard, callback, sourceHandle);
}
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)
{
if (TransparencyLevel != transparencyLevel)
{

2
src/Avalonia.X11/X11Window.cs

@ -1307,7 +1307,7 @@ namespace Avalonia.X11
public IPopupPositioner? PopupPositioner { get; }
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) =>
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels) =>
_transparencyHelper?.SetTransparencyRequest(transparencyLevel);
public void SetWindowManagerAddShadowHint(bool enabled)

14
src/Browser/Avalonia.Browser/BrowserTopLevelImpl.cs

@ -223,12 +223,18 @@ namespace Avalonia.Browser
return null;
}
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)
{
if (transparencyLevel == WindowTransparencyLevel.None
|| transparencyLevel == WindowTransparencyLevel.Transparent)
foreach (var transparencyLevel in transparencyLevels)
{
TransparencyLevel = transparencyLevel;
// Browser view is always transparent, so we don't need to change anything, but accept new value.
if (TransparencyLevel != transparencyLevel
&& (transparencyLevel == WindowTransparencyLevel.Transparent
|| transparencyLevel == WindowTransparencyLevel.None))
{
TransparencyLevel = transparencyLevel;
TransparencyLevelChanged?.Invoke(transparencyLevel);
}
}
}

5
src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs

@ -337,10 +337,7 @@ namespace Avalonia.Headless
}
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
{
}
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels) { }
public void SetParent(IWindowImpl parent)
{

2
src/Linux/Avalonia.LinuxFramebuffer/FramebufferToplevelImpl.cs

@ -75,7 +75,7 @@ using Avalonia.Rendering.Composition;
public Size ScaledSize => _outputBackend.PixelSize.ToSize(RenderScaling);
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels) { }
public WindowTransparencyLevel TransparencyLevel { get; private set; }

2
src/Windows/Avalonia.Win32.Interop/Wpf/WpfTopLevelImpl.cs

@ -247,7 +247,7 @@ namespace Avalonia.Win32.Interop.Wpf
public IPopupImpl CreatePopup() => null;
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel) { }
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels) { }
public WindowTransparencyLevel TransparencyLevel { get; private set; }

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

@ -346,7 +346,7 @@ namespace Avalonia.Win32
return null;
}
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)
{
TransparencyLevel = EnableBlur(transparencyLevel);
}

2
src/iOS/Avalonia.iOS/AvaloniaView.cs

@ -139,7 +139,7 @@ namespace Avalonia.iOS
return null;
}
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)
{
// No-op
}

2
tests/Avalonia.UnitTests/CompositorTestServices.cs

@ -192,7 +192,7 @@ public class CompositorTestServices : IDisposable
public IMouseDevice MouseDevice { get; } = new MouseDevice();
public IPopupImpl CreatePopup() => throw new NotImplementedException();
public void SetTransparencyLevelHint(WindowTransparencyLevel transparencyLevel)
public void SetTransparencyLevelHint(IReadOnlyList<WindowTransparencyLevel> transparencyLevels)
{
}

Loading…
Cancel
Save