From 65f9fe67f7ce6d0f075ef3ef60d0389c623636ed Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 10 Mar 2017 00:24:44 +0100 Subject: [PATCH] Added a set of immutable brushes. Make `SolidColorBrush` immutable, but make the static `Brushes` properties return immutable brushes. The immutable brushes will be needed by the deferred renderer. --- .../Accents/BaseLight.xaml | 1 - src/Avalonia.Visuals/Avalonia.Visuals.csproj | 9 +- src/Avalonia.Visuals/Media/Brush.cs | 3 +- src/Avalonia.Visuals/Media/Brushes.cs | 566 +++++++++--------- src/Avalonia.Visuals/Media/IMutableBrush.cs | 16 + .../Media/Immutable/ImmutableGradientBrush.cs | 47 ++ .../Media/Immutable/ImmutableImageBrush.cs | 58 ++ .../Immutable/ImmutableLinearGradientBrush.cs | 51 ++ .../Immutable/ImmutableRadialGradientBrush.cs | 59 ++ .../Immutable/ImmutableSolidColorBrush.cs | 59 ++ .../Media/Immutable/ImmutableTileBrush.cs | 77 +++ .../Media/Immutable/ImmutableVisualBrush.cs | 58 ++ .../Media/Mutable/SolidColorBrush.cs | 35 -- src/Avalonia.Visuals/Media/SolidColorBrush.cs | 36 +- .../Properties/AssemblyInfo.cs | 3 +- .../Avalonia.Cairo/Media/DrawingContext.cs | 2 +- .../Media/SolidColorBrushImpl.cs | 2 +- .../Xaml/Style2.xaml | 9 +- .../Xaml/StyleTests.cs | 20 +- 19 files changed, 762 insertions(+), 349 deletions(-) create mode 100644 src/Avalonia.Visuals/Media/IMutableBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableGradientBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableImageBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableLinearGradientBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableRadialGradientBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableTileBrush.cs create mode 100644 src/Avalonia.Visuals/Media/Immutable/ImmutableVisualBrush.cs delete mode 100644 src/Avalonia.Visuals/Media/Mutable/SolidColorBrush.cs diff --git a/src/Avalonia.Themes.Default/Accents/BaseLight.xaml b/src/Avalonia.Themes.Default/Accents/BaseLight.xaml index 38786f54d3..cb86598a42 100644 --- a/src/Avalonia.Themes.Default/Accents/BaseLight.xaml +++ b/src/Avalonia.Themes.Default/Accents/BaseLight.xaml @@ -1,6 +1,5 @@ \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs index 308a65dcd4..dc15074445 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs @@ -124,13 +124,12 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml { var xaml = @" @@ -139,12 +138,12 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml var loader = new AvaloniaXamlLoader(); var window = (Window)loader.Load(xaml); - var brush = (Avalonia.Media.Mutable.SolidColorBrush)window.FindStyleResource("brush"); + var brush = (ISolidColorBrush)window.FindStyleResource("brush"); var button = window.FindControl