@@ -27,31 +27,27 @@ namespace CommunityToolkit.Labs.WinUI;
2727/// A generic shimmer control that can be used to construct a beautiful loading effect.
2828/// </summary>
2929[ TemplatePart ( Name = PART_Shape , Type = typeof ( Rectangle ) ) ]
30- #pragma warning disable CA1001 // Types that own disposable fields should be disposable
3130public partial class Shimmer : Control
32- #pragma warning restore CA1001 // Types that own disposable fields should be disposable
3331{
3432 private const float InitialStartPointX = - 7.92f ;
3533 private const string PART_Shape = "Shape" ;
3634
37- private Vector2Node _sizeAnimation ;
38- private Vector2KeyFrameAnimation _gradientStartPointAnimation ;
39- private Vector2KeyFrameAnimation _gradientEndPointAnimation ;
40- private CompositionColorGradientStop _gradientStop1 ;
41- private CompositionColorGradientStop _gradientStop2 ;
42- private CompositionColorGradientStop _gradientStop3 ;
43- private CompositionColorGradientStop _gradientStop4 ;
44- private CompositionRoundedRectangleGeometry _rectangleGeometry ;
45- private ShapeVisual _shapeVisual ;
46- private CompositionLinearGradientBrush _shimmerMaskGradient ;
35+ private Vector2Node ? _sizeAnimation ;
36+ private Vector2KeyFrameAnimation ? _gradientStartPointAnimation ;
37+ private Vector2KeyFrameAnimation ? _gradientEndPointAnimation ;
38+ private CompositionColorGradientStop ? _gradientStop1 ;
39+ private CompositionColorGradientStop ? _gradientStop2 ;
40+ private CompositionColorGradientStop ? _gradientStop3 ;
41+ private CompositionColorGradientStop ? _gradientStop4 ;
42+ private CompositionRoundedRectangleGeometry ? _rectangleGeometry ;
43+ private ShapeVisual ? _shapeVisual ;
44+ private CompositionLinearGradientBrush ? _shimmerMaskGradient ;
4745 private Border ? _shape ;
4846
4947 private bool _initialized ;
5048 private bool _animationStarted ;
5149
52- #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
5350 public Shimmer ( )
54- #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
5551 {
5652 DefaultStyleKey = typeof ( Shimmer ) ;
5753 Loaded += OnLoaded ;
@@ -88,13 +84,14 @@ private void OnUnloaded(object sender, RoutedEventArgs e)
8884 {
8985 ElementCompositionPreview . SetElementChildVisual ( _shape , null ) ;
9086
91- _rectangleGeometry . Dispose ( ) ;
92- _shapeVisual . Dispose ( ) ;
93- _shimmerMaskGradient . Dispose ( ) ;
94- _gradientStop1 . Dispose ( ) ;
95- _gradientStop2 . Dispose ( ) ;
96- _gradientStop3 . Dispose ( ) ;
97- _gradientStop4 . Dispose ( ) ;
87+
88+ _rectangleGeometry ! . Dispose ( ) ;
89+ _shapeVisual ! . Dispose ( ) ;
90+ _shimmerMaskGradient ! . Dispose ( ) ;
91+ _gradientStop1 ! . Dispose ( ) ;
92+ _gradientStop2 ! . Dispose ( ) ;
93+ _gradientStop3 ! . Dispose ( ) ;
94+ _gradientStop4 ! . Dispose ( ) ;
9895
9996 _initialized = false ;
10097 }
@@ -145,13 +142,13 @@ private bool TryInitializationResource()
145142
146143 private void SetGradientAndStops ( )
147144 {
148- _shimmerMaskGradient . StartPoint = new Vector2 ( InitialStartPointX , 0.0f ) ;
145+ _shimmerMaskGradient ! . StartPoint = new Vector2 ( InitialStartPointX , 0.0f ) ;
149146 _shimmerMaskGradient . EndPoint = new Vector2 ( 0.0f , 1.0f ) ; //Vector2.One
150147
151- _gradientStop1 . Offset = 0.273f ;
152- _gradientStop2 . Offset = 0.436f ;
153- _gradientStop3 . Offset = 0.482f ;
154- _gradientStop4 . Offset = 0.643f ;
148+ _gradientStop1 ! . Offset = 0.273f ;
149+ _gradientStop2 ! . Offset = 0.436f ;
150+ _gradientStop3 ! . Offset = 0.482f ;
151+ _gradientStop4 ! . Offset = 0.643f ;
155152
156153 _shimmerMaskGradient . ColorStops . Add ( _gradientStop1 ) ;
157154 _shimmerMaskGradient . ColorStops . Add ( _gradientStop2 ) ;
@@ -165,16 +162,16 @@ private void SetGradientStopColorsByTheme()
165162 {
166163 case ElementTheme . Default :
167164 case ElementTheme . Dark :
168- _gradientStop1 . Color = Color . FromArgb ( ( byte ) ( 255 * 3.26 / 100 ) , 255 , 255 , 255 ) ;
169- _gradientStop2 . Color = Color . FromArgb ( ( byte ) ( 255 * 6.05 / 100 ) , 255 , 255 , 255 ) ;
170- _gradientStop3 . Color = Color . FromArgb ( ( byte ) ( 255 * 6.05 / 100 ) , 255 , 255 , 255 ) ;
171- _gradientStop4 . Color = Color . FromArgb ( ( byte ) ( 255 * 3.26 / 100 ) , 255 , 255 , 255 ) ;
165+ _gradientStop1 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 3.26 / 100 ) , 255 , 255 , 255 ) ;
166+ _gradientStop2 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 6.05 / 100 ) , 255 , 255 , 255 ) ;
167+ _gradientStop3 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 6.05 / 100 ) , 255 , 255 , 255 ) ;
168+ _gradientStop4 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 3.26 / 100 ) , 255 , 255 , 255 ) ;
172169 break ;
173170 case ElementTheme . Light :
174- _gradientStop1 . Color = Color . FromArgb ( ( byte ) ( 255 * 5.37 / 100 ) , 0 , 0 , 0 ) ;
175- _gradientStop2 . Color = Color . FromArgb ( ( byte ) ( 255 * 2.89 / 100 ) , 0 , 0 , 0 ) ;
176- _gradientStop3 . Color = Color . FromArgb ( ( byte ) ( 255 * 2.89 / 100 ) , 0 , 0 , 0 ) ;
177- _gradientStop4 . Color = Color . FromArgb ( ( byte ) ( 255 * 5.37 / 100 ) , 0 , 0 , 0 ) ;
171+ _gradientStop1 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 5.37 / 100 ) , 0 , 0 , 0 ) ;
172+ _gradientStop2 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 2.89 / 100 ) , 0 , 0 , 0 ) ;
173+ _gradientStop3 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 2.89 / 100 ) , 0 , 0 , 0 ) ;
174+ _gradientStop4 ! . Color = Color . FromArgb ( ( byte ) ( 255 * 5.37 / 100 ) , 0 , 0 , 0 ) ;
178175 break ;
179176 }
180177 }
@@ -196,7 +193,7 @@ private void TryStartAnimation()
196193 _gradientStartPointAnimation . IterationBehavior = AnimationIterationBehavior . Forever ;
197194 _gradientStartPointAnimation . InsertKeyFrame ( 0.0f , new Vector2 ( InitialStartPointX , 0.0f ) ) ;
198195 _gradientStartPointAnimation . InsertKeyFrame ( 1.0f , Vector2 . Zero ) ;
199- _shimmerMaskGradient . StartAnimation ( nameof ( CompositionLinearGradientBrush . StartPoint ) , _gradientStartPointAnimation ) ;
196+ _shimmerMaskGradient ! . StartAnimation ( nameof ( CompositionLinearGradientBrush . StartPoint ) , _gradientStartPointAnimation ) ;
200197
201198 _gradientEndPointAnimation = rootVisual . Compositor . CreateVector2KeyFrameAnimation ( ) ;
202199 _gradientEndPointAnimation . Duration = Duration ;
@@ -215,14 +212,14 @@ private void StopAnimation()
215212 return ;
216213 }
217214
218- _shapeVisual . StopAnimation ( nameof ( ShapeVisual . Size ) ) ;
219- _rectangleGeometry . StopAnimation ( nameof ( CompositionRoundedRectangleGeometry . Size ) ) ;
220- _shimmerMaskGradient . StopAnimation ( nameof ( CompositionLinearGradientBrush . StartPoint ) ) ;
215+ _shapeVisual ! . StopAnimation ( nameof ( ShapeVisual . Size ) ) ;
216+ _rectangleGeometry ! . StopAnimation ( nameof ( CompositionRoundedRectangleGeometry . Size ) ) ;
217+ _shimmerMaskGradient ! . StopAnimation ( nameof ( CompositionLinearGradientBrush . StartPoint ) ) ;
221218 _shimmerMaskGradient . StopAnimation ( nameof ( CompositionLinearGradientBrush . EndPoint ) ) ;
222219
223- _sizeAnimation . Dispose ( ) ;
224- _gradientStartPointAnimation . Dispose ( ) ;
225- _gradientEndPointAnimation . Dispose ( ) ;
220+ _sizeAnimation ! . Dispose ( ) ;
221+ _gradientStartPointAnimation ! . Dispose ( ) ;
222+ _gradientEndPointAnimation ! . Dispose ( ) ;
226223 _animationStarted = false ;
227224 }
228225}
0 commit comments