private static IDisposable AssignAndObservePlaceholderBrush(Compositor compositor, BrushSetterHandler brushSetter) { var disposables = new CompositeDisposable(); var compositionBrush = compositor.CreateColorBrush(SolidColorBrushHelper.Transparent.Color); brushSetter(compositionBrush); return(disposables); }
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); }
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); }
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); }
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)); } }