Exemple #1
0
        private static IDisposable AssignAndObservePlaceholderBrush(Compositor compositor, BrushSetterHandler brushSetter)
        {
            var disposables = new CompositeDisposable();

            var compositionBrush = compositor.CreateColorBrush(SolidColorBrushHelper.Transparent.Color);

            brushSetter(compositionBrush);

            return(disposables);
        }
Exemple #2
0
        private static IDisposable AssignAndObserveXamlCompositionBrush(XamlCompositionBrushBase brush, Compositor compositor, BrushSetterHandler brushSetter)
        {
            var disposables = new CompositeDisposable();

            var compositionBrush = brush.CompositionBrush;

            //brush.RegisterDisposablePropertyChangedCallback(
            //	XamlCompositionBrushBase.CompositionBrushProperty,
            //	(s, e) => brushSetter(((CompositionBrush)e.NewValue))
            //)
            //.DisposeWith(disposables);

            brushSetter(compositionBrush);

            return(disposables);
        }
Exemple #3
0
        private static IDisposable AssignAndObserveGradientBrush(GradientBrush gradientBrush, Compositor compositor, BrushSetterHandler brushSetter)
        {
            var disposables = new CompositeDisposable();

            var compositionBrush = CreateCompositionGradientBrush(gradientBrush, compositor);

            if (gradientBrush is LinearGradientBrush linearGradient)
            {
                var clgb = (CompositionLinearGradientBrush)compositionBrush;

                gradientBrush.RegisterDisposablePropertyChangedCallback(
                    LinearGradientBrush.StartPointProperty,
                    (s, e) => clgb.StartPoint = (Vector2)e.NewValue
                    )
                .DisposeWith(disposables);

                gradientBrush.RegisterDisposablePropertyChangedCallback(
                    LinearGradientBrush.EndPointProperty,
                    (s, e) => clgb.EndPoint = (Vector2)e.NewValue
                    )
                .DisposeWith(disposables);
            }

            gradientBrush.RegisterDisposablePropertyChangedCallback(
                GradientBrush.GradientStopsProperty,
                (s, e) => ConvertGradientColorStops(
                    compositionBrush.Compositor,
                    compositionBrush,
                    (GradientStopCollection)e.NewValue,
                    ((GradientBrush)s).Opacity)
                )
            .DisposeWith(disposables);

            gradientBrush.RegisterDisposablePropertyChangedCallback(
                GradientBrush.MappingModeProperty,
                (s, e) => compositionBrush.MappingMode = (CompositionMappingMode)e.NewValue
                )
            .DisposeWith(disposables);

            gradientBrush.RegisterDisposablePropertyChangedCallback(
                GradientBrush.OpacityProperty,
                (s, e) => ConvertGradientColorStops(
                    compositionBrush.Compositor,
                    compositionBrush,
                    ((GradientBrush)s).GradientStops,
                    (double)e.NewValue)
                )
            .DisposeWith(disposables);

            gradientBrush.RegisterDisposablePropertyChangedCallback(
                GradientBrush.SpreadMethodProperty,
                (s, e) => compositionBrush.ExtendMode = ConvertGradientExtendMode((GradientSpreadMethod)e.NewValue)
                )
            .DisposeWith(disposables);

            gradientBrush.RegisterDisposablePropertyChangedCallback(
                GradientBrush.RelativeTransformProperty,
                (s, e) => compositionBrush.RelativeTransformMatrix = ((Transform)e.NewValue)?.MatrixCore ?? Matrix3x2.Identity
                )
            .DisposeWith(disposables);

            brushSetter(compositionBrush);

            return(disposables);
        }
Exemple #4
0
        private static IDisposable AssignAndObserveAcrylicBrush(AcrylicBrush acrylicBrush, Compositor compositor, BrushSetterHandler brushSetter)
        {
            var disposables = new CompositeDisposable();

            var compositionBrush = compositor.CreateColorBrush(acrylicBrush.FallbackColorWithOpacity);

            acrylicBrush.RegisterDisposablePropertyChangedCallback(
                AcrylicBrush.FallbackColorProperty,
                (s, colorArg) => compositionBrush.Color = acrylicBrush.FallbackColorWithOpacity
                )
            .DisposeWith(disposables);

            acrylicBrush.RegisterDisposablePropertyChangedCallback(
                AcrylicBrush.OpacityProperty,
                (s, colorArg) => compositionBrush.Color = acrylicBrush.FallbackColorWithOpacity
                )
            .DisposeWith(disposables);

            brushSetter(compositionBrush);

            return(disposables);
        }
Exemple #5
0
        internal static IDisposable AssignAndObserveBrush(Brush brush, Compositor compositor, BrushSetterHandler brushSetter, Action imageBrushCallback = null)
        {
            if (brush == null)
            {
                brushSetter(null);

                return(null);
            }

            if (brush is SolidColorBrush colorBrush)
            {
                return(AssignAndObserveSolidColorBrush(colorBrush, compositor, brushSetter));
            }
            else if (brush is GradientBrush gradientBrush)
            {
                return(AssignAndObserveGradientBrush(gradientBrush, compositor, brushSetter));
            }
            //else if (b is ImageBrush imageBrush)
            //{
            //	Action<_Image> action = _ => colorSetter(SolidColorBrushHelper.Transparent.Color);

            //	imageBrush.ImageChanged += action;

            //	disposables.Add(() => imageBrush.ImageChanged -= action);
            //}
            else if (brush is AcrylicBrush acrylicBrush)
            {
                return(AssignAndObserveAcrylicBrush(acrylicBrush, compositor, brushSetter));
            }
            else if (brush is XamlCompositionBrushBase xamlCompositionBrushBase)
            {
                return(AssignAndObserveXamlCompositionBrush(xamlCompositionBrushBase, compositor, brushSetter));
            }
            else
            {
                return(AssignAndObservePlaceholderBrush(compositor, brushSetter));
            }
        }