Browse Source

tweak acrylic

feature/acrylic-brush-investigation
Dan Walmsley 6 years ago
parent
commit
ca359a6ec2
  1. 13
      samples/ControlCatalog/MainWindow.xaml
  2. 1
      src/Avalonia.Visuals/Media/IGradientBrush.cs
  3. 13
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs

13
samples/ControlCatalog/MainWindow.xaml

@ -13,13 +13,14 @@
x:Name="MainWindow"
x:Class="ControlCatalog.MainWindow" WindowState="{Binding WindowState, Mode=TwoWay}" Background="{x:Null}">
<Panel DockPanel.Dock="Left" Width="400" Height="400" Background="Green">
<Panel DockPanel.Dock="Left" Width="400" Height="400" Background="Red">
<Button Content="{Binding Test}" Background="Red" FontSize="55" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Panel>
<Panel.Background>
<AcrylicBrush TintColor="Black" BackgroundSource="BackDrop" TintOpacity="0.0" TintLuminosityOpacity="0.4" />
</Panel.Background>
</Panel>
<Border CornerRadius="30">
<Border.Background>
<AcrylicBrush TintColor="#222222" BackgroundSource="None" TintOpacity="1" TintLuminosityOpacity="1" />
</Border.Background>
</Border>
</Panel>
</Window>

1
src/Avalonia.Visuals/Media/IGradientBrush.cs

@ -4,6 +4,7 @@ namespace Avalonia.Media
{
public enum AcrylicBackgroundSource
{
None,
HostBackDrop,
BackDrop
}

13
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -283,6 +283,10 @@ namespace Avalonia.Skia
}
Canvas.Clear();
Canvas.Restore();
}
else if(acrylicBrush.BackgroundSource == AcrylicBackgroundSource.None)
{
}
else
{
@ -798,7 +802,7 @@ namespace Avalonia.Skia
if (brush is IAcrylicBrush acrylicBrush)
{
var tintOpacity = acrylicBrush.TintOpacity;
var noiseOpcity = 0.08;
var noiseOpcity = 0.045;
var excl = new SKColor(255, 255, 255, (byte)(255 * acrylicBrush.TintLuminosityOpacity));
var tint = new SKColor(acrylicBrush.TintColor.R, acrylicBrush.TintColor.G, acrylicBrush.TintColor.B, (byte)(255 * tintOpacity));
@ -808,13 +812,16 @@ namespace Avalonia.Skia
var tintShader = SKShader.CreateColor(tint);
var noiseShader =
//SKShader.CreatePerlinNoiseImprovedNoise(0.5f, 0.5f, 4, 0)
SKShader.CreatePerlinNoiseImprovedNoise(1.8f, 1.8f, 2, 0.76829314f)
SKShader.CreatePerlinNoiseTurbulence(12.876f, 12.876f, 2, 0.76829314f)
.WithColorFilter(CreateAlphaColorFilter(noiseOpcity));
var compose = SKShader.CreateCompose(tintShader, noiseShader);
paint.Shader = compose;
paint.ImageFilter = SKImageFilter.CreateBlur(2.4f, 2.4f);
if (acrylicBrush.BackgroundSource == AcrylicBackgroundSource.BackDrop)
{
paint.ImageFilter = SKImageFilter.CreateBlur(2.4f, 2.4f);
}
return paintWrapper;
}

Loading…
Cancel
Save