Ejemplo n.º 1
0
        private static PipelineBuilder Start(IPipelineEffect effect)
        {
            switch (effect)
            {
            case BackdropEffect backdrop when backdrop.Source == AcrylicBackgroundSource.Backdrop:
                return(PipelineBuilder.FromBackdrop());

            case BackdropEffect backdrop when backdrop.Source == AcrylicBackgroundSource.HostBackdrop:
                return(PipelineBuilder.FromHostBackdrop());

            case SolidColorEffect color:
                return(PipelineBuilder.FromColor(color.Color));

            case ImageEffect image:
                return(PipelineBuilder.FromImage(image.Uri, image.DpiMode, image.CacheMode));

            case TileEffect tile:
                return(PipelineBuilder.FromTiles(tile.Uri, tile.DpiMode, tile.CacheMode));

            case AcrylicEffect acrylic when acrylic.Source == AcrylicBackgroundSource.Backdrop:
                return(PipelineBuilder.FromBackdropAcrylic(acrylic.Tint, (float)acrylic.TintMix, (float)acrylic.BlurAmount, acrylic.TextureUri));

            case AcrylicEffect acrylic when acrylic.Source == AcrylicBackgroundSource.HostBackdrop:
                return(PipelineBuilder.FromHostBackdropAcrylic(acrylic.Tint, (float)acrylic.TintMix, acrylic.TextureUri));

            default:
                throw new ArgumentException($"Invalid initial pipeline effect: {effect.GetType()}");
            }
        }
 /// <inheritdoc/>
 protected override object ProvideValue()
 {
     return(BackgroundSource switch
     {
         AcrylicBackgroundSource.Backdrop => PipelineBuilder.FromBackdropAcrylic(this.TintColor, (float)this.TintOpacity, (float)BlurAmount, TextureUri),
         AcrylicBackgroundSource.HostBackdrop => PipelineBuilder.FromHostBackdropAcrylic(this.TintColor, (float)this.TintOpacity, TextureUri),
         _ => throw new ArgumentException($"Invalid source mode for acrylic effect: {BackgroundSource}")
     });
Ejemplo n.º 3
0
        /// <inheritdoc/>
        protected override PipelineBuilder OnBrushRequested()
        {
            switch (Source)
            {
            case AcrylicBackgroundSource.Backdrop: return(PipelineBuilder.FromBackdropAcrylic(Tint, (float)TintMix, (float)BlurAmount, TextureUri));

            case AcrylicBackgroundSource.HostBackdrop: return(PipelineBuilder.FromHostBackdropAcrylic(Tint, (float)TintMix, TextureUri));

            default: throw new ArgumentOutOfRangeException(nameof(Source), $"Invalid acrylic source: {Source}");
            }
        }
Ejemplo n.º 4
0
        /// <inheritdoc/>
        protected override PipelineBuilder OnBrushRequested()
        {
            // Starts a new composition pipeline from the given effect
            PipelineBuilder Start(IPipelineEffect effect)
            {
                switch (effect)
                {
                case BackdropEffect backdrop when backdrop.Source == AcrylicBackgroundSource.Backdrop:
                    return(PipelineBuilder.FromBackdropBrush());

                case BackdropEffect backdrop when backdrop.Source == AcrylicBackgroundSource.HostBackdrop:
                    return(PipelineBuilder.FromHostBackdropBrush());

                case SolidColorEffect color: return(PipelineBuilder.FromColor(color.Color));

                case ImageEffect image: return(PipelineBuilder.FromImage(image.Uri, image.DPIMode, image.CacheMode));

                case TileEffect tile: return(PipelineBuilder.FromTiles(tile.Uri, tile.DPIMode, tile.CacheMode));

                case AcrylicEffect acrylic:
                    switch (acrylic.Source)
                    {
                    case AcrylicBackgroundSource.Backdrop: return(PipelineBuilder.FromBackdropAcrylic(acrylic.Tint, (float)acrylic.TintMix, (float)acrylic.BlurAmount, acrylic.TextureUri));

                    case AcrylicBackgroundSource.HostBackdrop: return(PipelineBuilder.FromHostBackdropAcrylic(acrylic.Tint, (float)acrylic.TintMix, acrylic.TextureUri));

                    default: throw new ArgumentOutOfRangeException(nameof(acrylic.Source), $"Invalid acrylic source: {acrylic.Source}");
                    }

                default: throw new ArgumentException($"Invalid initial pipeline effect: {effect.GetType()}");
                }
            }

            // Appends an effect to an existing composition pipeline
            PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder builder)
            {
                switch (effect)
                {
                case OpacityEffect opacity: return(builder.Opacity((float)opacity.Value));

                case LuminanceEffect _: return(builder.Effect(source => new LuminanceToAlphaEffect {
                        Source = source
                    }));

                case TintEffect tint: return(builder.Tint(tint.Color, (float)tint.Opacity));

                case BlurEffect blur: return(builder.Blur((float)blur.Value));

                case SaturationEffect saturation: return(builder.Saturation((float)saturation.Value));

                case BlendEffect blend: return(builder.Blend(Build(blend.Input), blend.Mode, blend.Placement));

                default: throw new ArgumentException($"Invalid pipeline effect: {effect.GetType()}");
                }
            }

            // Builds a new effects pipeline from the input effects sequence
            PipelineBuilder Build(IList <IPipelineEffect> effects)
            {
                if (effects.Count == 0)
                {
                    throw new ArgumentException("An effects pipeline can't be empty");
                }
                return(effects.Skip(1).Aggregate(Start(effects[0]), (b, e) => Append(e, b)));
            }

            return(Build(Effects));
        }