diff --git a/samples/RenderDemo/Pages/TransitionsPage.xaml b/samples/RenderDemo/Pages/TransitionsPage.xaml
index f9f69fb341..1985074b0f 100644
--- a/samples/RenderDemo/Pages/TransitionsPage.xaml
+++ b/samples/RenderDemo/Pages/TransitionsPage.xaml
@@ -141,6 +141,39 @@
+
+
+
+
+
+
+
+
@@ -166,6 +199,9 @@
+
+
+
diff --git a/src/Avalonia.Controls/ExperimentalAcrylicBorder.cs b/src/Avalonia.Controls/ExperimentalAcrylicBorder.cs
index 0a01767a07..57861163d6 100644
--- a/src/Avalonia.Controls/ExperimentalAcrylicBorder.cs
+++ b/src/Avalonia.Controls/ExperimentalAcrylicBorder.cs
@@ -3,6 +3,7 @@ using Avalonia.Layout;
using Avalonia.Media;
using Avalonia.Platform;
using System;
+using Avalonia.Media.Immutable;
namespace Avalonia.Controls
{
@@ -90,7 +91,7 @@ namespace Avalonia.Controls
}
else
{
- _borderRenderHelper.Render(context, Bounds.Size, new Thickness(), CornerRadius, new SolidColorBrush(Material.FallbackColor), null, default);
+ _borderRenderHelper.Render(context, Bounds.Size, new Thickness(), CornerRadius, new ImmutableSolidColorBrush(Material.FallbackColor), null, default);
}
}
diff --git a/src/Avalonia.Controls/Presenters/TextPresenter.cs b/src/Avalonia.Controls/Presenters/TextPresenter.cs
index 3bec46a9ac..ff63e5644f 100644
--- a/src/Avalonia.Controls/Presenters/TextPresenter.cs
+++ b/src/Avalonia.Controls/Presenters/TextPresenter.cs
@@ -6,6 +6,7 @@ using Avalonia.Metadata;
using Avalonia.Threading;
using Avalonia.VisualTree;
using Avalonia.Layout;
+using Avalonia.Media.Immutable;
namespace Avalonia.Controls.Presenters
{
@@ -360,32 +361,31 @@ namespace Avalonia.Controls.Presenters
RenderInternal(context);
- if (selectionStart == selectionEnd)
+ if (selectionStart == selectionEnd && _caretBlink)
{
- var caretBrush = CaretBrush;
+ var caretBrush = CaretBrush?.ToImmutable();
if (caretBrush is null)
{
- var backgroundColor = (Background as SolidColorBrush)?.Color;
+ var backgroundColor = (Background as ISolidColorBrush)?.Color;
if (backgroundColor.HasValue)
{
byte red = (byte)~(backgroundColor.Value.R);
byte green = (byte)~(backgroundColor.Value.G);
byte blue = (byte)~(backgroundColor.Value.B);
- caretBrush = new SolidColorBrush(Color.FromRgb(red, green, blue));
+ caretBrush = new ImmutableSolidColorBrush(Color.FromRgb(red, green, blue));
}
else
+ {
caretBrush = Brushes.Black;
+ }
}
- if (_caretBlink)
- {
- var (p1, p2) = GetCaretPoints();
- context.DrawLine(
- new Pen(caretBrush, 1),
- p1, p2);
- }
+ var (p1, p2) = GetCaretPoints();
+ context.DrawLine(
+ new ImmutablePen(caretBrush, 1),
+ p1, p2);
}
}
diff --git a/src/Avalonia.Controls/TickBar.cs b/src/Avalonia.Controls/TickBar.cs
index 6ea5277a55..237bc2ce1d 100644
--- a/src/Avalonia.Controls/TickBar.cs
+++ b/src/Avalonia.Controls/TickBar.cs
@@ -1,6 +1,7 @@
using Avalonia.Collections;
using Avalonia.Layout;
using Avalonia.Media;
+using Avalonia.Media.Immutable;
using Avalonia.Utilities;
namespace Avalonia.Controls
@@ -295,7 +296,7 @@ namespace Avalonia.Controls
endPoint = pt;
}
- var pen = new Pen(Fill, 1.0d);
+ var pen = new ImmutablePen(Fill?.ToImmutable(), 1.0d);
// Is it Vertical?
if (Placement == TickBarPlacement.Left || Placement == TickBarPlacement.Right)
diff --git a/src/Avalonia.Controls/Utils/BorderRenderHelper.cs b/src/Avalonia.Controls/Utils/BorderRenderHelper.cs
index 3128753781..f8ab58d46e 100644
--- a/src/Avalonia.Controls/Utils/BorderRenderHelper.cs
+++ b/src/Avalonia.Controls/Utils/BorderRenderHelper.cs
@@ -1,5 +1,6 @@
using System;
using Avalonia.Media;
+using Avalonia.Media.Immutable;
using Avalonia.Platform;
using Avalonia.Utilities;
@@ -114,9 +115,9 @@ namespace Avalonia.Controls.Utils
var borderThickness = _borderThickness.Top;
IPen pen = null;
- if (borderThickness > 0)
+ if (borderBrush != null && borderThickness > 0)
{
- pen = new Pen(borderBrush, borderThickness);
+ pen = new ImmutablePen(borderBrush.ToImmutable(), borderThickness);
}
var rect = new Rect(_size);
diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs
index 63f68501a7..e4c4ca6115 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs
+++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs
@@ -26,9 +26,11 @@ namespace Avalonia.Diagnostics.ViewModels
public AvaloniaProperty Property { get; }
public override object Key => Property;
public override string Name { get; }
- public bool IsAttached => Property.IsAttached;
+ public override bool? IsAttached =>
+ Property.IsAttached;
- public string Priority => _priority;
+ public override string Priority =>
+ _priority;
public override string Type => _type;
@@ -69,7 +71,7 @@ namespace Avalonia.Diagnostics.ViewModels
if (val != null)
{
RaiseAndSetIfChanged(ref _priority, val.Priority.ToString(), nameof(Priority));
- RaiseAndSetIfChanged(ref _group, IsAttached ? "Attached Properties" : "Properties", nameof(Group));
+ RaiseAndSetIfChanged(ref _group, IsAttached == true ? "Attached Properties" : "Properties", nameof(Group));
}
else
{
diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs
index 6b2dbb7bae..65626aeea5 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs
+++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs
@@ -49,6 +49,12 @@ namespace Avalonia.Diagnostics.ViewModels
}
}
+ public override string Priority =>
+ string.Empty;
+
+ public override bool? IsAttached =>
+ default;
+
// [MemberNotNull(nameof(_type))]
public override void Update()
{
diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
index 1f7205eb16..3790951b0c 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
+++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
@@ -18,7 +18,7 @@ namespace Avalonia.Diagnostics.ViewModels
{
private readonly IVisual _control;
private readonly IDictionary