From d18b5b2764acc6af15d196c80728a1e6b8ce2cbd Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 23 May 2020 12:28:45 +0200 Subject: [PATCH 01/21] Code refactoring --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 1 - .../Effects/Abstract/ImageEffectBase.cs | 1 - .../Effects/Abstract/ValueEffectBase.cs | 2 -- Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs | 2 -- Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs | 2 -- .../Effects/Interfaces/IPipelineEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs | 2 -- .../Effects/LuminanceToAlphaEffect.cs | 2 -- Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs | 1 - 14 files changed, 1 insertion(+), 19 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index d9a0b6d8846..ada1c74438f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -9,7 +9,6 @@ using Microsoft.Graphics.Canvas.Effects; using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Effects; -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; using BlendEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.BlendEffect; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs index 2934d4e23a5..581ba24ea6b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System; -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs index 5e912a8c86b..464a5bf94fb 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; - namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs index 13c6208518d..d04abf2ccd8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System; -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; using Windows.UI; using Windows.UI.Xaml.Media; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs index 5b20e450dcb..17823192f59 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 611aae4a5e5..45cccb5a7c7 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System.Collections.Generic; -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs index 2b1a246b6e5..9f20166c74a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; - namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs index ed90a0b87b8..97e6b9e8b67 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; - namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs index 015355a22b8..90f4d1590ae 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs @@ -2,7 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// /// The base for all the pipeline effects to be used in a diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs index b5f5565c79f..186e074a7a2 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; - namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs index 82f3547e816..b82a1b857b8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; - namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs index b2659b27719..fbe14169541 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs index b0f90ae2989..49c6cda0ca6 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs index bc248f82890..154ae9c765b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects From 7c36d479e2fe9afd20b9cbc9d6856ace0de0bede Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 23 May 2020 12:51:10 +0200 Subject: [PATCH 02/21] Code refactoring to Win2D effect mappings --- .../Brushes/PipelineBrush.cs | 112 ++---------------- .../Effects/Abstract/ImageEffectBase.cs | 6 +- .../Effects/Abstract/ValueEffectBase.cs | 5 + .../Effects/AcrylicEffect.cs | 14 ++- .../Effects/BackdropEffect.cs | 15 ++- .../Effects/BlendEffect.cs | 28 ++++- .../Effects/BlurEffect.cs | 6 + .../Effects/ExposureEffect.cs | 6 + .../Effects/GrayscaleEffect.cs | 7 ++ .../Effects/HueRotationEffect.cs | 8 ++ .../Effects/ImageEffect.cs | 6 + .../Effects/Interfaces/IPipelineEffect.cs | 10 +- .../Effects/Interfaces/IPipelineInput.cs | 20 ++++ .../Effects/InvertEffect.cs | 7 ++ .../Effects/LuminanceToAlphaEffect.cs | 7 ++ .../Effects/OpacityEffect.cs | 6 + .../Effects/SaturationEffect.cs | 6 + .../Effects/SepiaEffect.cs | 6 + .../Effects/ShadeEffect.cs | 9 +- .../Effects/SolidColorEffect.cs | 9 +- .../Effects/TemperatureAndTintEffect.cs | 7 ++ .../Effects/TileEffect.cs | 6 + .../Effects/TintEffect.cs | 7 ++ .../Pipelines/PipelineBuilder.Merge.cs | 13 +- 24 files changed, 207 insertions(+), 119 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineInput.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index ada1c74438f..677f0337675 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -2,27 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; using System.Collections.Generic; -using System.Diagnostics.Contracts; -using System.Linq; -using Microsoft.Graphics.Canvas.Effects; using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Effects; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; -using BlendEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.BlendEffect; -using ExposureEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.ExposureEffect; -using GrayscaleEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.GrayscaleEffect; -using HueRotationEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.HueRotationEffect; -using InvertEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.InvertEffect; -using LuminanceToAlphaEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.LuminanceToAlphaEffect; -using OpacityEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.OpacityEffect; -using SaturationEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.SaturationEffect; -using SepiaEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.SepiaEffect; -using TemperatureAndTintEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TemperatureAndTintEffect; -using TileEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TileEffect; -using TintEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TintEffect; namespace Microsoft.Toolkit.Uwp.UI.Media { @@ -32,100 +16,26 @@ namespace Microsoft.Toolkit.Uwp.UI.Media public sealed class PipelineBrush : XamlCompositionEffectBrushBase { /// - /// Builds a new effects pipeline from the input effects sequence + /// Gets or sets the input for the current pipeline /// - /// The input collection of instance - /// A new instance with the items in - [Pure] - private static PipelineBuilder Build(IList 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)); - } + public IPipelineInput Input { get; set; } /// - /// Starts a new composition pipeline from the given effect + /// Gets or sets the collection of effects to use in the current pipeline /// - /// The initial instance - /// A new instance starting from - [Pure] - 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()}"); - } - } + public IList Effects { get; set; } = new List(); - /// - /// Appends an effect to an existing composition pipeline - /// - /// The instance to append to the current pipeline - /// The target instance to modify - /// The target instance in use - private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder builder) + /// + protected override PipelineBuilder OnBrushRequested() { - switch (effect) + PipelineBuilder builder = Input.StartPipeline(); + + foreach (IPipelineEffect effect in Effects) { - case OpacityEffect opacity: - return builder.Opacity((float)opacity.Value); - case LuminanceToAlphaEffect _: - return builder.LuminanceToAlpha(); - case InvertEffect _: - return builder.Invert(); - case GrayscaleEffect _: - return builder.Grayscale(); - case ExposureEffect exposure: - return builder.Exposure((float)exposure.Value); - case SepiaEffect sepia: - return builder.Sepia((float)sepia.Value); - case ShadeEffect shade: - return builder.Shade(shade.Color, (float)shade.Intensity); - case HueRotationEffect hueRotation: - return builder.HueRotation((float)hueRotation.Angle); - case TintEffect tint: - return builder.Tint(tint.Color); - case TemperatureAndTintEffect temperatureAndTint: - return builder.TemperatureAndTint((float)temperatureAndTint.Temperature, (float)temperatureAndTint.Tint); - 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), (BlendEffectMode)blend.Mode, blend.Placement); - default: - throw new ArgumentException($"Invalid pipeline effect: {effect.GetType()}"); + builder = effect.AppendToPipeline(builder); } - } - /// - protected override PipelineBuilder OnBrushRequested() - { - return Build(this.Effects); + return builder; } - - /// - /// Gets or sets the collection of effects to use in the current pipeline - /// - public IList Effects { get; set; } = new List(); } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs index 581ba24ea6b..92594201794 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs @@ -3,13 +3,14 @@ // See the LICENSE file in the project root for more information. using System; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract { /// /// An image based effect that loads an image at the specified location /// - public abstract class ImageEffectBase : IPipelineEffect + public abstract class ImageEffectBase : IPipelineInput { /// /// Gets or sets the for the image to load @@ -25,5 +26,8 @@ public abstract class ImageEffectBase : IPipelineEffect /// Gets or sets the cache mode to use when loading the image (the default is ) /// public CacheMode CacheMode { get; set; } = CacheMode.Default; + + /// + public abstract PipelineBuilder StartPipeline(); } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs index 464a5bf94fb..8e2902bb6c0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs @@ -2,6 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract { /// @@ -13,5 +15,8 @@ public abstract class ValueEffectBase : IPipelineEffect /// Gets or sets the value of the parameter for the current effect /// public double Value { get; set; } + + /// + public abstract PipelineBuilder AppendToPipeline(PipelineBuilder builder); } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs index d04abf2ccd8..4c10d537964 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; using Windows.UI.Xaml.Media; @@ -12,7 +13,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A custom acrylic effect that can be inserted into a pipeline /// /// This effect mirrors the look of the default implementation - public sealed class AcrylicEffect : IPipelineEffect + public sealed class AcrylicEffect : IPipelineInput { /// /// Gets or sets the source mode for the effect @@ -39,5 +40,16 @@ public sealed class AcrylicEffect : IPipelineEffect /// Gets or sets the to the texture to use /// public Uri TextureUri { get; set; } + + /// + public PipelineBuilder StartPipeline() + { + return Source switch + { + AcrylicBackgroundSource.Backdrop => PipelineBuilder.FromBackdropAcrylic(Tint, (float)TintMix, (float)BlurAmount, TextureUri), + AcrylicBackgroundSource.HostBackdrop => PipelineBuilder.FromHostBackdropAcrylic(Tint, (float)TintMix, TextureUri), + _ => throw new ArgumentException($"Invalid source mode for acrylic effect: {Source}") + }; + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs index 17823192f59..e56a621b7cc 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs @@ -2,6 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects @@ -9,11 +11,22 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A backdrop effect that can sample from a specified source /// - public sealed class BackdropEffect : IPipelineEffect + public sealed class BackdropEffect : IPipelineInput { /// /// Gets or sets the backdrop source to use to render the effect /// public AcrylicBackgroundSource Source { get; set; } + + /// + public PipelineBuilder StartPipeline() + { + return Source switch + { + AcrylicBackgroundSource.Backdrop => PipelineBuilder.FromBackdrop(), + AcrylicBackgroundSource.HostBackdrop => PipelineBuilder.FromHostBackdrop(), + _ => throw new ArgumentException($"Invalid source for backdrop effect: {Source}") + }; + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 45cccb5a7c7..a31a23f6c31 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -3,19 +3,26 @@ // See the LICENSE file in the project root for more information. using System.Collections.Generic; +using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// A blend effect that merges the current pipeline with an input one + /// A blend effect that merges the current builder with an input one /// /// This effect maps to the Win2D effect public sealed class BlendEffect : IPipelineEffect { /// - /// Gets or sets the input pipeline to merge with the current instance + /// Gets or sets the input to merge with the current instance /// - public IList Input { get; set; } = new List(); + public IPipelineInput Input { get; set; } + + /// + /// Gets or sets the effects to apply to the input to merge with the current instance + /// + public List InputEffects { get; set; } = new List(); /// /// Gets or sets the blending mode to use (the default mode is ) @@ -23,8 +30,21 @@ public sealed class BlendEffect : IPipelineEffect public ImageBlendMode Mode { get; set; } /// - /// Gets or sets the placement of the input pipeline with respect to the current one (the default is ) + /// Gets or sets the placement of the input builder with respect to the current one (the default is ) /// public Placement Placement { get; set; } = Placement.Foreground; + + /// + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + PipelineBuilder inputPipeline = Input.StartPipeline(); + + foreach (IPipelineEffect effect in InputEffects) + { + inputPipeline = effect.AppendToPipeline(inputPipeline); + } + + return builder.Blend(inputPipeline, (BlendEffectMode)Mode, Placement); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs index 3164f245e88..7123ad76aaf 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -12,5 +13,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class BlurEffect : ValueEffectBase { + /// + public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Blur((float)Value); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs index e038c63cd4c..2beda216f8d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -12,5 +13,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class ExposureEffect : ValueEffectBase { + /// + public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Exposure((float)Value); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs index 9f20166c74a..5e2070d148b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs @@ -2,6 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// @@ -10,5 +12,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class GrayscaleEffect : IPipelineEffect { + /// + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Grayscale(); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs index 97e6b9e8b67..bf76744f3b4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs @@ -2,6 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// @@ -14,5 +16,11 @@ public sealed class HueRotationEffect : IPipelineEffect /// Gets or sets the angle to rotate the hue, in radians /// public double Angle { get; set; } + + /// + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.HueRotation((float)Angle); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs index d95dc44b93d..bf000e3c2b2 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -11,5 +12,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// public sealed class ImageEffect : ImageEffectBase { + /// + public override PipelineBuilder StartPipeline() + { + return PipelineBuilder.FromImage(Uri, DpiMode, CacheMode); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs index 90f4d1590ae..24a867442c3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs @@ -2,12 +2,20 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// The base for all the pipeline effects to be used in a + /// The base for all the builder effects to be used in a /// public interface IPipelineEffect { + /// + /// Appends the current effect to the input instance. + /// + /// The source instance to add the effect to. + /// A new with the new effects added to it. + PipelineBuilder AppendToPipeline(PipelineBuilder builder); } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineInput.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineInput.cs new file mode 100644 index 00000000000..6603779c50f --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineInput.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// The base for all the pipeline inputs to be used in a . + /// + public interface IPipelineInput + { + /// + /// Creates a new instance from the current input. + /// + /// A new starting from the current input. + PipelineBuilder StartPipeline(); + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs index 186e074a7a2..04c0fcd9bb8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs @@ -2,6 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// @@ -10,5 +12,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class InvertEffect : IPipelineEffect { + /// + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Invert(); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs index b82a1b857b8..527b55840e0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs @@ -2,6 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// @@ -10,5 +12,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class LuminanceToAlphaEffect : IPipelineEffect { + /// + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.LuminanceToAlpha(); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs index 7b86916f90d..29072fa759a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -12,5 +13,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class OpacityEffect : ValueEffectBase { + /// + public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Opacity((float)Value); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs index 9b30e0a4041..a5337ef499c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -12,5 +13,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class SaturationEffect : ValueEffectBase { + /// + public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Saturation((float)Value); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs index baf9e816d25..b9e87e63880 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -12,5 +13,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class SepiaEffect : ValueEffectBase { + /// + public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Sepia((float)Value); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs index fbe14169541..d4575d226b8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs @@ -2,12 +2,13 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// An effect that overlays a color layer over the current pipeline, with a specified intensity + /// An effect that overlays a color layer over the current builder, with a specified intensity /// public sealed class ShadeEffect : IPipelineEffect { @@ -20,5 +21,11 @@ public sealed class ShadeEffect : IPipelineEffect /// Gets or sets the intensity of the color layer /// public double Intensity { get; set; } + + /// + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Shade(Color, (float)Intensity); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs index 49c6cda0ca6..58fe0957ea4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects @@ -9,11 +10,17 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An effect that renders a standard 8bit SDR color on the available surface /// - public sealed class SolidColorEffect : IPipelineEffect + public sealed class SolidColorEffect : IPipelineInput { /// /// Gets or sets the color to display /// public Color Color { get; set; } + + /// + public PipelineBuilder StartPipeline() + { + return PipelineBuilder.FromColor(Color); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs index 058e1019e70..6856c37a47f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -21,5 +22,11 @@ public sealed class TemperatureAndTintEffect : ValueEffectBase /// Gets or sets the value of the tint for the current effect /// public double Tint { get; set; } + + /// + public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.TemperatureAndTint((float)Temperature, (float)Tint); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs index b2a340b5dc2..11ad4db4907 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { @@ -12,5 +13,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// This effect maps to the Win2D effect public sealed class TileEffect : ImageEffectBase { + /// + public override PipelineBuilder StartPipeline() + { + return PipelineBuilder.FromTiles(Uri, DpiMode, CacheMode); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs index 154ae9c765b..11994b21182 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects @@ -16,5 +17,11 @@ public sealed class TintEffect : IPipelineEffect /// Gets or sets the int color to use /// public Color Color { get; set; } + + /// + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) + { + return builder.Tint(Color); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs index a9dcb621367..56b8fcb1938 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs @@ -34,15 +34,12 @@ private static (PipelineBuilder Foreground, PipelineBuilder Background) GetMerge PipelineBuilder right, Placement placement) { - switch (placement) + return placement switch { - case Placement.Foreground: - return (left, right); - case Placement.Background: - return (right, left); - default: - throw new ArgumentException($"Invalid placement value: {placement}"); - } + Placement.Foreground => (left, right), + Placement.Background => (right, left), + _ => throw new ArgumentException($"Invalid placement value: {placement}") + }; } /// From aefd35128215355b139bf9a8090a7a414faeebd3 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 23 May 2020 12:55:11 +0200 Subject: [PATCH 03/21] Minor refactoring --- Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index a31a23f6c31..cfe4965bb86 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -22,7 +22,7 @@ public sealed class BlendEffect : IPipelineEffect /// /// Gets or sets the effects to apply to the input to merge with the current instance /// - public List InputEffects { get; set; } = new List(); + public List Effects { get; set; } = new List(); /// /// Gets or sets the blending mode to use (the default mode is ) @@ -37,14 +37,14 @@ public sealed class BlendEffect : IPipelineEffect /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { - PipelineBuilder inputPipeline = Input.StartPipeline(); + PipelineBuilder inputBuilder = Input.StartPipeline(); - foreach (IPipelineEffect effect in InputEffects) + foreach (IPipelineEffect effect in this.Effects) { - inputPipeline = effect.AppendToPipeline(inputPipeline); + inputBuilder = effect.AppendToPipeline(inputBuilder); } - return builder.Blend(inputPipeline, (BlendEffectMode)Mode, Placement); + return builder.Blend(inputBuilder, (BlendEffectMode)Mode, Placement); } } } From dbcfe5d2ef8ee9c62d6577e424cc0d3af07331d6 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 23 May 2020 12:55:20 +0200 Subject: [PATCH 04/21] Updated sample page XAML code --- .../SamplePages/PipelineBrush/PipelineBrushPage.xaml | 12 +++++++++--- .../SamplePages/PipelineBrush/PipelineBrushXaml.bind | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index 7584815b8cc..0917d15629d 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -21,8 +21,10 @@ - + + + @@ -39,8 +41,10 @@ - + + + @@ -59,8 +63,10 @@ - + + + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 6b3083b4698..22ff9a891d6 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -21,8 +21,10 @@ Height="400"> - + + + From 856a0e765688312dfe96ea23ebd931b58dd0b430 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 23 May 2020 12:59:29 +0200 Subject: [PATCH 05/21] More code refactoring --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 4 ++-- .../Effects/Abstract/ValueEffectBase.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs | 6 +++--- Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs | 2 +- .../Interfaces/{IPipelineEffect.cs => IPipelineNode.cs} | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs | 2 +- .../Effects/LuminanceToAlphaEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/{IPipelineEffect.cs => IPipelineNode.cs} (96%) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 677f0337675..2e7636bb833 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -23,14 +23,14 @@ public sealed class PipelineBrush : XamlCompositionEffectBrushBase /// /// Gets or sets the collection of effects to use in the current pipeline /// - public IList Effects { get; set; } = new List(); + public IList Effects { get; set; } = new List(); /// protected override PipelineBuilder OnBrushRequested() { PipelineBuilder builder = Input.StartPipeline(); - foreach (IPipelineEffect effect in Effects) + foreach (IPipelineNode effect in Effects) { builder = effect.AppendToPipeline(builder); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs index 8e2902bb6c0..cdb1c534b04 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract /// /// A base for an effect that exposes a single parameter /// - public abstract class ValueEffectBase : IPipelineEffect + public abstract class ValueEffectBase : IPipelineNode { /// /// Gets or sets the value of the parameter for the current effect diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index cfe4965bb86..20c6b29da8d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -12,7 +12,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A blend effect that merges the current builder with an input one /// /// This effect maps to the Win2D effect - public sealed class BlendEffect : IPipelineEffect + public sealed class BlendEffect : IPipelineNode { /// /// Gets or sets the input to merge with the current instance @@ -22,7 +22,7 @@ public sealed class BlendEffect : IPipelineEffect /// /// Gets or sets the effects to apply to the input to merge with the current instance /// - public List Effects { get; set; } = new List(); + public List Effects { get; set; } = new List(); /// /// Gets or sets the blending mode to use (the default mode is ) @@ -39,7 +39,7 @@ public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { PipelineBuilder inputBuilder = Input.StartPipeline(); - foreach (IPipelineEffect effect in this.Effects) + foreach (IPipelineNode effect in this.Effects) { inputBuilder = effect.AppendToPipeline(inputBuilder); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs index 5e2070d148b..3bc07f13e47 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A grayscale effect /// /// This effect maps to the Win2D effect - public sealed class GrayscaleEffect : IPipelineEffect + public sealed class GrayscaleEffect : IPipelineNode { /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs index bf76744f3b4..ff7d871ea38 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A hue rotation effect /// /// This effect maps to the Win2D effect - public sealed class HueRotationEffect : IPipelineEffect + public sealed class HueRotationEffect : IPipelineNode { /// /// Gets or sets the angle to rotate the hue, in radians diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineNode.cs similarity index 96% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineNode.cs index 24a867442c3..cd87c15a49a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineNode.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// The base for all the builder effects to be used in a /// - public interface IPipelineEffect + public interface IPipelineNode { /// /// Appends the current effect to the input instance. diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs index 04c0fcd9bb8..a3fae708850 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An color inversion effect /// /// This effect maps to the Win2D effect - public sealed class InvertEffect : IPipelineEffect + public sealed class InvertEffect : IPipelineNode { /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs index 527b55840e0..a5e150f1938 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A luminance to alpha effect /// /// This effect maps to the Win2D effect - public sealed class LuminanceToAlphaEffect : IPipelineEffect + public sealed class LuminanceToAlphaEffect : IPipelineNode { /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs index d4575d226b8..436708def2b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An effect that overlays a color layer over the current builder, with a specified intensity /// - public sealed class ShadeEffect : IPipelineEffect + public sealed class ShadeEffect : IPipelineNode { /// /// Gets or sets the color to use diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs index 11994b21182..bdfaac91d06 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -11,7 +11,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A tint effect /// /// This effect maps to the Win2D effect - public sealed class TintEffect : IPipelineEffect + public sealed class TintEffect : IPipelineNode { /// /// Gets or sets the int color to use From ed33efb0ffa287434a5ddef3d553b7b7f3d5c38a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 23 May 2020 14:24:18 +0200 Subject: [PATCH 06/21] Removed Abstract namespace, code refactoring --- .../Effects/Abstract/ImageEffectBase.cs | 2 +- .../Effects/Abstract/ValueEffectBase.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs | 1 - .../Effects/TemperatureAndTintEffect.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs | 1 - 10 files changed, 2 insertions(+), 10 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs index 92594201794..600e3d0db1c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs @@ -5,7 +5,7 @@ using System; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; -namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// /// An image based effect that loads an image at the specified location diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs index cdb1c534b04..b0c9982ca58 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs @@ -4,7 +4,7 @@ using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; -namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// /// A base for an effect that exposes a single parameter diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs index 7123ad76aaf..d781e0a8d8c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs index 2beda216f8d..b0a330d003e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs index bf000e3c2b2..4f876ad6a44 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs index 29072fa759a..4966ba35201 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs index a5337ef499c..eec318552c2 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs index b9e87e63880..4aa3b203a07 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs index 6856c37a47f..d187989a2f5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs index 11ad4db4907..6549d6e38a3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects From bec2112710488a56b35e1b874c7be35b8cc61f68 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 01:38:46 +0200 Subject: [PATCH 07/21] Removed unnecessary async state machine --- .../Helpers/SurfaceLoader.cs | 16 ++++++++-------- .../Pipelines/PipelineBuilder.Initialization.cs | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs index ebcb7104243..84fae789318 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs @@ -32,16 +32,16 @@ public sealed partial class SurfaceLoader /// /// Gets the local cache mapping for previously loaded Win2D images /// - private static readonly CompositionObjectCache Cache = new CompositionObjectCache(); + private static readonly CompositionObjectCache Cache = new CompositionObjectCache(); /// - /// Loads a instance with the target image from the shared instance + /// Loads a instance with the target image from the shared instance /// /// The path to the image to load /// Indicates the desired DPI mode to use when loading the image /// Indicates the cache option to use to load the image - /// A that returns the loaded instance - public static async Task LoadImageAsync(Uri uri, DpiMode dpiMode, CacheMode cacheMode = CacheMode.Default) + /// A that returns the loaded instance + public static async Task LoadImageAsync(Uri uri, DpiMode dpiMode, CacheMode cacheMode = CacheMode.Default) { var compositor = Window.Current.Compositor; @@ -57,7 +57,7 @@ public static async Task LoadImageAsync(Uri uri, DpiMod } // Load the image - CompositionSurfaceBrush brush; + CompositionBrush brush; try { // This will throw and the canvas will re-initialize the Win2D device if needed @@ -82,14 +82,14 @@ public static async Task LoadImageAsync(Uri uri, DpiMod } /// - /// Loads a from the input , and prepares it to be used in a tile effect + /// Loads a from the input , and prepares it to be used in a tile effect /// /// The device to use to process the Win2D image /// The compositor instance to use to create the final brush /// The path to the image to load /// Indicates the desired DPI mode to use when loading the image - /// A that returns the loaded instance - private static async Task LoadSurfaceBrushAsync( + /// A that returns the loaded instance + private static async Task LoadSurfaceBrushAsync( CanvasDevice canvasDevice, Compositor compositor, Uri uri, diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 02439a5f37a..8bd4f4f68f9 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -271,7 +271,7 @@ public static PipelineBuilder FromImage(string relativePath, DpiMode dpiMode = D [Pure] public static PipelineBuilder FromImage(Uri uri, DpiMode dpiMode = DpiMode.DisplayDpiWith96AsLowerBound, CacheMode cacheMode = CacheMode.Default) { - return new PipelineBuilder(async () => await SurfaceLoader.LoadImageAsync(uri, dpiMode, cacheMode)); + return new PipelineBuilder(() => new ValueTask(SurfaceLoader.LoadImageAsync(uri, dpiMode, cacheMode))); } /// From 99508b613241b2782f9dcc81c1cf94016881cfab Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 01:50:46 +0200 Subject: [PATCH 08/21] Renamed IPipeline[Input|Node] interfaces --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 6 +++--- .../Effects/Abstract/ImageEffectBase.cs | 2 +- .../Effects/Abstract/ValueEffectBase.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs | 8 ++++---- Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs | 2 +- .../Effects/HueRotationEffect.cs | 2 +- .../Interfaces/{IPipelineNode.cs => IPipelineEffect.cs} | 2 +- .../Interfaces/{IPipelineInput.cs => IPipelineSource.cs} | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs | 2 +- .../Effects/LuminanceToAlphaEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs | 2 +- .../Effects/SolidColorEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/{IPipelineNode.cs => IPipelineEffect.cs} (96%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/{IPipelineInput.cs => IPipelineSource.cs} (95%) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 2e7636bb833..30d26278063 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -18,19 +18,19 @@ public sealed class PipelineBrush : XamlCompositionEffectBrushBase /// /// Gets or sets the input for the current pipeline /// - public IPipelineInput Input { get; set; } + public IPipelineSource Input { get; set; } /// /// Gets or sets the collection of effects to use in the current pipeline /// - public IList Effects { get; set; } = new List(); + public IList Effects { get; set; } = new List(); /// protected override PipelineBuilder OnBrushRequested() { PipelineBuilder builder = Input.StartPipeline(); - foreach (IPipelineNode effect in Effects) + foreach (IPipelineEffect effect in Effects) { builder = effect.AppendToPipeline(builder); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs index 600e3d0db1c..09991a6cd02 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An image based effect that loads an image at the specified location /// - public abstract class ImageEffectBase : IPipelineInput + public abstract class ImageEffectBase : IPipelineSource { /// /// Gets or sets the for the image to load diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs index b0c9982ca58..816366b6996 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A base for an effect that exposes a single parameter /// - public abstract class ValueEffectBase : IPipelineNode + public abstract class ValueEffectBase : IPipelineEffect { /// /// Gets or sets the value of the parameter for the current effect diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs index 4c10d537964..e0359d340ed 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs @@ -13,7 +13,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A custom acrylic effect that can be inserted into a pipeline /// /// This effect mirrors the look of the default implementation - public sealed class AcrylicEffect : IPipelineInput + public sealed class AcrylicEffect : IPipelineSource { /// /// Gets or sets the source mode for the effect diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs index e56a621b7cc..cb0d62a898d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs @@ -11,7 +11,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A backdrop effect that can sample from a specified source /// - public sealed class BackdropEffect : IPipelineInput + public sealed class BackdropEffect : IPipelineSource { /// /// Gets or sets the backdrop source to use to render the effect diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 20c6b29da8d..82e46b2dc9d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -12,17 +12,17 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A blend effect that merges the current builder with an input one /// /// This effect maps to the Win2D effect - public sealed class BlendEffect : IPipelineNode + public sealed class BlendEffect : IPipelineEffect { /// /// Gets or sets the input to merge with the current instance /// - public IPipelineInput Input { get; set; } + public IPipelineSource Input { get; set; } /// /// Gets or sets the effects to apply to the input to merge with the current instance /// - public List Effects { get; set; } = new List(); + public List Effects { get; set; } = new List(); /// /// Gets or sets the blending mode to use (the default mode is ) @@ -39,7 +39,7 @@ public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { PipelineBuilder inputBuilder = Input.StartPipeline(); - foreach (IPipelineNode effect in this.Effects) + foreach (IPipelineEffect effect in this.Effects) { inputBuilder = effect.AppendToPipeline(inputBuilder); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs index 3bc07f13e47..5e2070d148b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A grayscale effect /// /// This effect maps to the Win2D effect - public sealed class GrayscaleEffect : IPipelineNode + public sealed class GrayscaleEffect : IPipelineEffect { /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs index ff7d871ea38..bf76744f3b4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A hue rotation effect /// /// This effect maps to the Win2D effect - public sealed class HueRotationEffect : IPipelineNode + public sealed class HueRotationEffect : IPipelineEffect { /// /// Gets or sets the angle to rotate the hue, in radians diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineNode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs similarity index 96% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineNode.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs index cd87c15a49a..24a867442c3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineNode.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// The base for all the builder effects to be used in a /// - public interface IPipelineNode + public interface IPipelineEffect { /// /// Appends the current effect to the input instance. diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineInput.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineSource.cs similarity index 95% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineInput.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineSource.cs index 6603779c50f..da2009d69cb 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineInput.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineSource.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// The base for all the pipeline inputs to be used in a . /// - public interface IPipelineInput + public interface IPipelineSource { /// /// Creates a new instance from the current input. diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs index a3fae708850..04c0fcd9bb8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An color inversion effect /// /// This effect maps to the Win2D effect - public sealed class InvertEffect : IPipelineNode + public sealed class InvertEffect : IPipelineEffect { /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs index a5e150f1938..527b55840e0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A luminance to alpha effect /// /// This effect maps to the Win2D effect - public sealed class LuminanceToAlphaEffect : IPipelineNode + public sealed class LuminanceToAlphaEffect : IPipelineEffect { /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs index 436708def2b..d4575d226b8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An effect that overlays a color layer over the current builder, with a specified intensity /// - public sealed class ShadeEffect : IPipelineNode + public sealed class ShadeEffect : IPipelineEffect { /// /// Gets or sets the color to use diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs index 58fe0957ea4..e7ce805b703 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An effect that renders a standard 8bit SDR color on the available surface /// - public sealed class SolidColorEffect : IPipelineInput + public sealed class SolidColorEffect : IPipelineSource { /// /// Gets or sets the color to display diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs index bdfaac91d06..11994b21182 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -11,7 +11,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A tint effect /// /// This effect maps to the Win2D effect - public sealed class TintEffect : IPipelineNode + public sealed class TintEffect : IPipelineEffect { /// /// Gets or sets the int color to use From 091fcab9b4c10f3e05d3d579005ed4b4a1f06bf2 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 01:55:47 +0200 Subject: [PATCH 09/21] Renamed input effects to source effects --- .../PipelineBrush/PipelineBrushPage.xaml | 14 +++++++------- .../PipelineBrush/PipelineBrushXaml.bind | 8 ++++---- .../{ImageEffectBase.cs => ImageSourceBase.cs} | 2 +- .../Effects/{AcrylicEffect.cs => AcrylicSource.cs} | 2 +- .../{BackdropEffect.cs => BackdropSource.cs} | 2 +- .../Effects/{ImageEffect.cs => ImageSource.cs} | 2 +- .../{SolidColorEffect.cs => SolidColorSource.cs} | 2 +- .../Effects/{TileEffect.cs => TileSource.cs} | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/{ImageEffectBase.cs => ImageSourceBase.cs} (95%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{AcrylicEffect.cs => AcrylicSource.cs} (97%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{BackdropEffect.cs => BackdropSource.cs} (94%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{ImageEffect.cs => ImageSource.cs} (91%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{SolidColorEffect.cs => SolidColorSource.cs} (92%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{TileEffect.cs => TileSource.cs} (93%) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index 0917d15629d..7e8c80455f6 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -22,12 +22,12 @@ - + - + @@ -42,13 +42,13 @@ - + - + @@ -64,20 +64,20 @@ - + - + - + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 22ff9a891d6..421acd8f925 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -22,26 +22,26 @@ - + - + - + - + diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs similarity index 95% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs index 09991a6cd02..92699ce177a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An image based effect that loads an image at the specified location /// - public abstract class ImageEffectBase : IPipelineSource + public abstract class ImageSourceBase : IPipelineSource { /// /// Gets or sets the for the image to load diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicSource.cs similarity index 97% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicSource.cs index e0359d340ed..616ab90351e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicSource.cs @@ -13,7 +13,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A custom acrylic effect that can be inserted into a pipeline /// /// This effect mirrors the look of the default implementation - public sealed class AcrylicEffect : IPipelineSource + public sealed class AcrylicSource : IPipelineSource { /// /// Gets or sets the source mode for the effect diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropSource.cs similarity index 94% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropSource.cs index cb0d62a898d..98003c52e3b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropSource.cs @@ -11,7 +11,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A backdrop effect that can sample from a specified source /// - public sealed class BackdropEffect : IPipelineSource + public sealed class BackdropSource : IPipelineSource { /// /// Gets or sets the backdrop source to use to render the effect diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageSource.cs similarity index 91% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageSource.cs index 4f876ad6a44..306e3482b35 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageSource.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An image effect, which displays an image loaded as a Win2D surface /// - public sealed class ImageEffect : ImageEffectBase + public sealed class ImageSource : ImageSourceBase { /// public override PipelineBuilder StartPipeline() diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorSource.cs similarity index 92% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorSource.cs index e7ce805b703..db445347505 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorSource.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An effect that renders a standard 8bit SDR color on the available surface /// - public sealed class SolidColorEffect : IPipelineSource + public sealed class SolidColorSource : IPipelineSource { /// /// Gets or sets the color to display diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileSource.cs similarity index 93% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/TileSource.cs index 6549d6e38a3..aa1f24a4d59 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileSource.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An effect that loads an image and replicates it to cover all the available surface area /// /// This effect maps to the Win2D effect - public sealed class TileEffect : ImageEffectBase + public sealed class TileSource : ImageSourceBase { /// public override PipelineBuilder StartPipeline() From 8e40ae4d1ddb8d09ab089d4137045c98ee64db3f Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 02:21:57 +0200 Subject: [PATCH 10/21] Refactored inputs to markup extensions --- .../PipelineBrush/PipelineBrushPage.xaml | 73 ++++++------------- .../PipelineBrush/PipelineBrushXaml.bind | 33 ++------- .../Brushes/PipelineBrush.cs | 6 +- .../Effects/Abstract/ImageSourceBase.cs | 7 +- .../Effects/BlendEffect.cs | 4 +- .../AcrylicSourceExtension.cs} | 6 +- .../BackdropSourceExtension.cs} | 6 +- .../ImageSourceExtension.cs} | 4 +- .../SolidColorSourceExtension.cs} | 6 +- .../TileSourceExtension.cs} | 4 +- .../Effects/Interfaces/IPipelineSource.cs | 20 ----- 11 files changed, 54 insertions(+), 115 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{AcrylicSource.cs => Extensions/AcrylicSourceExtension.cs} (90%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{BackdropSource.cs => Extensions/BackdropSourceExtension.cs} (82%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{ImageSource.cs => Extensions/ImageSourceExtension.cs} (83%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{SolidColorSource.cs => Extensions/SolidColorSourceExtension.cs} (76%) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{TileSource.cs => Extensions/TileSourceExtension.cs} (86%) delete mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineSource.cs diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index 7e8c80455f6..a2fb7eca36c 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -20,68 +20,37 @@ VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red" Width="200" Height="200"/> - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 421acd8f925..7d5245b1b67 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -20,31 +20,14 @@ Grid.Column="2" Height="400"> - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 30d26278063..17efa449d9a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -6,6 +6,7 @@ using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Effects; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; +using Windows.UI.Xaml.Markup; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media @@ -13,12 +14,13 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// /// A that renders a customizable Composition/Win2D effects pipeline /// + [ContentProperty(Name = nameof(Effects))] public sealed class PipelineBrush : XamlCompositionEffectBrushBase { /// /// Gets or sets the input for the current pipeline /// - public IPipelineSource Input { get; set; } + public PipelineBuilder Source { get; set; } /// /// Gets or sets the collection of effects to use in the current pipeline @@ -28,7 +30,7 @@ public sealed class PipelineBrush : XamlCompositionEffectBrushBase /// protected override PipelineBuilder OnBrushRequested() { - PipelineBuilder builder = Input.StartPipeline(); + PipelineBuilder builder = Source; foreach (IPipelineEffect effect in Effects) { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs index 92699ce177a..09444d3afe3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs @@ -4,13 +4,15 @@ using System; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; +using Windows.UI.Xaml.Markup; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// /// An image based effect that loads an image at the specified location /// - public abstract class ImageSourceBase : IPipelineSource + [MarkupExtensionReturnType(ReturnType = typeof(PipelineBuilder))] + public abstract class ImageSourceBase : MarkupExtension { /// /// Gets or sets the for the image to load @@ -26,8 +28,5 @@ public abstract class ImageSourceBase : IPipelineSource /// Gets or sets the cache mode to use when loading the image (the default is ) /// public CacheMode CacheMode { get; set; } = CacheMode.Default; - - /// - public abstract PipelineBuilder StartPipeline(); } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 82e46b2dc9d..2699e6a79c9 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -17,7 +17,7 @@ public sealed class BlendEffect : IPipelineEffect /// /// Gets or sets the input to merge with the current instance /// - public IPipelineSource Input { get; set; } + public PipelineBuilder Source { get; set; } /// /// Gets or sets the effects to apply to the input to merge with the current instance @@ -37,7 +37,7 @@ public sealed class BlendEffect : IPipelineEffect /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { - PipelineBuilder inputBuilder = Input.StartPipeline(); + PipelineBuilder inputBuilder = Source; foreach (IPipelineEffect effect in this.Effects) { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicSource.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs similarity index 90% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicSource.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs index 616ab90351e..3c69a62b034 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicSource.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs @@ -5,6 +5,7 @@ using System; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; +using Windows.UI.Xaml.Markup; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects @@ -13,7 +14,8 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A custom acrylic effect that can be inserted into a pipeline /// /// This effect mirrors the look of the default implementation - public sealed class AcrylicSource : IPipelineSource + [MarkupExtensionReturnType(ReturnType = typeof(PipelineBuilder))] + public sealed class AcrylicSourceExtension : MarkupExtension { /// /// Gets or sets the source mode for the effect @@ -42,7 +44,7 @@ public sealed class AcrylicSource : IPipelineSource public Uri TextureUri { get; set; } /// - public PipelineBuilder StartPipeline() + protected override object ProvideValue() { return Source switch { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropSource.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs similarity index 82% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropSource.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs index 98003c52e3b..1e88452d8a9 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropSource.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs @@ -4,6 +4,7 @@ using System; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; +using Windows.UI.Xaml.Markup; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects @@ -11,7 +12,8 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A backdrop effect that can sample from a specified source /// - public sealed class BackdropSource : IPipelineSource + [MarkupExtensionReturnType(ReturnType = typeof(PipelineBuilder))] + public sealed class BackdropSourceExtension : MarkupExtension { /// /// Gets or sets the backdrop source to use to render the effect @@ -19,7 +21,7 @@ public sealed class BackdropSource : IPipelineSource public AcrylicBackgroundSource Source { get; set; } /// - public PipelineBuilder StartPipeline() + protected override object ProvideValue() { return Source switch { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageSource.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/ImageSourceExtension.cs similarity index 83% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageSource.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/ImageSourceExtension.cs index 306e3482b35..417075a6366 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageSource.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/ImageSourceExtension.cs @@ -9,10 +9,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An image effect, which displays an image loaded as a Win2D surface /// - public sealed class ImageSource : ImageSourceBase + public sealed class ImageSourceExtension : ImageSourceBase { /// - public override PipelineBuilder StartPipeline() + protected override object ProvideValue() { return PipelineBuilder.FromImage(Uri, DpiMode, CacheMode); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorSource.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/SolidColorSourceExtension.cs similarity index 76% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorSource.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/SolidColorSourceExtension.cs index db445347505..598e976ddd6 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorSource.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/SolidColorSourceExtension.cs @@ -4,13 +4,15 @@ using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; +using Windows.UI.Xaml.Markup; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// /// An effect that renders a standard 8bit SDR color on the available surface /// - public sealed class SolidColorSource : IPipelineSource + [MarkupExtensionReturnType(ReturnType = typeof(PipelineBuilder))] + public sealed class SolidColorSourceExtension : MarkupExtension { /// /// Gets or sets the color to display @@ -18,7 +20,7 @@ public sealed class SolidColorSource : IPipelineSource public Color Color { get; set; } /// - public PipelineBuilder StartPipeline() + protected override object ProvideValue() { return PipelineBuilder.FromColor(Color); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileSource.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/TileSourceExtension.cs similarity index 86% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/TileSource.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/TileSourceExtension.cs index aa1f24a4d59..5d5999d90d1 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileSource.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/TileSourceExtension.cs @@ -10,10 +10,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An effect that loads an image and replicates it to cover all the available surface area /// /// This effect maps to the Win2D effect - public sealed class TileSource : ImageSourceBase + public sealed class TileSourceExtension : ImageSourceBase { /// - public override PipelineBuilder StartPipeline() + protected override object ProvideValue() { return PipelineBuilder.FromTiles(Uri, DpiMode, CacheMode); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineSource.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineSource.cs deleted file mode 100644 index da2009d69cb..00000000000 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineSource.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; - -namespace Microsoft.Toolkit.Uwp.UI.Media.Effects -{ - /// - /// The base for all the pipeline inputs to be used in a . - /// - public interface IPipelineSource - { - /// - /// Creates a new instance from the current input. - /// - /// A new starting from the current input. - PipelineBuilder StartPipeline(); - } -} From c5ad88dbca84e09e75548b76b0d0a851dba62038 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 02:28:48 +0200 Subject: [PATCH 11/21] Renamed some APIs for consistency --- .../PipelineBrush/PipelineBrushPage.xaml | 2 +- .../PipelineBrush/PipelineBrushXaml.bind | 4 +-- .../Brushes/AcrylicBrush.cs | 28 +++++++++---------- .../Extensions/AcrylicSourceExtension.cs | 8 +++--- .../Extensions/BackdropSourceExtension.cs | 6 ++-- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index a2fb7eca36c..b1f92c65a2c 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -21,7 +21,7 @@ - + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 7d5245b1b67..e2b095cbe02 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -20,10 +20,10 @@ Grid.Column="2" Height="400"> - + - + diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index 3ee477d605c..dba602968bb 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -20,7 +20,7 @@ public sealed class AcrylicBrush : XamlCompositionEffectBrushBase /// /// The instance in use to set the blur amount /// - /// This is only set when is + /// This is only set when is private EffectSetter blurAmountSetter; /// @@ -36,26 +36,26 @@ public sealed class AcrylicBrush : XamlCompositionEffectBrushBase /// /// Gets or sets the source mode for the effect /// - public AcrylicBackgroundSource Source + public AcrylicBackgroundSource BackgroundSource { - get => (AcrylicBackgroundSource)GetValue(SourceProperty); - set => SetValue(SourceProperty, value); + get => (AcrylicBackgroundSource)GetValue(BackgroundSourceProperty); + set => SetValue(BackgroundSourceProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty SourceProperty = DependencyProperty.Register( - nameof(Source), + public static readonly DependencyProperty BackgroundSourceProperty = DependencyProperty.Register( + nameof(BackgroundSource), typeof(AcrylicBackgroundSource), typeof(AcrylicBrush), new PropertyMetadata(AcrylicBackgroundSource.Backdrop, OnSourcePropertyChanged)); /// - /// Updates the UI when changes + /// Updates the UI when changes /// /// The current instance - /// The instance for + /// The instance for private static void OnSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is AcrylicBrush brush && @@ -86,14 +86,14 @@ public double BlurAmount new PropertyMetadata(0.0, OnBlurAmountPropertyChanged)); /// - /// Updates the UI when changes + /// Updates the UI when changes /// /// The current instance - /// The instance for + /// The instance for private static void OnBlurAmountPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is AcrylicBrush brush && - brush.Source != AcrylicBackgroundSource.HostBackdrop && // Blur is fixed by OS when using HostBackdrop source. + brush.BackgroundSource != AcrylicBackgroundSource.HostBackdrop && // Blur is fixed by OS when using HostBackdrop source. brush.CompositionBrush is CompositionBrush target) { brush.blurAmountSetter?.Invoke(target, (float)(double)e.NewValue); @@ -196,7 +196,7 @@ private static void OnTextureUriPropertyChanged(DependencyObject d, DependencyPr /// protected override PipelineBuilder OnBrushRequested() { - switch (this.Source) + switch (BackgroundSource) { case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic( @@ -214,7 +214,7 @@ protected override PipelineBuilder OnBrushRequested() (float)TintMix, out tintMixSetter, TextureUri); - default: throw new ArgumentOutOfRangeException(nameof(this.Source), $"Invalid acrylic source: {this.Source}"); + default: throw new ArgumentOutOfRangeException(nameof(BackgroundSource), $"Invalid acrylic source: {BackgroundSource}"); } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs index 3c69a62b034..3cbc25eb89b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs @@ -18,9 +18,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects public sealed class AcrylicSourceExtension : MarkupExtension { /// - /// Gets or sets the source mode for the effect + /// Gets or sets the background source mode for the effect /// - public AcrylicBackgroundSource Source { get; set; } + public AcrylicBackgroundSource BackgroundSource { get; set; } /// /// Gets or sets the blur amount for the effect @@ -46,11 +46,11 @@ public sealed class AcrylicSourceExtension : MarkupExtension /// protected override object ProvideValue() { - return Source switch + return BackgroundSource switch { AcrylicBackgroundSource.Backdrop => PipelineBuilder.FromBackdropAcrylic(Tint, (float)TintMix, (float)BlurAmount, TextureUri), AcrylicBackgroundSource.HostBackdrop => PipelineBuilder.FromHostBackdropAcrylic(Tint, (float)TintMix, TextureUri), - _ => throw new ArgumentException($"Invalid source mode for acrylic effect: {Source}") + _ => throw new ArgumentException($"Invalid source mode for acrylic effect: {BackgroundSource}") }; } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs index 1e88452d8a9..3a5a9f596d8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs @@ -18,16 +18,16 @@ public sealed class BackdropSourceExtension : MarkupExtension /// /// Gets or sets the backdrop source to use to render the effect /// - public AcrylicBackgroundSource Source { get; set; } + public AcrylicBackgroundSource BackgroundSource { get; set; } /// protected override object ProvideValue() { - return Source switch + return BackgroundSource switch { AcrylicBackgroundSource.Backdrop => PipelineBuilder.FromBackdrop(), AcrylicBackgroundSource.HostBackdrop => PipelineBuilder.FromHostBackdrop(), - _ => throw new ArgumentException($"Invalid source for backdrop effect: {Source}") + _ => throw new ArgumentException($"Invalid source for backdrop effect: {BackgroundSource}") }; } } From 8184cc64c67a546041f6f2b00ada7c19458be1a3 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 02:31:20 +0200 Subject: [PATCH 12/21] More renames --- .../{ImageSourceBase.cs => ImageSourceBaseExtension.cs} | 2 +- .../Effects/Extensions/ImageSourceExtension.cs | 2 +- .../Effects/Extensions/TileSourceExtension.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/{ImageSourceBase.cs => ImageSourceBaseExtension.cs} (94%) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBaseExtension.cs similarity index 94% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBaseExtension.cs index 09444d3afe3..6117203665a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageSourceBaseExtension.cs @@ -12,7 +12,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An image based effect that loads an image at the specified location /// [MarkupExtensionReturnType(ReturnType = typeof(PipelineBuilder))] - public abstract class ImageSourceBase : MarkupExtension + public abstract class ImageSourceBaseExtension : MarkupExtension { /// /// Gets or sets the for the image to load diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/ImageSourceExtension.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/ImageSourceExtension.cs index 417075a6366..769aa67c88f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/ImageSourceExtension.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/ImageSourceExtension.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An image effect, which displays an image loaded as a Win2D surface /// - public sealed class ImageSourceExtension : ImageSourceBase + public sealed class ImageSourceExtension : ImageSourceBaseExtension { /// protected override object ProvideValue() diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/TileSourceExtension.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/TileSourceExtension.cs index 5d5999d90d1..f45b7ba1b73 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/TileSourceExtension.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/TileSourceExtension.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An effect that loads an image and replicates it to cover all the available surface area /// /// This effect maps to the Win2D effect - public sealed class TileSourceExtension : ImageSourceBase + public sealed class TileSourceExtension : ImageSourceBaseExtension { /// protected override object ProvideValue() From ebeaf782b1dbf151ea5f081fe92e9a38ba89004f Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 02:49:42 +0200 Subject: [PATCH 13/21] Simplified code, improved XML docs --- .../PipelineBrush/PipelineBrushXaml.bind | 2 +- .../Effects/Abstract/ValueEffectBase.cs | 22 ------------------- .../Effects/BlurEffect.cs | 11 +++++++--- .../Effects/ExposureEffect.cs | 11 +++++++--- .../Effects/OpacityEffect.cs | 9 ++++++-- .../Effects/SaturationEffect.cs | 9 ++++++-- .../Effects/SepiaEffect.cs | 11 +++++++--- .../Effects/TemperatureAndTintEffect.cs | 4 ++-- 8 files changed, 41 insertions(+), 38 deletions(-) delete mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index e2b095cbe02..a1b2c62cfcc 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -24,7 +24,7 @@ - + diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs deleted file mode 100644 index 816366b6996..00000000000 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; - -namespace Microsoft.Toolkit.Uwp.UI.Media.Effects -{ - /// - /// A base for an effect that exposes a single parameter - /// - public abstract class ValueEffectBase : IPipelineEffect - { - /// - /// Gets or sets the value of the parameter for the current effect - /// - public double Value { get; set; } - - /// - public abstract PipelineBuilder AppendToPipeline(PipelineBuilder builder); - } -} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs index d781e0a8d8c..2442d2915f9 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs @@ -10,12 +10,17 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A gaussian blur effect /// /// This effect maps to the Win2D effect - public sealed class BlurEffect : ValueEffectBase + public sealed class BlurEffect : IPipelineEffect { + /// + /// Gets or sets the amount of gaussian blur to apply to the background. + /// + public double Amount { get; set; } + /// - public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { - return builder.Blur((float)Value); + return builder.Blur((float)Amount); } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs index b0a330d003e..0fd847584e8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs @@ -10,12 +10,17 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An exposure effect /// /// This effect maps to the Win2D effect - public sealed class ExposureEffect : ValueEffectBase + public sealed class ExposureEffect : IPipelineEffect { + /// + /// Gets or sets the amount of exposure to apply to the background (defaults to 0, should be in the [-2, 2] range). + /// + public double Amount { get; set; } + /// - public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { - return builder.Exposure((float)Value); + return builder.Exposure((float)Amount); } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs index 4966ba35201..1535e58d025 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs @@ -10,10 +10,15 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// An opacity effect /// /// This effect maps to the Win2D effect - public sealed class OpacityEffect : ValueEffectBase + public sealed class OpacityEffect : IPipelineEffect { + /// + /// Gets or sets the opacity value to apply to the background (defaults to 1, should be in the [0, 1] range). + /// + public double Value { get; set; } = 1; + /// - public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { return builder.Opacity((float)Value); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs index eec318552c2..1ed8f924079 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs @@ -10,10 +10,15 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A saturation effect /// /// This effect maps to the Win2D effect - public sealed class SaturationEffect : ValueEffectBase + public sealed class SaturationEffect : IPipelineEffect { + /// + /// Gets or sets the saturation amount to apply to the background (defaults to 1, should be in the [0, 1] range). + /// + public double Value { get; set; } = 1; + /// - public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { return builder.Saturation((float)Value); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs index 4aa3b203a07..3dea7a9e361 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs @@ -10,12 +10,17 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A sepia effect /// /// This effect maps to the Win2D effect - public sealed class SepiaEffect : ValueEffectBase + public sealed class SepiaEffect : IPipelineEffect { + /// + /// Gets or sets the intensity of the effect (defaults to 0.5, should be in the [0, 1] range). + /// + public double Intensity { get; set; } = 0.5; + /// - public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { - return builder.Sepia((float)Value); + return builder.Sepia((float)Intensity); } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs index d187989a2f5..6fb4b42afc4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs @@ -10,7 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// A temperature and tint effect /// /// This effect maps to the Win2D effect - public sealed class TemperatureAndTintEffect : ValueEffectBase + public sealed class TemperatureAndTintEffect : IPipelineEffect { /// /// Gets or sets the value of the temperature for the current effect @@ -23,7 +23,7 @@ public sealed class TemperatureAndTintEffect : ValueEffectBase public double Tint { get; set; } /// - public override PipelineBuilder AppendToPipeline(PipelineBuilder builder) + public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { return builder.TemperatureAndTint((float)Temperature, (float)Tint); } From 3d415ff192cc8e23bed0e68e334a5191b9117ed8 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 02:55:37 +0200 Subject: [PATCH 14/21] Fixed XML comment reference --- Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 2699e6a79c9..4df645d4b4e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -30,7 +30,7 @@ public sealed class BlendEffect : IPipelineEffect public ImageBlendMode Mode { get; set; } /// - /// Gets or sets the placement of the input builder with respect to the current one (the default is ) + /// Gets or sets the placement of the input builder with respect to the current one (the default is ) /// public Placement Placement { get; set; } = Placement.Foreground; From 43989a133dded55c58b9ad8d504d20348c3c4ce1 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 22:45:22 +0200 Subject: [PATCH 15/21] Set default backdrop source to backdrop --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs | 2 +- .../Effects/Extensions/AcrylicSourceExtension.cs | 4 ++-- .../Effects/Extensions/BackdropSourceExtension.cs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index dba602968bb..fe2833c3288 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -34,7 +34,7 @@ public sealed class AcrylicBrush : XamlCompositionEffectBrushBase private EffectSetter tintMixSetter; /// - /// Gets or sets the source mode for the effect + /// Gets or sets the background source mode for the effect (the default is ). /// public AcrylicBackgroundSource BackgroundSource { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs index 3cbc25eb89b..fb7c3c5e2a5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs @@ -18,9 +18,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects public sealed class AcrylicSourceExtension : MarkupExtension { /// - /// Gets or sets the background source mode for the effect + /// Gets or sets the background source mode for the effect (the default is ). /// - public AcrylicBackgroundSource BackgroundSource { get; set; } + public AcrylicBackgroundSource BackgroundSource { get; set; } = AcrylicBackgroundSource.Backdrop; /// /// Gets or sets the blur amount for the effect diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs index 3a5a9f596d8..7ae6824c4aa 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/BackdropSourceExtension.cs @@ -16,9 +16,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects public sealed class BackdropSourceExtension : MarkupExtension { /// - /// Gets or sets the backdrop source to use to render the effect + /// Gets or sets the background source mode for the effect (the default is ). /// - public AcrylicBackgroundSource BackgroundSource { get; set; } + public AcrylicBackgroundSource BackgroundSource { get; set; } = AcrylicBackgroundSource.Backdrop; /// protected override object ProvideValue() From 31644bf2638e04581b76bf80659cd99fedd7f666 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 22:47:34 +0200 Subject: [PATCH 16/21] Fixed incorrect property --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index fe2833c3288..fbb7f519b5e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -135,7 +135,11 @@ private static void OnTintPropertyChanged(DependencyObject d, DependencyProperty /// /// Gets or sets the tint mix factor for the effect /// - public double TintMix { get; set; } + public double TintMix + { + get => (double)GetValue(TintMixProperty); + set => SetValue(TintMixProperty, value); + } /// /// Identifies the dependency property. From c9c08f4c3e573d7642e8e80dcef236b309655880 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 22:56:34 +0200 Subject: [PATCH 17/21] Renamed some parameter for consistency Following the naming scheme from the WUX/MUX AcrylicBrush --- .../Brushes/AcrylicBrush.cs | 68 +++++------ .../Brushes/BackdropBlurBrush.cs | 6 +- .../Extensions/AcrylicSourceExtension.cs | 8 +- .../Pipelines/PipelineBuilder.Prebuilt.cs | 114 +++++++++--------- 4 files changed, 98 insertions(+), 98 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index fbb7f519b5e..c1e8ba4630c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -26,12 +26,12 @@ public sealed class AcrylicBrush : XamlCompositionEffectBrushBase /// /// The instance in use to set the tint color /// - private EffectSetter tintSetter; + private EffectSetter tintColorSetter; /// /// The instance in use to set the tint mix amount /// - private EffectSetter tintMixSetter; + private EffectSetter tintOpacitySetter; /// /// Gets or sets the background source mode for the effect (the default is ). @@ -103,64 +103,64 @@ private static void OnBlurAmountPropertyChanged(DependencyObject d, DependencyPr /// /// Gets or sets the tint for the effect /// - public Color Tint + public Color TintColor { - get => (Color)GetValue(TintProperty); - set => SetValue(TintProperty, value); + get => (Color)GetValue(TintColorProperty); + set => SetValue(TintColorProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty TintProperty = DependencyProperty.Register( - nameof(Tint), + public static readonly DependencyProperty TintColorProperty = DependencyProperty.Register( + nameof(TintColor), typeof(Color), typeof(AcrylicBrush), - new PropertyMetadata(default(Color), OnTintPropertyChanged)); + new PropertyMetadata(default(Color), OnTintColorPropertyChanged)); /// - /// Updates the UI when changes + /// Updates the UI when changes /// /// The current instance - /// The instance for - private static void OnTintPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + /// The instance for + private static void OnTintColorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is AcrylicBrush brush && brush.CompositionBrush is CompositionBrush target) { - brush.tintSetter?.Invoke(target, (Color)e.NewValue); + brush.tintColorSetter?.Invoke(target, (Color)e.NewValue); } } /// - /// Gets or sets the tint mix factor for the effect + /// Gets or sets the tint opacity factor for the effect /// - public double TintMix + public double TintOpacity { - get => (double)GetValue(TintMixProperty); - set => SetValue(TintMixProperty, value); + get => (double)GetValue(TintOpacityProperty); + set => SetValue(TintOpacityProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty TintMixProperty = DependencyProperty.Register( - nameof(TintMix), + public static readonly DependencyProperty TintOpacityProperty = DependencyProperty.Register( + nameof(TintOpacity), typeof(double), typeof(AcrylicBrush), - new PropertyMetadata(0.0, OnTintMixPropertyChanged)); + new PropertyMetadata(0.0, OnTintOpacityPropertyChanged)); /// - /// Updates the UI when changes + /// Updates the UI when changes /// /// The current instance - /// The instance for - private static void OnTintMixPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + /// The instance for + private static void OnTintOpacityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is AcrylicBrush brush && brush.CompositionBrush is CompositionBrush target) { - brush.tintMixSetter?.Invoke(target, (float)(double)e.NewValue); + brush.tintOpacitySetter?.Invoke(target, (float)(double)e.NewValue); } } @@ -204,19 +204,19 @@ protected override PipelineBuilder OnBrushRequested() { case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic( - Tint, - out tintSetter, - (float)TintMix, - out tintMixSetter, + TintColor, + out this.tintColorSetter, + (float)TintOpacity, + out this.tintOpacitySetter, (float)BlurAmount, - out this.blurAmountSetter, + out blurAmountSetter, TextureUri); case AcrylicBackgroundSource.HostBackdrop: return PipelineBuilder.FromHostBackdropAcrylic( - Tint, - out tintSetter, - (float)TintMix, - out tintMixSetter, + TintColor, + out this.tintColorSetter, + (float)TintOpacity, + out this.tintOpacitySetter, TextureUri); default: throw new ArgumentOutOfRangeException(nameof(BackgroundSource), $"Invalid acrylic source: {BackgroundSource}"); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs index 69959a844c4..9de67f445cf 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs @@ -20,7 +20,7 @@ public class BackdropBlurBrush : XamlCompositionEffectBrushBase /// /// The instance currently in use /// - private EffectSetter setter; + private EffectSetter amountSetter; /// /// Gets or sets the amount of gaussian blur to apply to the background. @@ -50,14 +50,14 @@ private static void OnAmountChanged(DependencyObject d, DependencyPropertyChange if (d is BackdropBlurBrush brush && brush.CompositionBrush is CompositionBrush target) { - brush.setter?.Invoke(target, (float)brush.Amount); + brush.amountSetter?.Invoke(target, (float)brush.Amount); } } /// protected override PipelineBuilder OnBrushRequested() { - return PipelineBuilder.FromBackdrop().Blur((float)Amount, out setter); + return PipelineBuilder.FromBackdrop().Blur((float)Amount, out this.amountSetter); } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs index fb7c3c5e2a5..0cec9ce4017 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Extensions/AcrylicSourceExtension.cs @@ -31,12 +31,12 @@ public sealed class AcrylicSourceExtension : MarkupExtension /// /// Gets or sets the tint for the effect /// - public Color Tint { get; set; } + public Color TintColor { get; set; } /// /// Gets or sets the color for the tint effect /// - public double TintMix { get; set; } + public double TintOpacity { get; set; } /// /// Gets or sets the to the texture to use @@ -48,8 +48,8 @@ protected override object ProvideValue() { return BackgroundSource switch { - AcrylicBackgroundSource.Backdrop => PipelineBuilder.FromBackdropAcrylic(Tint, (float)TintMix, (float)BlurAmount, TextureUri), - AcrylicBackgroundSource.HostBackdrop => PipelineBuilder.FromHostBackdropAcrylic(Tint, (float)TintMix, TextureUri), + 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}") }; } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index c5782b19ff5..52ef3f2d1b1 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -17,15 +17,15 @@ public sealed partial class PipelineBuilder /// /// Returns a new instance that implements the host backdrop acrylic effect /// - /// The tint color to use - /// The amount of tint to apply over the current effect + /// The tint color to use + /// The amount of tint to apply over the current effect /// The for the noise texture to load for the acrylic effect /// The cache mode to use to load the image /// A new instance to use to keep adding new effects [Pure] public static PipelineBuilder FromHostBackdropAcrylic( - Color tint, - float mix, + Color tintColor, + float tintOpacity, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { @@ -34,7 +34,7 @@ public static PipelineBuilder FromHostBackdropAcrylic( .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Shade(tint, mix); + .Shade(tintColor, tintOpacity); if (noiseUri != null) { @@ -47,19 +47,19 @@ public static PipelineBuilder FromHostBackdropAcrylic( /// /// Returns a new instance that implements the host backdrop acrylic effect /// - /// The tint color to use - /// The optional tint color setter for the effect - /// The amount of tint to apply over the current effect - /// The optional tint mix setter for the effect + /// The tint color to use + /// The optional tint color setter for the effect + /// The amount of tint to apply over the current effect + /// The optional tint mix setter for the effect /// The for the noise texture to load for the acrylic effect /// The cache mode to use to load the image /// A new instance to use to keep adding new effects [Pure] public static PipelineBuilder FromHostBackdropAcrylic( - Color tint, - out EffectSetter tintSetter, - float mix, - out EffectSetter mixSetter, + Color tintColor, + out EffectSetter tintColorSetter, + float tintOpacity, + out EffectSetter tintOpacitySetter, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { @@ -68,7 +68,7 @@ public static PipelineBuilder FromHostBackdropAcrylic( .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Shade(tint, out tintSetter, mix, out mixSetter); + .Shade(tintColor, out tintColorSetter, tintOpacity, out tintOpacitySetter); if (noiseUri != null) { @@ -81,19 +81,19 @@ public static PipelineBuilder FromHostBackdropAcrylic( /// /// Returns a new instance that implements the host backdrop acrylic effect /// - /// The tint color to use - /// The optional tint color animation for the effect - /// The amount of tint to apply over the current effect - /// The optional tint mix animation for the effect + /// The tint color to use + /// The optional tint color animation for the effect + /// The amount of tint to apply over the current effect + /// The optional tint mix animation for the effect /// The for the noise texture to load for the acrylic effect /// The cache mode to use to load the image /// A new instance to use to keep adding new effects [Pure] public static PipelineBuilder FromHostBackdropAcrylic( - Color tint, - out EffectAnimation tintAnimation, - float mix, - out EffectAnimation mixAnimation, + Color tintColor, + out EffectAnimation tintColorAnimation, + float tintOpacity, + out EffectAnimation tintOpacityAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { @@ -102,7 +102,7 @@ public static PipelineBuilder FromHostBackdropAcrylic( .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Shade(tint, out tintAnimation, mix, out mixAnimation); + .Shade(tintColor, out tintColorAnimation, tintOpacity, out tintOpacityAnimation); if (noiseUri != null) { @@ -115,24 +115,24 @@ public static PipelineBuilder FromHostBackdropAcrylic( /// /// Returns a new instance that implements the in-app backdrop acrylic effect /// - /// The tint color to use - /// The amount of tint to apply over the current effect - /// The amount of blur to apply to the acrylic brush + /// The tint color to use + /// The amount of tint to apply over the current effect + /// The amount of blur to apply to the acrylic brush /// The for the noise texture to load for the acrylic effect /// The cache mode to use to load the image /// A new instance to use to keep adding new effects [Pure] public static PipelineBuilder FromBackdropAcrylic( - Color tint, - float mix, - float blur, + Color tintColor, + float tintOpacity, + float blurAmount, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { var pipeline = FromBackdrop() - .Shade(tint, mix) - .Blur(blur); + .Shade(tintColor, tintOpacity) + .Blur(blurAmount); if (noiseUri != null) { @@ -145,30 +145,30 @@ public static PipelineBuilder FromBackdropAcrylic( /// /// Returns a new instance that implements the in-app backdrop acrylic effect /// - /// The tint color to use - /// The optional tint color setter for the effect - /// The amount of tint to apply over the current effect - /// The optional tint mix setter for the effect - /// The amount of blur to apply to the acrylic brush - /// The optional blur setter for the effect + /// The tint color to use + /// The optional tint color setter for the effect + /// The amount of tint to apply over the current effect + /// The optional tint mix setter for the effect + /// The amount of blur to apply to the acrylic brush + /// The optional blur setter for the effect /// The for the noise texture to load for the acrylic effect /// The cache mode to use to load the image /// A new instance to use to keep adding new effects [Pure] public static PipelineBuilder FromBackdropAcrylic( - Color tint, - out EffectSetter tintSetter, - float mix, - out EffectSetter mixSetter, - float blur, - out EffectSetter blurSetter, + Color tintColor, + out EffectSetter tintColorSetter, + float tintOpacity, + out EffectSetter tintOpacitySetter, + float blurAmount, + out EffectSetter blurAmountSetter, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { var pipeline = FromBackdrop() - .Shade(tint, out tintSetter, mix, out mixSetter) - .Blur(blur, out blurSetter); + .Shade(tintColor, out tintColorSetter, tintOpacity, out tintOpacitySetter) + .Blur(blurAmount, out blurAmountSetter); if (noiseUri != null) { @@ -181,30 +181,30 @@ public static PipelineBuilder FromBackdropAcrylic( /// /// Returns a new instance that implements the in-app backdrop acrylic effect /// - /// The tint color to use + /// The tint color to use /// The optional tint color animation for the effect - /// The amount of tint to apply over the current effect - /// The optional tint mix animation for the effect - /// The amount of blur to apply to the acrylic brush - /// The optional blur animation for the effect + /// The amount of tint to apply over the current effect + /// The optional tint mix animation for the effect + /// The amount of blur to apply to the acrylic brush + /// The optional blur animation for the effect /// The for the noise texture to load for the acrylic effect /// The cache mode to use to load the image /// A new instance to use to keep adding new effects [Pure] public static PipelineBuilder FromBackdropAcrylic( - Color tint, + Color tintColor, out EffectAnimation tintAnimation, - float mix, - out EffectAnimation mixAnimation, - float blur, - out EffectAnimation blurAnimation, + float tintOpacity, + out EffectAnimation tintOpacityAnimation, + float blurAmount, + out EffectAnimation blurAmountAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { var pipeline = FromBackdrop() - .Shade(tint, out tintAnimation, mix, out mixAnimation) - .Blur(blur, out blurAnimation); + .Shade(tintColor, out tintAnimation, tintOpacity, out tintOpacityAnimation) + .Blur(blurAmount, out blurAmountAnimation); if (noiseUri != null) { From 638b64879dde71b62b777df5c938ac5f5ab0c6a8 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Mon, 25 May 2020 22:58:18 +0200 Subject: [PATCH 18/21] Updated PipelineBrush sample code --- .../SamplePages/PipelineBrush/PipelineBrushXaml.bind | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index a1b2c62cfcc..4c3d90bfdc4 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -20,10 +20,10 @@ Grid.Column="2" Height="400"> - + - + From cb5f9fc16bf6160a1439dfa80a129cc4cbfaa890 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Tue, 26 May 2020 19:56:27 +0200 Subject: [PATCH 19/21] Added default pipeline/blend sources --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 4 ++-- Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 17efa449d9a..ace8da88e05 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -18,7 +18,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media public sealed class PipelineBrush : XamlCompositionEffectBrushBase { /// - /// Gets or sets the input for the current pipeline + /// Gets or sets the input to merge with the current instance (defaults to a with source). /// public PipelineBuilder Source { get; set; } @@ -30,7 +30,7 @@ public sealed class PipelineBrush : XamlCompositionEffectBrushBase /// protected override PipelineBuilder OnBrushRequested() { - PipelineBuilder builder = Source; + PipelineBuilder builder = Source ?? PipelineBuilder.FromBackdrop(); foreach (IPipelineEffect effect in Effects) { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 4df645d4b4e..2799770b5ee 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -15,7 +15,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects public sealed class BlendEffect : IPipelineEffect { /// - /// Gets or sets the input to merge with the current instance + /// Gets or sets the input to merge with the current instance (defaults to a with source). /// public PipelineBuilder Source { get; set; } @@ -37,7 +37,7 @@ public sealed class BlendEffect : IPipelineEffect /// public PipelineBuilder AppendToPipeline(PipelineBuilder builder) { - PipelineBuilder inputBuilder = Source; + PipelineBuilder inputBuilder = Source ?? PipelineBuilder.FromBackdrop(); foreach (IPipelineEffect effect in this.Effects) { From 1becb7a348e872dd4544d86d2dc59e00ba0bf973 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Tue, 26 May 2020 22:56:11 +0200 Subject: [PATCH 20/21] Removed .Base namespace Attempted workaround for "child node 2" build error --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs | 1 - .../Brushes/BackdropSaturationBrush.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs | 1 - .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs | 1 - Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs | 1 - 9 files changed, 1 insertion(+), 9 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index c1e8ba4630c..b0de6c15f72 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System; -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; using Windows.UI.Composition; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs index 9de67f445cf..129fa289610 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs @@ -4,7 +4,6 @@ //// Example brush from https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.xamlcompositionbrushbase -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs index 156a27bd7a7..c225fa42fad 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs @@ -4,7 +4,6 @@ //// Example brush from https://blogs.windows.com/buildingapps/2017/07/18/working-brushes-content-xaml-visual-layer-interop-part-one/#z70vPv1QMAvZsceo.97 -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs index f358cfeab77..699ebe04849 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs index 487e6897fa1..965d34de9ee 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index fe075953d9d..d9a4396e794 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs @@ -7,7 +7,7 @@ using Windows.UI.Composition; using Windows.UI.Xaml.Media; -namespace Microsoft.Toolkit.Uwp.UI.Media.Base +namespace Microsoft.Toolkit.Uwp.UI.Media { /// /// A custom that's ready to be used with a custom pipeline diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index ace8da88e05..4dfa2d41770 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System.Collections.Generic; -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Effects; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Markup; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs index be1950c9bd3..3d75b4f3c53 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System; -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml; diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs index 7a2ccaa3e0a..44f1b527f23 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs @@ -5,7 +5,6 @@ using System; using System.Diagnostics.Contracts; using System.Threading.Tasks; -using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; namespace Microsoft.Toolkit.Uwp.UI.Media From c38640cd61966a05b41a7519aa27ee6fed2f3622 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Wed, 27 May 2020 02:35:14 +0200 Subject: [PATCH 21/21] Updated AcrylicBrush sample page --- .../SamplePages/AcrylicBrush/AcrylicBrushXaml.bind | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind index 40ffce65d83..c24d8070b27 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind @@ -20,9 +20,9 @@ Grid.Column="2" Height="400"> -