From 5704ce1a11e199bd102cb2667061df5744383f95 Mon Sep 17 00:00:00 2001 From: Christopher Blackman Date: Thu, 21 Oct 2021 20:11:17 -0400 Subject: [PATCH 01/14] Additional null checks --- .../Shadows/AttachedShadowElementContext.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs b/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs index 63afa4581e3..42e510539eb 100644 --- a/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs +++ b/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs @@ -137,10 +137,13 @@ private void Uninitialize() Parent.OnElementContextUninitialized(this); - SpriteVisual.Shadow = null; - SpriteVisual.Dispose(); + if (SpriteVisual != null) + { + SpriteVisual.Shadow = null; + SpriteVisual.Dispose(); + } - Shadow.Dispose(); + Shadow?.Dispose(); ElementCompositionPreview.SetElementChildVisual(Element, null); From fded2edffade5d25cdbd70769fbef26604870101 Mon Sep 17 00:00:00 2001 From: Christopher Blackman Date: Wed, 27 Oct 2021 11:33:19 -0400 Subject: [PATCH 02/14] Add InnerContentClipMode --- .../Enums/InnerContentClipMode.cs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs new file mode 100644 index 00000000000..35eb4c9f4d6 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.Toolkit.Uwp.UI.Media +{ + /// + /// The method that shadows deriving from use when clipping their inner content. + /// + public enum InnerContentClipMode + { + /// + /// Use to clip inner content. + /// + /// + /// This mode has better performance than . + /// + CompositionMaskBrush, + + /// + /// Use to clip inner content. + /// + /// + /// Content clipped in this mode will have smoother corners than when using . + /// + CompositionGeometricClip + } +} From 136436f4ac79c928942312171304bef3219ef3fc Mon Sep 17 00:00:00 2001 From: Christopher Blackman Date: Wed, 27 Oct 2021 19:25:36 -0400 Subject: [PATCH 03/14] Remove unused code. Add InnerContentClipMode.None. --- Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs index 35eb4c9f4d6..aa06714d1f9 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Enums/InnerContentClipMode.cs @@ -11,6 +11,11 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// public enum InnerContentClipMode { + /// + /// Do not clip inner content. + /// + None, + /// /// Use to clip inner content. /// From aa9a7aebe8c86e9043ce08730aa5d7e4161969f0 Mon Sep 17 00:00:00 2001 From: Christopher Blackman Date: Fri, 5 Nov 2021 14:43:47 -0400 Subject: [PATCH 04/14] Fix NullReferenceException --- .../Shadows/AttachedShadowElementContext.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs b/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs index 42e510539eb..3c8e5d51e87 100644 --- a/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs +++ b/Microsoft.Toolkit.Uwp.UI/Shadows/AttachedShadowElementContext.cs @@ -234,7 +234,7 @@ public T GetResource(string key) /// The resource that was removed, if any public T RemoveResource(string key) { - if (_resources.TryGetValue(key, out var objResource)) + if (_resources != null && _resources.TryGetValue(key, out var objResource)) { _resources.Remove(key); if (objResource is T resource) @@ -255,7 +255,7 @@ public T RemoveResource(string key) public T RemoveAndDisposeResource(string key) where T : IDisposable { - if (_resources.TryGetValue(key, out var objResource)) + if (_resources != null && _resources.TryGetValue(key, out var objResource)) { _resources.Remove(key); if (objResource is T resource) From 7c1da95dfeb26792d82099ccb62474ecc1d3be28 Mon Sep 17 00:00:00 2001 From: Christopher Blackman Date: Fri, 5 Nov 2021 16:43:25 -0400 Subject: [PATCH 05/14] Add InnerContentClipMode to sample --- .../SamplePages/Shadows/AttachedShadowWin2DXaml.bind | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/Shadows/AttachedShadowWin2DXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/Shadows/AttachedShadowWin2DXaml.bind index 84897111675..532452185da 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/Shadows/AttachedShadowWin2DXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/Shadows/AttachedShadowWin2DXaml.bind @@ -37,7 +37,8 @@ CornerRadius="32" Color="@[Color:Brush:Black]" Offset="@[Offset:Vector3:4,4]" - Opacity="@[Opacity:DoubleSlider:1.0:0.0-1.0]"/> + Opacity="@[Opacity:DoubleSlider:1.0:0.0-1.0]" + InnerContentClipMode="@[InnerContentClipMode:Enum:InnerContentClipMode.CompositionMaskBrush]"/>