Skip to content

Commit 2c870ee

Browse files
Rearrange elements
1 parent d90b89a commit 2c870ee

File tree

1 file changed

+109
-109
lines changed

1 file changed

+109
-109
lines changed

Microsoft.Toolkit.Uwp.UI.Media/Shadows/AttachedCardShadow.cs

Lines changed: 109 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -91,90 +91,69 @@ protected internal override void OnElementContextInitialized(AttachedShadowEleme
9191
}
9292

9393
/// <inheritdoc/>
94-
protected override void SetElementChildVisual(AttachedShadowElementContext context)
94+
protected override void OnPropertyChanged(AttachedShadowElementContext context, DependencyProperty property, object oldValue, object newValue)
9595
{
96-
if (context.TryGetResource(OpacityMaskShapeVisualSurfaceBrushResourceKey, out var opacityMask))
96+
if (property == CornerRadiusProperty)
9797
{
98-
var visualSurface = context.GetResource(OpacityMaskVisualSurfaceResourceKey) ??
99-
context.AddResource(OpacityMaskVisualSurfaceResourceKey, context.Compositor.CreateVisualSurface());
100-
visualSurface.SourceVisual = context.SpriteVisual;
101-
context.SpriteVisual.RelativeSizeAdjustment = Vector2.Zero;
102-
context.SpriteVisual.Size = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight);
103-
visualSurface.SourceOffset = new Vector2(-MaxBlurRadius);
104-
visualSurface.SourceSize = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight) + new Vector2(MaxBlurRadius * 2);
105-
106-
var surfaceBrush = context.GetResource(OpacityMaskSurfaceBrushResourceKey) ??
107-
context.AddResource(OpacityMaskSurfaceBrushResourceKey, context.Compositor.CreateSurfaceBrush());
108-
surfaceBrush.Surface = visualSurface;
109-
surfaceBrush.Stretch = CompositionStretch.None;
110-
111-
CompositionMaskBrush maskBrush = context.GetResource(OpacityMaskBrushResourceKey) ??
112-
context.AddResource(OpacityMaskBrushResourceKey, context.Compositor.CreateMaskBrush());
113-
maskBrush.Source = surfaceBrush;
114-
maskBrush.Mask = opacityMask;
98+
UpdateShadowClip(context);
99+
UpdateVisualOpacityMask(context);
115100

116-
var visual = context.GetResource(OpacityMaskVisualResourceKey) ??
117-
context.AddResource(OpacityMaskVisualResourceKey, context.Compositor.CreateSpriteVisual());
118-
visual.RelativeSizeAdjustment = Vector2.One;
119-
visual.Offset = new Vector3(-MaxBlurRadius, -MaxBlurRadius, 0);
120-
visual.Size = new Vector2(MaxBlurRadius * 2);
121-
visual.Brush = maskBrush;
122-
ElementCompositionPreview.SetElementChildVisual(context.Element, visual);
101+
var geometry = context.GetResource(RoundedRectangleGeometryResourceKey);
102+
if (geometry != null)
103+
{
104+
geometry.CornerRadius = new Vector2((float)(double)newValue);
105+
}
106+
}
107+
else if (property == InnerContentClipModeProperty)
108+
{
109+
UpdateShadowClip(context);
110+
UpdateVisualOpacityMask(context);
111+
SetElementChildVisual(context);
123112
}
124113
else
125114
{
126-
base.SetElementChildVisual(context);
127-
context.RemoveAndDisposeResource(OpacityMaskVisualSurfaceResourceKey);
128-
context.RemoveAndDisposeResource(OpacityMaskSurfaceBrushResourceKey);
129-
context.RemoveAndDisposeResource(OpacityMaskVisualResourceKey);
130-
context.RemoveAndDisposeResource(OpacityMaskBrushResourceKey);
115+
base.OnPropertyChanged(context, property, oldValue, newValue);
131116
}
117+
118+
base.OnPropertyChanged(context, property, oldValue, newValue);
132119
}
133120

134-
/// <summary>
135-
/// Updates the <see cref="CompositionBrush"/> used to mask <paramref name="context"/>.<see cref="AttachedShadowElementContext.SpriteVisual">SpriteVisual</see>.
136-
/// </summary>
137-
/// <param name="context">The <see cref="AttachedShadowElementContext"/> whose <see cref="SpriteVisual"/> will be masked.</param>
138-
private void UpdateVisualOpacityMask(AttachedShadowElementContext context)
121+
/// <inheritdoc/>
122+
protected override CompositionBrush GetShadowMask(AttachedShadowElementContext context)
139123
{
140-
if (InnerContentClipMode != InnerContentClipMode.CompositionMaskBrush)
124+
if (!SupportsCompositionVisualSurface)
141125
{
142-
context.RemoveAndDisposeResource(OpacityMaskShapeVisualResourceKey);
143-
context.RemoveAndDisposeResource(OpacityMaskGeometryResourceKey);
144-
context.RemoveAndDisposeResource(OpacityMaskSpriteShapeResourceKey);
145-
context.RemoveAndDisposeResource(OpacityMaskShapeVisualSurfaceResourceKey);
146-
context.RemoveAndDisposeResource(OpacityMaskShapeVisualSurfaceBrushResourceKey);
147-
return;
126+
return null;
148127
}
149128

150-
var shapeVisual = context.GetResource(OpacityMaskShapeVisualResourceKey) ??
151-
context.AddResource(OpacityMaskShapeVisualResourceKey, context.Compositor.CreateShapeVisual());
152-
153-
CompositionRoundedRectangleGeometry geom = context.GetResource(OpacityMaskGeometryResourceKey) ??
154-
context.AddResource(OpacityMaskGeometryResourceKey, context.Compositor.CreateRoundedRectangleGeometry());
155-
CompositionSpriteShape shape = context.GetResource(OpacityMaskSpriteShapeResourceKey) ??
156-
context.AddResource(OpacityMaskSpriteShapeResourceKey, context.Compositor.CreateSpriteShape(geom));
129+
// Create rounded rectangle geometry and add it to a shape
130+
var geometry = context.GetResource(RoundedRectangleGeometryResourceKey) ?? context.AddResource(
131+
RoundedRectangleGeometryResourceKey,
132+
context.Compositor.CreateRoundedRectangleGeometry());
133+
geometry.CornerRadius = new Vector2((float)CornerRadius);
157134

158-
geom.Offset = new Vector2(MaxBlurRadius / 2);
159-
geom.CornerRadius = new Vector2((MaxBlurRadius / 2) + (float)CornerRadius);
160-
shape.StrokeThickness = MaxBlurRadius;
161-
shape.StrokeBrush = shape.StrokeBrush ?? context.Compositor.CreateColorBrush(Colors.Black);
135+
var shape = context.GetResource(ShapeResourceKey) ?? context.AddResource(ShapeResourceKey, context.Compositor.CreateSpriteShape(geometry));
136+
shape.FillBrush = context.Compositor.CreateColorBrush(Colors.Black);
162137

163-
if (!shapeVisual.Shapes.Contains(shape))
164-
{
165-
shapeVisual.Shapes.Add(shape);
166-
}
138+
// Create a ShapeVisual so that our geometry can be rendered to a visual
139+
var shapeVisual = context.GetResource(ShapeVisualResourceKey) ??
140+
context.AddResource(ShapeVisualResourceKey, context.Compositor.CreateShapeVisual());
141+
shapeVisual.Shapes.Add(shape);
167142

168-
var visualSurface = context.GetResource(OpacityMaskShapeVisualSurfaceResourceKey) ??
169-
context.AddResource(OpacityMaskShapeVisualSurfaceResourceKey, context.Compositor.CreateVisualSurface());
143+
// Create a CompositionVisualSurface, which renders our ShapeVisual to a texture
144+
var visualSurface = context.GetResource(VisualSurfaceResourceKey) ??
145+
context.AddResource(VisualSurfaceResourceKey, context.Compositor.CreateVisualSurface());
170146
visualSurface.SourceVisual = shapeVisual;
171147

172-
geom.Size = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight) + new Vector2(MaxBlurRadius);
173-
shapeVisual.Size = visualSurface.SourceSize = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight) + new Vector2(MaxBlurRadius * 2);
148+
// Create a CompositionSurfaceBrush to render our CompositionVisualSurface to a brush.
149+
// Now we have a rounded rectangle brush that can be used on as the mask for our shadow.
150+
var surfaceBrush = context.GetResource(SurfaceBrushResourceKey) ?? context.AddResource(
151+
SurfaceBrushResourceKey,
152+
context.Compositor.CreateSurfaceBrush(visualSurface));
174153

175-
var surfaceBrush = context.GetResource(OpacityMaskShapeVisualSurfaceBrushResourceKey) ??
176-
context.AddResource(OpacityMaskShapeVisualSurfaceBrushResourceKey, context.Compositor.CreateSurfaceBrush());
177-
surfaceBrush.Surface = visualSurface;
154+
geometry.Size = visualSurface.SourceSize = shapeVisual.Size = context.Element.RenderSize.ToVector2();
155+
156+
return surfaceBrush;
178157
}
179158

180159
/// <inheritdoc/>
@@ -217,70 +196,91 @@ protected override CompositionClip GetShadowClip(AttachedShadowElementContext co
217196
return clip;
218197
}
219198

220-
/// <inheritdoc/>
221-
protected override CompositionBrush GetShadowMask(AttachedShadowElementContext context)
199+
/// <summary>
200+
/// Updates the <see cref="CompositionBrush"/> used to mask <paramref name="context"/>.<see cref="AttachedShadowElementContext.SpriteVisual">SpriteVisual</see>.
201+
/// </summary>
202+
/// <param name="context">The <see cref="AttachedShadowElementContext"/> whose <see cref="SpriteVisual"/> will be masked.</param>
203+
private void UpdateVisualOpacityMask(AttachedShadowElementContext context)
222204
{
223-
if (!SupportsCompositionVisualSurface)
205+
if (InnerContentClipMode != InnerContentClipMode.CompositionMaskBrush)
224206
{
225-
return null;
207+
context.RemoveAndDisposeResource(OpacityMaskShapeVisualResourceKey);
208+
context.RemoveAndDisposeResource(OpacityMaskGeometryResourceKey);
209+
context.RemoveAndDisposeResource(OpacityMaskSpriteShapeResourceKey);
210+
context.RemoveAndDisposeResource(OpacityMaskShapeVisualSurfaceResourceKey);
211+
context.RemoveAndDisposeResource(OpacityMaskShapeVisualSurfaceBrushResourceKey);
212+
return;
226213
}
227214

228-
// Create rounded rectangle geometry and add it to a shape
229-
var geometry = context.GetResource(RoundedRectangleGeometryResourceKey) ?? context.AddResource(
230-
RoundedRectangleGeometryResourceKey,
231-
context.Compositor.CreateRoundedRectangleGeometry());
232-
geometry.CornerRadius = new Vector2((float)CornerRadius);
215+
var shapeVisual = context.GetResource(OpacityMaskShapeVisualResourceKey) ??
216+
context.AddResource(OpacityMaskShapeVisualResourceKey, context.Compositor.CreateShapeVisual());
233217

234-
var shape = context.GetResource(ShapeResourceKey) ?? context.AddResource(ShapeResourceKey, context.Compositor.CreateSpriteShape(geometry));
235-
shape.FillBrush = context.Compositor.CreateColorBrush(Colors.Black);
218+
CompositionRoundedRectangleGeometry geom = context.GetResource(OpacityMaskGeometryResourceKey) ??
219+
context.AddResource(OpacityMaskGeometryResourceKey, context.Compositor.CreateRoundedRectangleGeometry());
220+
CompositionSpriteShape shape = context.GetResource(OpacityMaskSpriteShapeResourceKey) ??
221+
context.AddResource(OpacityMaskSpriteShapeResourceKey, context.Compositor.CreateSpriteShape(geom));
236222

237-
// Create a ShapeVisual so that our geometry can be rendered to a visual
238-
var shapeVisual = context.GetResource(ShapeVisualResourceKey) ??
239-
context.AddResource(ShapeVisualResourceKey, context.Compositor.CreateShapeVisual());
240-
shapeVisual.Shapes.Add(shape);
223+
geom.Offset = new Vector2(MaxBlurRadius / 2);
224+
geom.CornerRadius = new Vector2((MaxBlurRadius / 2) + (float)CornerRadius);
225+
shape.StrokeThickness = MaxBlurRadius;
226+
shape.StrokeBrush = shape.StrokeBrush ?? context.Compositor.CreateColorBrush(Colors.Black);
241227

242-
// Create a CompositionVisualSurface, which renders our ShapeVisual to a texture
243-
var visualSurface = context.GetResource(VisualSurfaceResourceKey) ??
244-
context.AddResource(VisualSurfaceResourceKey, context.Compositor.CreateVisualSurface());
245-
visualSurface.SourceVisual = shapeVisual;
228+
if (!shapeVisual.Shapes.Contains(shape))
229+
{
230+
shapeVisual.Shapes.Add(shape);
231+
}
246232

247-
// Create a CompositionSurfaceBrush to render our CompositionVisualSurface to a brush.
248-
// Now we have a rounded rectangle brush that can be used on as the mask for our shadow.
249-
var surfaceBrush = context.GetResource(SurfaceBrushResourceKey) ?? context.AddResource(
250-
SurfaceBrushResourceKey,
251-
context.Compositor.CreateSurfaceBrush(visualSurface));
233+
var visualSurface = context.GetResource(OpacityMaskShapeVisualSurfaceResourceKey) ??
234+
context.AddResource(OpacityMaskShapeVisualSurfaceResourceKey, context.Compositor.CreateVisualSurface());
235+
visualSurface.SourceVisual = shapeVisual;
252236

253-
geometry.Size = visualSurface.SourceSize = shapeVisual.Size = context.Element.RenderSize.ToVector2();
237+
geom.Size = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight) + new Vector2(MaxBlurRadius);
238+
shapeVisual.Size = visualSurface.SourceSize = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight) + new Vector2(MaxBlurRadius * 2);
254239

255-
return surfaceBrush;
240+
var surfaceBrush = context.GetResource(OpacityMaskShapeVisualSurfaceBrushResourceKey) ??
241+
context.AddResource(OpacityMaskShapeVisualSurfaceBrushResourceKey, context.Compositor.CreateSurfaceBrush());
242+
surfaceBrush.Surface = visualSurface;
256243
}
257244

258245
/// <inheritdoc/>
259-
protected override void OnPropertyChanged(AttachedShadowElementContext context, DependencyProperty property, object oldValue, object newValue)
246+
protected override void SetElementChildVisual(AttachedShadowElementContext context)
260247
{
261-
if (property == CornerRadiusProperty)
248+
if (context.TryGetResource(OpacityMaskShapeVisualSurfaceBrushResourceKey, out var opacityMask))
262249
{
263-
UpdateShadowClip(context);
264-
UpdateVisualOpacityMask(context);
250+
var visualSurface = context.GetResource(OpacityMaskVisualSurfaceResourceKey) ??
251+
context.AddResource(OpacityMaskVisualSurfaceResourceKey, context.Compositor.CreateVisualSurface());
252+
visualSurface.SourceVisual = context.SpriteVisual;
253+
context.SpriteVisual.RelativeSizeAdjustment = Vector2.Zero;
254+
context.SpriteVisual.Size = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight);
255+
visualSurface.SourceOffset = new Vector2(-MaxBlurRadius);
256+
visualSurface.SourceSize = new Vector2((float)context.Element.ActualWidth, (float)context.Element.ActualHeight) + new Vector2(MaxBlurRadius * 2);
265257

266-
var geometry = context.GetResource(RoundedRectangleGeometryResourceKey);
267-
if (geometry != null)
268-
{
269-
geometry.CornerRadius = new Vector2((float)(double)newValue);
270-
}
271-
}
272-
else if (property == InnerContentClipModeProperty)
273-
{
274-
UpdateShadowClip(context);
275-
UpdateVisualOpacityMask(context);
276-
SetElementChildVisual(context);
258+
var surfaceBrush = context.GetResource(OpacityMaskSurfaceBrushResourceKey) ??
259+
context.AddResource(OpacityMaskSurfaceBrushResourceKey, context.Compositor.CreateSurfaceBrush());
260+
surfaceBrush.Surface = visualSurface;
261+
surfaceBrush.Stretch = CompositionStretch.None;
262+
263+
CompositionMaskBrush maskBrush = context.GetResource(OpacityMaskBrushResourceKey) ??
264+
context.AddResource(OpacityMaskBrushResourceKey, context.Compositor.CreateMaskBrush());
265+
maskBrush.Source = surfaceBrush;
266+
maskBrush.Mask = opacityMask;
267+
268+
var visual = context.GetResource(OpacityMaskVisualResourceKey) ??
269+
context.AddResource(OpacityMaskVisualResourceKey, context.Compositor.CreateSpriteVisual());
270+
visual.RelativeSizeAdjustment = Vector2.One;
271+
visual.Offset = new Vector3(-MaxBlurRadius, -MaxBlurRadius, 0);
272+
visual.Size = new Vector2(MaxBlurRadius * 2);
273+
visual.Brush = maskBrush;
274+
ElementCompositionPreview.SetElementChildVisual(context.Element, visual);
277275
}
278276
else
279277
{
280-
base.OnPropertyChanged(context, property, oldValue, newValue);
278+
base.SetElementChildVisual(context);
279+
context.RemoveAndDisposeResource(OpacityMaskVisualSurfaceResourceKey);
280+
context.RemoveAndDisposeResource(OpacityMaskSurfaceBrushResourceKey);
281+
context.RemoveAndDisposeResource(OpacityMaskVisualResourceKey);
282+
context.RemoveAndDisposeResource(OpacityMaskBrushResourceKey);
281283
}
282-
283-
base.OnPropertyChanged(context, property, oldValue, newValue);
284284
}
285285

286286
/// <inheritdoc />

0 commit comments

Comments
 (0)