private static void PropagateLayer(VisualNode node, SceneLayer layer, SceneLayer oldLayer) { node.LayerRoot = layer.LayerRoot; layer.Dirty.Add(node.Bounds); oldLayer.Dirty.Add(node.Bounds); foreach (VisualNode child in node.Children) { // If the child is not the start of a new layer, recurse. if (child.LayerRoot != child.Visual) { PropagateLayer(child, layer, oldLayer); } } }
private static void UpdateLayer(VisualNode node, SceneLayer layer) { layer.Opacity = node.Visual.Opacity; if (node.Visual.OpacityMask != null) { layer.OpacityMask = node.Visual.OpacityMask?.ToImmutable(); layer.OpacityMaskRect = node.ClipBounds; } else { layer.OpacityMask = null; layer.OpacityMaskRect = Rect.Empty; } layer.GeometryClip = node.HasAncestorGeometryClip ? CreateLayerGeometryClip(node) : null; }