public UniversalElement(object sender)
        {
            Element = sender as FrameworkElement;

            ElementVisual = ElementCompositionPreview.GetElementVisual(Element);

            Masker = CompositionMaskFactory.GetCompositionMaskGenerator(Compositor);

        }
        private async void BusyIndicator_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
            generator = CompositionMaskFactory.GetCompositionMaskGenerator(compositor);

            container = compositor.CreateContainerVisual();
            container.Size = new Vector2(60, 60);
            container.Offset = new Vector3(-30, -30, 0);

            float size = 30;

            var color = Color.FromArgb(255, 0xD2, 0x42, 0x29);

            ellipse_0 = await CreateEllipseVisual(color, size, size);
            ellipse_1 = await CreateEllipseVisual(color, size, size);
            ellipse_2 = await CreateEllipseVisual(color, size, size);
            ellipse_3 = await CreateEllipseVisual(color, size, size);

            container.Children.InsertAtBottom(ellipse_0);
            container.Children.InsertAtBottom(ellipse_1);
            container.Children.InsertAtBottom(ellipse_2);
            container.Children.InsertAtBottom(ellipse_3);

            ElementCompositionPreview.SetElementChildVisual(this, container);

            animations.Add(AnimateScale(ellipse_0));
            animations.Add(AnimateScale(ellipse_1, true));
            animations.Add(AnimateScale(ellipse_2));
            animations.Add(AnimateScale(ellipse_3, true));

            animations.Add(AnimateRotation(ellipse_0, 0));
            animations.Add(AnimateRotation(ellipse_1, 0.25f * (float)Math.PI));
            animations.Add(AnimateRotation(ellipse_2, 0.5f * (float)Math.PI));
            animations.Add(AnimateRotation(ellipse_3, 0.75f * (float)Math.PI));

            IsReady = true;
        }
        private async void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            _compositor    = ElementCompositionPreview.GetElementVisual(this).Compositor;
            _generator     = CompositionMaskFactory.GetCompositionMaskGenerator(_compositor);
            _backdropBrush = _compositor.CreateBackdropBrush();

            //Create the visual
            _visual        = _compositor.CreateSpriteVisual();
            _visual.Size   = new Vector2(400, 400);
            _visual.Offset = new Vector3(200, 0, 0);
            // Create the combined geometry
            var ellipse1 = CanvasGeometry.CreateEllipse(_generator.Device, 200, 200, 150, 75);
            var ellipse2 = CanvasGeometry.CreateEllipse(_generator.Device, 200, 200, 75, 150);

            _combinedGeometry = ellipse1.CombineWith(ellipse2, Matrix3x2.Identity, CanvasGeometryCombine.Union);
            // Create the CompositionMask
            _compositionMask = await _generator.CreateMaskAsync(_visual.Size.ToSize(), _combinedGeometry);

            // Create SurfaceBrush from CompositionMask
            var mask    = _compositor.CreateSurfaceBrush(_compositionMask.Surface);
            var source1 = _compositor.CreateColorBrush(Colors.Blue);
            // Create mask brush
            var maskBrush = _compositor.CreateMaskBrush();

            maskBrush.Mask   = mask;
            maskBrush.Source = source1;

            _visual.Brush = maskBrush;

            ElementCompositionPreview.SetElementChildVisual(CanvasCtrl, _visual);

            var container = _compositor.CreateContainerVisual();

            container.Size = new Vector2(1000, 1000);
            // Background visual
            var bgVisual = _compositor.CreateSpriteVisual();

            bgVisual.Size   = new Vector2(200, 200);
            bgVisual.Offset = new Vector3(300, 100, 0);
            bgVisual.Brush  = source1;
            container.Children.InsertAtTop(bgVisual);

            // Animated Visual
            _animatedVisual        = _compositor.CreateSpriteVisual();
            _animatedVisual.Size   = new Vector2(400, 400);
            _animatedVisual.Offset = new Vector3(200, 0, 0);
            // Create the Excluded geometry
            _outerGeometry = CanvasGeometry.CreateRectangle(_generator.Device, 0, 0, 400, 400);
            var excludedGeometry = _outerGeometry.CombineWith(_combinedGeometry, Matrix3x2.Identity,
                                                              CanvasGeometryCombine.Exclude);

            // Create the CompositionMask
            _animatedCompositionMask = await _generator.CreateMaskAsync(_animatedVisual.Size.ToSize(), excludedGeometry);

            //// Create SurfaceBrush from CompositionMask
            //var animatedMask = _compositor.CreateSurfaceBrush(_animatedCompositionMask.Surface);
            //var source2 = _compositor.CreateColorBrush(Colors.Red);
            //// Create mask brush
            //var animatedMaskBrush = _compositor.CreateMaskBrush();
            //animatedMaskBrush.Mask = animatedMask;
            //animatedMaskBrush.Source = source2;

            _animatedVisual.Brush = _compositor.CreateMaskedBackdropBrush(_animatedCompositionMask, Color.FromArgb(240, 232, 232, 232), 20f, _backdropBrush);
            container.Children.InsertAtTop(_animatedVisual);

            ElementCompositionPreview.SetElementChildVisual(AnimatedCanvasCtrl, container);
        }