From 8d5c6efd1bc64a3cdcc78a891155a5e3fb039633 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 17:36:00 +0100 Subject: [PATCH 01/92] Added extensions and Win2D helpers --- .../Enums/CacheMode.cs | 27 ++ .../Enums/DpiMode.cs | 32 ++ .../Enums/Placement.cs | 24 ++ .../GenericExtensions.cs | 56 +++ .../System.Threading.Tasks/AsyncMutex.cs | 60 ++++ .../Extensions/System/UriExtensions.cs | 49 +++ .../CompositionObjectExtensions.cs | 89 +++++ .../Cache/ThreadSafeCompositionCache.cs | 69 ++++ .../Cache/ThreadSafeCompositionMapCache.cs | 122 +++++++ .../Helpers/Win2DImageHelper.cs | 324 ++++++++++++++++++ 10 files changed, 852 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Enums/CacheMode.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Enums/DpiMode.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Enums/Placement.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Enums/CacheMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/CacheMode.cs new file mode 100644 index 00000000000..a1c3818948d --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Enums/CacheMode.cs @@ -0,0 +1,27 @@ +// 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. + +namespace Microsoft.Toolkit.Uwp.UI.Media +{ + /// + /// Indicates the cache mode to use when loading a Win2D image + /// + public enum CacheMode + { + /// + /// The default behavior, the cache is enabled + /// + Default, + + /// + /// Reload the target image and overwrite the cached entry, if it exists + /// + Overwrite, + + /// + /// The cache is disabled and new images are always reloaded + /// + Disabled + } +} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Enums/DpiMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/DpiMode.cs new file mode 100644 index 00000000000..049dd29487b --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Enums/DpiMode.cs @@ -0,0 +1,32 @@ +// 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. + +namespace Microsoft.Toolkit.Uwp.UI.Media +{ + /// + /// Indicates the DPI mode to use to load an image + /// + public enum DpiMode + { + /// + /// Uses the original DPI settings of the loaded image + /// + UseSourceDpi, + + /// + /// Uses the default value of 96 DPI + /// + Default96Dpi, + + /// + /// Overrides the image DPI settings with the current screen DPI value + /// + DisplayDpi, + + /// + /// Overrides the image DPI settings with the current screen DPI value and ensures the resulting value is at least 96 + /// + DisplayDpiWith96AsLowerBound + } +} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Enums/Placement.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/Placement.cs new file mode 100644 index 00000000000..055632c6294 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Enums/Placement.cs @@ -0,0 +1,24 @@ +// 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 Windows.Graphics.Effects; + +namespace Microsoft.Toolkit.Uwp.UI.Media +{ + /// + /// An used to modify the default placement of the input instance in a blend operation + /// + public enum Placement + { + /// + /// The instance used to call the blend method is placed on top of the other + /// + Foreground, + + /// + /// The instance used to call the blend method is placed behind the other + /// + Background + } +} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs new file mode 100644 index 00000000000..24e2a1450e7 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs @@ -0,0 +1,56 @@ +// 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 System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Collections.Generic +{ + /// + /// An extension for the + /// + internal static class GenericExtensions + { + /// + /// Merges the two input instances and makes sure no duplicate keys are present + /// + /// The type of keys in the input dictionaries + /// The type of values in the input dictionaries + /// The first to merge + /// The second to merge + /// An instance with elements from both and + [Pure] + public static IReadOnlyDictionary Merge( + this IReadOnlyDictionary a, + IReadOnlyDictionary b) + { + if (a.Keys.FirstOrDefault(b.ContainsKey) is TKey key) + { + throw new InvalidOperationException($"The key {key} already exists in the current pipeline"); + } + + return new Dictionary(a.Concat(b)); + } + + /// + /// Merges the two input instances and makes sure no duplicate items are present + /// + /// The type of elements in the input collections + /// The first to merge + /// The second to merge + /// An instance with elements from both and + [Pure] + public static IReadOnlyCollection Merge(this IReadOnlyCollection a, IReadOnlyCollection b) + { + if (a.Any(b.Contains)) + { + throw new InvalidOperationException("The input collection has at least an item already present in the second collection"); + } + + return a.Concat(b).ToArray(); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs new file mode 100644 index 00000000000..9f6562409ba --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs @@ -0,0 +1,60 @@ +// 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 System; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks +{ + /// + /// An implementation that can be easily used inside a block + /// + internal sealed class AsyncMutex + { + /// + /// The underlying instance in use + /// + private readonly SemaphoreSlim semaphore = new SemaphoreSlim(1); + + /// + /// Acquires a lock for the current instance, that is automatically released outside the block + /// + /// A that returns an instance to release the lock + public async Task LockAsync() + { + await this.semaphore.WaitAsync().ConfigureAwait(false); + + return new Lock(this.semaphore); + } + + /// + /// Private class that implements the automatic release of the semaphore + /// + private sealed class Lock : IDisposable + { + /// + /// The instance of the parent class + /// + private readonly SemaphoreSlim semaphore; + + /// + /// Initializes a new instance of the class. + /// + /// The instance of the parent class + public Lock(SemaphoreSlim semaphore) + { + this.semaphore = semaphore; + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void IDisposable.Dispose() + { + this.semaphore.Release(); + } + } + } +} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs new file mode 100644 index 00000000000..55cc6df1bfe --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs @@ -0,0 +1,49 @@ +// 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 System; +using System.Diagnostics.Contracts; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.System +{ + /// + /// An extension for the type + /// + public static class UriExtensions + { + /// + /// Returns an that starts with the ms-appx:// prefix + /// + /// The input to process + /// A equivalent to the first but relative to ms-appx:// + /// This is needed because the XAML converter doesn't use the ms-appx:// prefix + [Pure] + internal static Uri ToAppxUri(this Uri uri) + { + if (uri.Scheme.Equals("ms-resource")) + { + string path = uri.AbsolutePath.StartsWith("/Files") + ? uri.AbsolutePath.Replace("/Files", string.Empty) + : uri.AbsolutePath; + + return new Uri($"ms-appx://{path}"); + } + + return uri; + } + + /// + /// Returns an that starts with the ms-appx:// prefix + /// + /// The input relative path to convert + /// A with relative to ms-appx:// + [Pure] + public static Uri ToAppxUri(this string path) + { + string prefix = $"ms-appx://{(path.StartsWith('/') ? string.Empty : "/")}"; + + return new Uri($"{prefix}{path}"); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs new file mode 100644 index 00000000000..97945c463b6 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs @@ -0,0 +1,89 @@ +// 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 System; +using System.Threading.Tasks; +using Windows.UI.Composition; +using Windows.UI.Core; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Hosting; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition +{ + /// + /// An extension for the type + /// + internal static class CompositionObjectExtensions + { + /// + /// Starts an to keep the size of the source in sync with the target + /// + /// The to start the animation on + /// The target to read the size updates from + public static void BindSize(this CompositionObject source, UIElement target) + { + var visual = ElementCompositionPreview.GetElementVisual(target); + var bindSizeAnimation = source.Compositor.CreateExpressionAnimation($"{nameof(visual)}.Size"); + + bindSizeAnimation.SetReferenceParameter(nameof(visual), visual); + + // Start the animation + source.StartAnimation("Size", bindSizeAnimation); + } + + /// + /// Tries to retrieve the instance of the input + /// + /// The source instance + /// The resulting , if existing + /// if the has been retrieved, otherwise + public static bool TryGetDispatcher(this CompositionObject source, out CoreDispatcher dispatcher) + { + try + { + dispatcher = source.Dispatcher; + + return true; + } + catch (ObjectDisposedException) + { + dispatcher = null; + + return false; + } + } + + /// + /// Starts an animation on the given property of a + /// + /// The target + /// The name of the property to animate + /// The final value of the property + /// The animation duration + /// A that completes when the created animation completes + public static Task StartAnimationAsync(this CompositionObject target, string property, float value, TimeSpan duration) + { + // Stop previous animations + target.StopAnimation(property); + + // Setup the animation + var animation = target.Compositor.CreateScalarKeyFrameAnimation(); + animation.InsertKeyFrame(1f, value); + animation.Duration = duration; + + // Get the batch and start the animations + var batch = target.Compositor.CreateScopedBatch(CompositionBatchTypes.Animation); + + var tcs = new TaskCompletionSource(); + + batch.Completed += (s, e) => tcs.SetResult(null); + + target.StartAnimation(property, animation); + + batch.End(); + + return tcs.Task; + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs new file mode 100644 index 00000000000..c409bc5b42c --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs @@ -0,0 +1,69 @@ +// 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 System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; +using Windows.UI.Composition; +using Windows.UI.Core; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache +{ + /// + /// A used to cache reusable instances + /// + /// The type of instances to cache + internal sealed class ThreadSafeCompositionCache + where T : CompositionObject + { + /// + /// The cache of weak references, to avoid memory leaks + /// + private readonly List> cache = new List>(); + + /// + /// The instance used to synchronize concurrent operations on the cache + /// + private readonly AsyncMutex mutex = new AsyncMutex(); + + /// + /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found + /// + /// A used when the requested value is not present in the cache + /// A with the retrieved instance + public async Task TryGetInstanceAsync(Func factory) + { + using (await this.mutex.LockAsync()) + { + // Try to retrieve an valid instance from the cache + foreach (var value in this.cache) + { + if (value.TryGetTarget(out T instance) && + instance.TryGetDispatcher(out CoreDispatcher dispatcher) && dispatcher.HasThreadAccess) + { + return instance; + } + } + + // Create a new instance when needed + T fallback = factory(); + this.cache.Add(new WeakReference(fallback)); + return fallback; + } + } + + /// + /// Performs a cleanup of the cache by removing invalid references + /// + public async void Cleanup() + { + using (await this.mutex.LockAsync()) + { + this.cache.RemoveAll(reference => !reference.TryGetTarget(out T target) || !target.TryGetDispatcher(out _)); + } + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs new file mode 100644 index 00000000000..00a27206872 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs @@ -0,0 +1,122 @@ +// 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 System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; +using Windows.UI.Composition; +using Windows.UI.Core; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache +{ + /// + /// A used to cache reusable instances with an associated key + /// + /// The type of key to classify the items in the cache + /// The type of items stored in the cache + internal sealed class ThreadSafeCompositionMapCache + where TValue : CompositionObject + { + /// + /// The cache of weak references, to avoid memory leaks + /// + private readonly Dictionary>> cache = new Dictionary>>(); + + /// + /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found + /// + /// The key to look for + /// The resulting value, if existing + /// if the target value has been found, otherwise + public bool TryGetInstance(TKey key, out TValue result) + { + // Try to retrieve an valid instance from the cache + if (this.cache.TryGetValue(key, out var values)) + { + foreach (var value in values) + { + if (value.TryGetTarget(out TValue instance) && instance.TryGetDispatcher(out CoreDispatcher dispatcher) && dispatcher.HasThreadAccess) + { + result = instance; + return true; + } + } + } + + // Not found + result = null; + return false; + } + + /// + /// Adds a new value with the specified key to the cache + /// + /// The key of the item to add + /// The value to add + public void Add(TKey key, TValue value) + { + if (this.cache.TryGetValue(key, out var list)) + { + list.Add(new WeakReference(value)); + } + else + { + this.cache.Add(key, new List> { new WeakReference(value) }); + } + } + + /// + /// Adds a new value and removes previous values with the same key, if any + /// + /// The key of the item to add + /// The value to add + public void Overwrite(TKey key, TValue value) + { + this.cache.Remove(key); + + this.cache.Add(key, new List> { new WeakReference(value) }); + } + + /// + /// Performs a cleanup of the cache by removing invalid references + /// + public void Cleanup() + { + foreach (var list in this.cache.Values) + { + list.RemoveAll(reference => !reference.TryGetTarget(out TValue value) || !value.TryGetDispatcher(out _)); + } + + foreach (var key in this.cache.Keys.ToArray()) + { + if (this.cache[key].Count == 0) + { + this.cache.Remove(key); + } + } + } + + /// + /// Clears the cache by removing all the stored items + /// + /// An instance with the existing values before the cleanup + public IReadOnlyList Clear() + { + var values = new List(); + + foreach (var reference in this.cache.Values.SelectMany(list => list)) + { + if (reference.TryGetTarget(out TValue value)) + { + values.Add(value); + } + } + + this.cache.Clear(); + + return values; + } + } +} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs new file mode 100644 index 00000000000..99c3ad35b46 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs @@ -0,0 +1,324 @@ +// 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 System; +using System.Collections.Generic; +using System.Numerics; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Microsoft.Graphics.Canvas; +using Microsoft.Graphics.Canvas.UI; +using Microsoft.Graphics.Canvas.UI.Composition; +using Microsoft.Graphics.Canvas.UI.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache; +using Windows.Foundation; +using Windows.Graphics.DirectX; +using Windows.Graphics.Display; +using Windows.Graphics.Imaging; +using Windows.UI; +using Windows.UI.Composition; +using Windows.UI.Xaml; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers +{ + /// + /// A helper that loads Win2D images and manages an internal cache of instances with the loaded images + /// + public static class Win2DImageHelper + { + /// + /// Gets the maximum time to wait for the Win2D device to be restored in case of initial failure + /// + private const int DeviceLostRecoveryThreshold = 1000; + + /// + /// Synchronization mutex to access the cache and load Win2D images concurrently + /// + private static readonly AsyncMutex Win2DMutex = new AsyncMutex(); + + /// + /// Gets the local cache mapping for previously loaded Win2D images + /// + private static readonly ThreadSafeCompositionMapCache Cache = new ThreadSafeCompositionMapCache(); + + /// + /// 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 Task LoadImageAsync(Uri uri, DpiMode dpiMode, CacheMode cache = CacheMode.Default) + { + return LoadImageAsync(Window.Current.Compositor, uri, dpiMode, cache); + } + + /// + /// Loads a instance with the target image + /// + /// The to use to load the target image + /// 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 Task LoadImageAsync(this CanvasControl canvas, Uri uri, DpiMode dpiMode, CacheMode cacheMode = CacheMode.Default) + { + return LoadImageAsync(Window.Current.Compositor, canvas, uri, dpiMode, cacheMode); + } + + /// + /// Clears the internal cache of Win2D images + /// + /// A sequence of the objects that were present in the cache + /// The returned items should be manually disposed after checking that they are no longer in use in other effect pipelines + public static async Task> ClearCacheAsync() + { + using (await Win2DMutex.LockAsync()) + { + return Cache.Clear(); + } + } + + /// + /// Loads a from the input , and prepares it to be used in a tile effect + /// + /// The resource creator to use to load the image bitmap (it can be the same used later) + /// The compositor instance to use to create the final brush + /// The device to use to process the Win2D image + /// 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( + ICanvasResourceCreator creator, + Compositor compositor, + CanvasDevice canvasDevice, + Uri uri, + DpiMode dpiMode) + { + var displayInformation = DisplayInformation.GetForCurrentView(); + float dpi = displayInformation.LogicalDpi; + + // Explicit try/finally block to emulate the using block from C# 8 on switch assignment + CanvasBitmap bitmap = null; + try + { + // Load the bitmap with the appropriate settings + switch (dpiMode) + { + case DpiMode.UseSourceDpi: bitmap = await CanvasBitmap.LoadAsync(creator, uri); break; + case DpiMode.Default96Dpi: bitmap = await CanvasBitmap.LoadAsync(creator, uri, 96); break; + case DpiMode.DisplayDpi: bitmap = await CanvasBitmap.LoadAsync(creator, uri, dpi); break; + case DpiMode.DisplayDpiWith96AsLowerBound: bitmap = await CanvasBitmap.LoadAsync(creator, uri, dpi >= 96 ? dpi : 96); break; + default: throw new ArgumentOutOfRangeException(nameof(dpiMode), dpiMode, $"Invalid DPI mode: {dpiMode}"); + } + + // Get the device and the target surface + var device = CanvasComposition.CreateCompositionGraphicsDevice(compositor, canvasDevice); + var surface = device.CreateDrawingSurface(default, DirectXPixelFormat.B8G8R8A8UIntNormalized, DirectXAlphaMode.Premultiplied); + + // Calculate the surface size + Size + size = bitmap.Size, + sizeInPixels = new Size(bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height); + CanvasComposition.Resize(surface, sizeInPixels); + + // Create a drawing session for the target surface + using (var session = CanvasComposition.CreateDrawingSession(surface, new Rect(0, 0, sizeInPixels.Width, sizeInPixels.Height), dpi)) + { + // Fill the target surface + session.Clear(Color.FromArgb(0, 0, 0, 0)); + session.DrawImage(bitmap, new Rect(0, 0, size.Width, size.Height), new Rect(0, 0, size.Width, size.Height)); + session.EffectTileSize = new BitmapSize { Width = (uint)size.Width, Height = (uint)size.Height }; + } + + // Setup the effect brush to use + var brush = surface.Compositor.CreateSurfaceBrush(surface); + brush.Stretch = CompositionStretch.None; + + double pixels = displayInformation.RawPixelsPerViewPixel; + + // Adjust the scale if the DPI scaling is greater than 100% + if (pixels > 1) + { + brush.Scale = new Vector2((float)(1 / pixels)); + brush.BitmapInterpolationMode = CompositionBitmapInterpolationMode.NearestNeighbor; + } + + return brush; + } + finally + { + bitmap?.Dispose(); + + // Cleanup leftover references + Cache.Cleanup(); + } + } + + /// + /// Loads a instance with the target image + /// + /// The compositor to use to render the Win2D image + /// The to use to load the target image + /// 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 + internal static async Task LoadImageAsync( + Compositor compositor, + CanvasControl canvas, + Uri uri, + DpiMode dpiMode, + CacheMode cacheMode) + { + var tcs = new TaskCompletionSource(); + + // Loads an image using the input CanvasDevice instance + async Task LoadImageAsync(bool shouldThrow) + { + // Load the image - this will only succeed when there's an available Win2D device + try + { + return await LoadSurfaceBrushAsync(canvas, compositor, canvas.Device, uri, dpiMode); + } + catch when (!shouldThrow) + { + // Win2D error, just ignore and continue + return null; + } + } + + // Handler to create the Win2D image from the input CanvasControl + async void Canvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args) + { + // Cancel previous actions + args.GetTrackedAction()?.Cancel(); + + // Load the image and notify the canvas + var task = LoadImageAsync(false); + var action = task.AsAsyncAction(); + + try + { + args.TrackAsyncAction(action); + + var brush = await task; + + action.Cancel(); + + tcs.TrySetResult(brush); + } + catch (COMException) + { + // Somehow another action was still being tracked + tcs.TrySetResult(null); + } + } + + // Lock the semaphore and check the cache first + using (await Win2DMutex.LockAsync()) + { + if (cacheMode == CacheMode.Default && + Cache.TryGetInstance(uri, out var cached)) + { + return cached; + } + + // Load the image + canvas.CreateResources += Canvas_CreateResources; + try + { + // This will throw and the canvas will re-initialize the Win2D device if needed + await LoadImageAsync(true); + } + catch (ArgumentException) + { + // Just ignore here + } + catch + { + // Win2D messed up big time (this should never happen) + tcs.TrySetResult(null); + } + + await Task.WhenAny(tcs.Task, Task.Delay(DeviceLostRecoveryThreshold).ContinueWith(t => tcs.TrySetResult(null))); + + canvas.CreateResources -= Canvas_CreateResources; + + var brush = tcs.Task.Result; + + // Cache when needed and return the result + if (brush != null) + { + if (cacheMode == CacheMode.Default) + { + Cache.Add(uri, brush); + } + else if (cacheMode == CacheMode.Overwrite) + { + Cache.Overwrite(uri, brush); + } + } + + return brush; + } + } + + /// + /// Loads a instance with the target image from the shared instance + /// + /// The compositor to use to render the Win2D image + /// 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 + internal static async Task LoadImageAsync( + Compositor compositor, + Uri uri, + DpiMode dpiMode, + CacheMode cacheMode) + { + // Lock and check the cache first + using (await Win2DMutex.LockAsync()) + { + uri = uri.ToAppxUri(); + if (cacheMode == CacheMode.Default && Cache.TryGetInstance(uri, out var cached)) + { + return cached; + } + + // Load the image + CompositionSurfaceBrush brush; + try + { + // This will throw and the canvas will re-initialize the Win2D device if needed + var sharedDevice = CanvasDevice.GetSharedDevice(); + brush = await LoadSurfaceBrushAsync(sharedDevice, compositor, sharedDevice, uri, dpiMode); + } + catch + { + // Device error + brush = null; + } + + // Cache when needed and return the result + if (brush != null) + { + if (cacheMode == CacheMode.Default) + { + Cache.Add(uri, brush); + } + else if (cacheMode == CacheMode.Overwrite) + { + Cache.Overwrite(uri, brush); + } + } + + return brush; + } + } + } +} From 8d2a3cbba907ce8f6c78142c0ab1ae599a06c5f3 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 18:02:23 +0100 Subject: [PATCH 02/92] Added PipelineBuilder type --- .../Pipelines/BrushProvider.cs | 56 +++ .../Pipelines/PipelineBuilder.Effects.cs | 405 ++++++++++++++++++ .../PipelineBuilder.Initialization.cs | 183 ++++++++ .../Pipelines/PipelineBuilder.Prebuilt.cs | 270 ++++++++++++ .../Pipelines/PipelineBuilder.cs | 187 ++++++++ 5 files changed, 1101 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs new file mode 100644 index 00000000000..e3bac42a681 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs @@ -0,0 +1,56 @@ +// 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 System; +using System.Diagnostics.Contracts; +using System.Threading.Tasks; +using Windows.UI.Composition; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines +{ + /// + /// A simple container used to store info on a custom composition effect to create + /// + public sealed class BrushProvider + { + /// + /// Gets the name of the target + /// + internal string Name { get; } + + /// + /// Gets the stored effect initializer + /// + internal Func> Initializer { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The name of the target + /// The stored effect initializer + private BrushProvider(string name, Func> initializer) + { + this.Name = name; + this.Initializer = initializer; + } + + /// + /// Creates a new instance with the info on a given to initialize + /// + /// The target effect name + /// A instance that will produce the to use to initialize the effect + /// A instance with the input initializer + [Pure] + public static BrushProvider New(string name, Func initializer) => new BrushProvider(name, () => Task.FromResult(initializer())); + + /// + /// Creates a new instance with the info on a given to initialize + /// + /// The target effect name + /// An asynchronous instance that will produce the to use to initialize the effect + /// A instance with the input initializer + [Pure] + public static BrushProvider New(string name, Func> initializer) => new BrushProvider(name, initializer); + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs new file mode 100644 index 00000000000..f827f058201 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -0,0 +1,405 @@ +// 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 System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; +using Windows.Graphics.Effects; +using Windows.UI; +using Windows.UI.Composition; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines +{ + /// + /// A that allows to build custom effects pipelines and create instances from them + /// + public sealed partial class PipelineBuilder + { + /// + /// Blends two pipelines using a instance with the specified mode + /// + /// The second instance to blend + /// The desired to use to blend the input pipelines + /// The placemeht to use with the two input pipelines + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Blend(PipelineBuilder pipeline, BlendEffectMode mode, Placement placement = Placement.Foreground) + { + PipelineBuilder foreground, background; + if (placement == Placement.Foreground) + { + foreground = this; + background = pipeline; + } + else + { + foreground = pipeline; + background = this; + } + + async Task Factory() => new BlendEffect + { + Foreground = await foreground.sourceProducer(), + Background = await background.sourceProducer(), + Mode = mode + }; + + return new PipelineBuilder(Factory, foreground, background); + } + + /// + /// Blends two pipelines using an instance + /// + /// The second instance to blend + /// The cross fade factor to blend the input effects + /// The placement to use with the two input pipelines + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Mix(PipelineBuilder pipeline, float factor = 0.5f, Placement placement = Placement.Foreground) + { + if (factor < 0 || factor > 1) + { + throw new ArgumentOutOfRangeException(nameof(factor), "The factor must be in the [0,1] range"); + } + + PipelineBuilder foreground, background; + if (placement == Placement.Foreground) + { + foreground = this; + background = pipeline; + } + else + { + foreground = pipeline; + background = this; + } + + async Task Factory() => new CrossFadeEffect + { + CrossFade = factor, + Source1 = await foreground.sourceProducer(), + Source2 = await background.sourceProducer() + }; + + return new PipelineBuilder(Factory, foreground, background); + } + + /// + /// Blends two pipelines using an instance + /// + /// The second instance to blend + /// The cross fade factor to blend the input effects + /// The optional blur animation for the effect + /// The placement to use with the two input pipelines + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Mix(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) + { + if (factor < 0 || factor > 1) + { + throw new ArgumentOutOfRangeException(nameof(factor), "The factor must be in the [0,1] range"); + } + + PipelineBuilder foreground, background; + if (placement == Placement.Foreground) + { + foreground = this; + background = pipeline; + } + else + { + foreground = pipeline; + background = this; + } + + async Task Factory() => new CrossFadeEffect + { + CrossFade = factor, + Source1 = await foreground.sourceProducer(), + Source2 = await background.sourceProducer(), + Name = "Fade" + }; + + animation = (brush, value, ms) => + { + if (value < 0 || value > 1) + { + throw new ArgumentOutOfRangeException(nameof(value), "The factor must be in the [0,1] range"); + } + + return brush.StartAnimationAsync("Fade.CrossFade", value, TimeSpan.FromMilliseconds(ms)); + }; + + return new PipelineBuilder(Factory, foreground, background, new[] { "Fade.CrossFade" }); + } + + /// + /// Blends two pipelines using the provided to do so + /// + /// The blend function to use + /// The background pipeline to blend with the current instance + /// The list of optional animatable properties in the returned effect + /// The list of source parameters that require deferred initialization (see for more info) + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Merge( + Func factory, + PipelineBuilder background, + IEnumerable animations = null, + IEnumerable initializers = null) + { + async Task Factory() => factory(await this.sourceProducer(), await background.sourceProducer()); + + return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); + } + + /// + /// Blends two pipelines using the provided asynchronous to do so + /// + /// The asynchronous blend function to use + /// The background pipeline to blend with the current instance + /// The list of optional animatable properties in the returned effect + /// The list of source parameters that require deferred initialization (see for more info) + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Merge( + Func> factory, + PipelineBuilder background, + IEnumerable animations = null, + IEnumerable initializers = null) + { + async Task Factory() => await factory(await this.sourceProducer(), await background.sourceProducer()); + + return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); + } + + /// + /// Adds a new to the current pipeline + /// + /// The blur amount to apply + /// The parameter for the effect, defaults to + /// The parameter to use, defaults to + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Blur(float blur, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) + { + async Task Factory() => new GaussianBlurEffect + { + BlurAmount = blur, + BorderMode = mode, + Optimization = optimization, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Adds a new to the current pipeline + /// + /// The initial blur amount + /// The optional blur animation for the effect + /// The parameter for the effect, defaults to + /// The parameter to use, defaults to + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Blur(float blur, out EffectAnimation animation, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) + { + async Task Factory() => new GaussianBlurEffect + { + BlurAmount = blur, + BorderMode = mode, + Optimization = optimization, + Source = await this.sourceProducer(), + Name = "Blur" + }; + + animation = (brush, value, ms) => brush.StartAnimationAsync("Blur.BlurAmount", value, TimeSpan.FromMilliseconds(ms)); + + return new PipelineBuilder(this, Factory, new[] { "Blur.BlurAmount" }); + } + + /// + /// Adds a new to the current pipeline + /// + /// The saturation amount for the new effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Saturation(float saturation) + { + if (saturation < 0 || saturation > 1) + { + throw new ArgumentOutOfRangeException(nameof(saturation), "The saturation must be in the [0,1] range"); + } + + async Task Factory() => new SaturationEffect + { + Saturation = saturation, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Adds a new to the current pipeline + /// + /// The initial saturation amount for the new effect + /// The optional saturation animation for the effect + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Saturation(float saturation, out EffectAnimation animation) + { + if (saturation < 0 || saturation > 1) + { + throw new ArgumentOutOfRangeException(nameof(saturation), "The saturation must be in the [0,1] range"); + } + + async Task Factory() => new SaturationEffect + { + Saturation = saturation, + Source = await this.sourceProducer(), + Name = "Saturation" + }; + + animation = (brush, value, ms) => + { + if (value < 0 || value > 1) + { + throw new ArgumentOutOfRangeException(nameof(value), "The saturation must be in the [0,1] range"); + } + + return brush.StartAnimationAsync("Saturation.Saturation", value, TimeSpan.FromMilliseconds(ms)); + }; + + return new PipelineBuilder(this, Factory, new[] { "Saturation.Saturation" }); + } + + /// + /// Adds a new to the current pipeline + /// + /// The opacity value to apply to the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Opacity(float opacity) + { + if (opacity < 0 || opacity > 1) + { + throw new ArgumentOutOfRangeException(nameof(opacity), "The opacity must be in the [0,1] range"); + } + + async Task Factory() => new OpacityEffect + { + Opacity = opacity, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Adds a new to the current pipeline + /// + /// The opacity value to apply to the pipeline + /// The optional opacity animation for the effect + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) + { + if (opacity < 0 || opacity > 1) + { + throw new ArgumentOutOfRangeException(nameof(opacity), "The opacity must be in the [0,1] range"); + } + + async Task Factory() => new OpacityEffect + { + Opacity = opacity, + Source = await this.sourceProducer(), + Name = "Opacity" + }; + + animation = (brush, value, ms) => + { + if (value < 0 || value > 1) + { + throw new ArgumentOutOfRangeException(nameof(value), "The opacity must be in the [0,1] range"); + } + + return brush.StartAnimationAsync("Opacity.Opacity", value, TimeSpan.FromMilliseconds(ms)); + }; + + return new PipelineBuilder(this, Factory, new[] { "Opacity.Opacity" }); + } + + /// + /// Applies a tint color on the current pipeline + /// + /// The tint color to use + /// The amount of tint to apply over the current effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Tint(Color color, float mix) + { + return FromColor(color).Mix(this, mix); + } + + /// + /// Applies a tint color on the current pipeline + /// + /// The tint color to use + /// The initial amount of tint to apply over the current effect + /// The optional tint animation for the effect + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animation) + { + return FromColor(color).Mix(this, mix, out animation); + } + + /// + /// Applies a custom effect to the current pipeline + /// + /// A that takes the current instance and produces a new effect to display + /// The list of optional animatable properties in the returned effect + /// The list of source parameters that require deferred initialization (see for more info) + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Effect( + Func factory, + IEnumerable animations = null, + IEnumerable initializers = null) + { + async Task Factory() => factory(await this.sourceProducer()); + + return new PipelineBuilder(this, Factory, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); + } + + /// + /// Applies a custom effect to the current pipeline + /// + /// An asynchronous that takes the current instance and produces a new effect to display + /// The list of optional animatable properties in the returned effect + /// The list of source parameters that require deferred initialization (see for more info) + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Effect( + Func> factory, + IEnumerable animations = null, + IEnumerable initializers = null) + { + async Task Factory() => await factory(await this.sourceProducer()); + + return new PipelineBuilder(this, Factory, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs new file mode 100644 index 00000000000..14c1c8a18ab --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -0,0 +1,183 @@ +// 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 System; +using System.Diagnostics.Contracts; +using System.Threading.Tasks; +using Microsoft.Graphics.Canvas; +using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System; +using Microsoft.Toolkit.Uwp.UI.Media.Helpers; +using Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache; +using Windows.Graphics.Effects; +using Windows.UI; +using Windows.UI.Composition; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Hosting; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines +{ + /// + /// A that allows to build custom effects pipelines and create instances from them + /// + public sealed partial class PipelineBuilder + { + /// + /// The cache manager for backdrop brushes + /// + private static readonly ThreadSafeCompositionCache BackdropBrushCache = new ThreadSafeCompositionCache(); + + /// + /// The cache manager for host backdrop brushes + /// + private static readonly ThreadSafeCompositionCache HostBackdropBrushCache = new ThreadSafeCompositionCache(); + + /// + /// Starts a new pipeline from the returned by + /// + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromBackdropBrush() + { + return new PipelineBuilder(() => BackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor.CreateBackdropBrush)); + } + + /// + /// Starts a new pipeline from the returned by + /// + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromHostBackdropBrush() + { + return new PipelineBuilder(() => HostBackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor.CreateHostBackdropBrush)); + } + + /// + /// Starts a new pipeline from a solid with the specified color + /// + /// The desired color for the initial + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromColor(Color color) + { + return new PipelineBuilder(() => Task.FromResult(new ColorSourceEffect { Color = color })); + } + + /// + /// Starts a new pipeline from the input instance + /// + /// A that synchronously returns a instance to start the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromBrush(Func factory) + { + return new PipelineBuilder(() => Task.FromResult(factory())); + } + + /// + /// Starts a new pipeline from the input instance + /// + /// A that asynchronously returns a instance to start the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromBrush(Func> factory) + { + return new PipelineBuilder(factory); + } + + /// + /// Starts a new pipeline from the input instance + /// + /// A that synchronously returns a instance to start the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromEffect(Func factory) + { + return new PipelineBuilder(() => Task.FromResult(factory())); + } + + /// + /// Starts a new pipeline from the input instance + /// + /// A that asynchronously returns a instance to start the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromEffect(Func> factory) + { + return new PipelineBuilder(factory); + } + + /// + /// Starts a new pipeline from a Win2D image + /// + /// The relative path for the image to load (eg. "/Assets/image.png") + /// Indicates the desired DPI mode to use when loading the image + /// The cache mode to use to load the image + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromImage(string relativePath, DpiMode dpiMode = DpiMode.DisplayDpiWith96AsLowerBound, CacheMode cacheMode = CacheMode.Default) + { + return FromImage(relativePath.ToAppxUri(), dpiMode, cacheMode); + } + + /// + /// Starts a new pipeline from a Win2D image + /// + /// The path for the image to load + /// Indicates the desired DPI mode to use when loading the image + /// The cache mode to use to load the image + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromImage(Uri uri, DpiMode dpiMode = DpiMode.DisplayDpiWith96AsLowerBound, CacheMode cacheMode = CacheMode.Default) + { + return new PipelineBuilder(async () => await Win2DImageHelper.LoadImageAsync(Window.Current.Compositor, uri, dpiMode, cacheMode)); + } + + /// + /// Starts a new pipeline from a Win2D image tiled to cover the available space + /// + /// The relative path for the image to load (eg. "/Assets/image.png") + /// Indicates the desired DPI mode to use when loading the image + /// The cache mode to use to load the image + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromTiles(string relativePath, DpiMode dpiMode = DpiMode.DisplayDpiWith96AsLowerBound, CacheMode cacheMode = CacheMode.Default) + { + return FromTiles(relativePath.ToAppxUri(), dpiMode, cacheMode); + } + + /// + /// Starts a new pipeline from a Win2D image tiled to cover the available space + /// + /// The path for the image to load + /// Indicates the desired DPI mode to use when loading the image + /// The cache mode to use to load the image + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromTiles(Uri uri, DpiMode dpiMode = DpiMode.DisplayDpiWith96AsLowerBound, CacheMode cacheMode = CacheMode.Default) + { + var image = FromImage(uri, dpiMode, cacheMode); + + async Task Factory() => new BorderEffect + { + ExtendX = CanvasEdgeBehavior.Wrap, + ExtendY = CanvasEdgeBehavior.Wrap, + Source = await image.sourceProducer() + }; + + return new PipelineBuilder(image, Factory); + } + + /// + /// Starts a new pipeline from the returned by on the input + /// + /// The source to use to create the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromUIElement(UIElement element) + { + return new PipelineBuilder(() => Task.FromResult(ElementCompositionPreview.GetElementVisual(element).Compositor.CreateBackdropBrush())); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs new file mode 100644 index 00000000000..d8673c2434a --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -0,0 +1,270 @@ +// 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 System; +using System.Diagnostics.Contracts; +using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System; +using Windows.UI; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines +{ + /// + /// A that allows to build custom effects pipelines and create instances from them + /// + 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 relative path for the noise texture to load (eg. "/Assets/noise.png") + /// 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, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) + { + return FromHostBackdropAcrylic(tint, mix, noiseRelativePath.ToAppxUri(), cacheMode); + } + + /// + /// 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 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, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) + { + return + FromHostBackdropBrush() + .Effect(source => new LuminanceToAlphaEffect { Source = source }) + .Opacity(0.4f) + .Blend(FromHostBackdropBrush(), BlendEffectMode.Multiply) + .Tint(tint, mix) + .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + /// + /// 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 animation to apply on the tint color of the effect + /// The relative path for the noise texture to load (eg. "/Assets/noise.png") + /// 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, out EffectAnimation tintAnimation, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) + { + return FromHostBackdropAcrylic(tint, mix, out tintAnimation, noiseRelativePath.ToAppxUri(), cacheMode); + } + + /// + /// 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 animation to apply on the tint color of 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, float mix, out EffectAnimation tintAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) + { + return + FromHostBackdropBrush() + .Effect(source => new LuminanceToAlphaEffect { Source = source }) + .Opacity(0.4f) + .Blend(FromHostBackdropBrush(), BlendEffectMode.Multiply) + .Tint(tint, mix, out tintAnimation) + .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + /// + /// 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 relative path for the noise texture to load (eg. "/Assets/noise.png") + /// 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, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) + { + return FromBackdropAcrylic(tint, mix, blur, noiseRelativePath.ToAppxUri(), cacheMode); + } + + /// + /// 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 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, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) + { + return + FromBackdropBrush() + .Tint(tint, mix) + .Blur(blur) + .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + /// + /// 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 animation to apply on the tint color of the effect + /// The amount of blur to apply to the acrylic brush + /// The relative path for the noise texture to load (eg. "/Assets/noise.png") + /// 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, + out EffectAnimation tintAnimation, + float blur, + string noiseRelativePath, + CacheMode cacheMode = CacheMode.Default) + { + return FromBackdropAcrylic(tint, mix, out tintAnimation, blur, noiseRelativePath.ToAppxUri(), cacheMode); + } + + /// + /// 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 animation to apply on the tint color of the 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, + out EffectAnimation tintAnimation, + float blur, + Uri noiseUri, + CacheMode cacheMode = CacheMode.Default) + { + return + FromBackdropBrush() + .Tint(tint, mix, out tintAnimation) + .Blur(blur) + .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + /// + /// 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 animation to apply on the blur effect in the pipeline + /// The relative path for the noise texture to load (eg. "/Assets/noise.png") + /// 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, + out EffectAnimation blurAnimation, + string noiseRelativePath, + CacheMode cacheMode = CacheMode.Default) + { + return FromBackdropAcrylic(tint, mix, blur, out blurAnimation, noiseRelativePath.ToAppxUri(), cacheMode); + } + + /// + /// 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 animation to apply on the blur effect in the pipeline + /// 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, + out EffectAnimation blurAnimation, + Uri noiseUri, + CacheMode cacheMode = CacheMode.Default) + { + return + FromBackdropBrush() + .Tint(tint, mix) + .Blur(blur, out blurAnimation) + .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + /// + /// 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 animation to apply on the tint color of the effect + /// The amount of blur to apply to the acrylic brush + /// The animation to apply on the blur effect in the pipeline + /// The relative path for the noise texture to load (eg. "/Assets/noise.png") + /// 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, + out EffectAnimation tintAnimation, + float blur, + out EffectAnimation blurAnimation, + string noiseRelativePath, + CacheMode cacheMode = CacheMode.Default) + { + return FromBackdropAcrylic(tint, mix, out tintAnimation, blur, out blurAnimation, noiseRelativePath.ToAppxUri(), cacheMode); + } + + /// + /// 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 animation to apply on the tint color of the effect + /// The amount of blur to apply to the acrylic brush + /// The animation to apply on the blur effect in the pipeline + /// 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, + out EffectAnimation tintAnimation, + float blur, + out EffectAnimation blurAnimation, + Uri noiseUri, + CacheMode cacheMode = CacheMode.Default) + { + return + FromBackdropBrush() + .Tint(tint, mix, out tintAnimation) + .Blur(blur, out blurAnimation) + .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs new file mode 100644 index 00000000000..dc4ceeb2e5a --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -0,0 +1,187 @@ +// 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 System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Collections.Generic; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; +using Windows.Graphics.Effects; +using Windows.UI.Composition; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Hosting; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines +{ + /// + /// A that represents a custom effect animation that can be applied to a + /// + /// The target instance to use to start the animation + /// The animation target value + /// The animation duration, in milliseconds + /// A that completes when the target animation completes + public delegate Task EffectAnimation(CompositionBrush brush, float value, int ms); + + /// + /// A that allows to build custom effects pipelines and create instances from them + /// + public sealed partial class PipelineBuilder + { + /// + /// The instance used to produce the output for this pipeline + /// + private readonly Func> sourceProducer; + + /// + /// The collection of animation properties present in the current pipeline + /// + private readonly IReadOnlyCollection animationProperties; + + /// + /// The collection of info on the parameters that need to be initialized after creating the final + /// + private readonly IReadOnlyDictionary>> lazyParameters; + + /// + /// Initializes a new instance of the class. + /// + /// A instance that will return the initial + private PipelineBuilder(Func> factory) + { + string + guid = Guid.NewGuid().ToString("N"), + id = Regex.Replace(guid, @"\d", m => ((char)('g' + m.Value[0] - '0')).ToString()); + + this.sourceProducer = () => Task.FromResult(new CompositionEffectSourceParameter(id)); + this.lazyParameters = new Dictionary>> { { id, factory } }; + this.animationProperties = new string[0]; + } + + /// + /// Initializes a new instance of the class. + /// + /// A instance that will produce the new to add to the pipeline + /// The collection of animation properties for the new effect + /// The collection of instances that needs to be initialized for the new effect + private PipelineBuilder( + Func> factory, + IReadOnlyCollection animations, + IReadOnlyDictionary>> lazy) + { + this.sourceProducer = factory; + this.animationProperties = animations; + this.lazyParameters = lazy; + } + + /// + /// Initializes a new instance of the class. + /// + /// A instance that will return the initial + private PipelineBuilder(Func> factory) + : this( + factory, + new string[0], + new Dictionary>>()) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The source pipeline to attach the new effect to + /// A instance that will produce the new to add to the pipeline + /// The collection of animation properties for the new effect + /// The collection of instances that needs to be initialized for the new effect + private PipelineBuilder( + PipelineBuilder source, + Func> factory, + IReadOnlyCollection animations = null, + IReadOnlyDictionary>> lazy = null) + : this( + factory, + animations?.Merge(source.animationProperties) ?? source.animationProperties, + lazy?.Merge(source.lazyParameters) ?? source.lazyParameters) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// A instance that will produce the new to add to the pipeline + /// The first pipeline to merge + /// The second pipeline to merge + /// The collection of animation properties for the new effect + /// The collection of instances that needs to be initialized for the new effect + private PipelineBuilder( + Func> factory, + PipelineBuilder a, + PipelineBuilder b, + IReadOnlyCollection animations = null, + IReadOnlyDictionary>> lazy = null) + : this( + factory, + animations?.Merge(a.animationProperties.Merge(b.animationProperties)) ?? a.animationProperties.Merge(b.animationProperties), + lazy?.Merge(a.lazyParameters.Merge(b.lazyParameters)) ?? a.lazyParameters.Merge(b.lazyParameters)) + { + } + + /// + /// Builds a instance from the current effects pipeline + /// + /// A that returns the final instance to use + [Pure] + public async Task BuildAsync() + { + var effect = await this.sourceProducer() as IGraphicsEffect; + + // Validate the pipeline + if (effect is null) + { + throw new InvalidOperationException("The pipeline doesn't contain a valid effects sequence"); + } + + // Build the effects factory + var factory = this.animationProperties.Count > 0 + ? Window.Current.Compositor.CreateEffectFactory(effect, this.animationProperties) + : Window.Current.Compositor.CreateEffectFactory(effect); + + // Create the effect factory and apply the final effect + var effectBrush = factory.CreateBrush(); + foreach (var pair in this.lazyParameters) + { + effectBrush.SetSourceParameter(pair.Key, await pair.Value()); + } + + // Cleanup + BackdropBrushCache.Cleanup(); + HostBackdropBrushCache.Cleanup(); + + return effectBrush; + } + + /// + /// Builds the current pipeline and creates a that is applied to the input + /// + /// The target to apply the brush to + /// An optional to use to bind the size of the created brush + /// A that returns the final instance to use + public async Task AttachAsync(UIElement target, UIElement reference = null) + { + var visual = Window.Current.Compositor.CreateSpriteVisual(); + + visual.Brush = await this.BuildAsync(); + + ElementCompositionPreview.SetElementChildVisual(target, visual); + + if (reference != null) + { + visual.BindSize(reference); + } + + return visual; + } + } +} From c56259baf2668ce01976a43fe7d6b99c671a8597 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 18:17:05 +0100 Subject: [PATCH 03/92] Added acrylic and tiles brushes --- .../Brushes/AcrylicBrush.cs | 55 +++++++++ .../Base/XamlCompositionEffectBrushBase.cs | 104 ++++++++++++++++++ .../Brushes/TilesBrush.cs | 25 +++++ 3 files changed, 184 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs new file mode 100644 index 00000000000..4376fd71ed1 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -0,0 +1,55 @@ +// 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 System; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; +using Windows.UI; +using Windows.UI.Xaml.Media; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +{ + /// + /// A that implements an acrylic effect with customizable parameters + /// + public sealed class AcrylicBrush : XamlCompositionEffectBrushBase + { + /// + /// Gets or sets the source mode for the effect + /// + public AcrylicBackgroundSource Source { get; set; } + + /// + /// Gets or sets the blur amount for the effect + /// + /// This property is ignored when the active mode is + public double BlurAmount { get; set; } + + /// + /// Gets or sets the tint for the effect + /// + public Color Tint { get; set; } + + /// + /// Gets or sets the color for the tint effect + /// + public double TintMix { get; set; } + + /// + /// Gets or sets the to the texture to use + /// + public Uri TextureUri { get; set; } + + /// + protected override PipelineBuilder OnBrushRequested() + { + switch (this.Source) + { + case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic(this.Tint, (float)this.TintMix, (float)this.BlurAmount, this.TextureUri); + case AcrylicBackgroundSource.HostBackdrop: return PipelineBuilder.FromHostBackdropAcrylic(this.Tint, (float)this.TintMix, this.TextureUri); + default: throw new ArgumentOutOfRangeException(nameof(this.Source), $"Invalid acrylic source: {this.Source}"); + } + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs new file mode 100644 index 00000000000..2170426aab1 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs @@ -0,0 +1,104 @@ +// 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.Extensions.System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; +using Windows.UI.Xaml.Media; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base +{ + /// + /// A custom that's ready to be used with a custom pipeline + /// + public abstract class XamlCompositionEffectBrushBase : XamlCompositionBrushBase + { + /// + /// The initialization instance + /// + private readonly AsyncMutex connectedMutex = new AsyncMutex(); + + /// + /// A method that builds and returns the pipeline to use in the current instance. + /// This method can also be used to store any needed instances in local fields, for later use (they will need to be called upon ). + /// + /// A instance to create the brush to display + protected abstract PipelineBuilder OnBrushRequested(); + + private bool _isEnabled = true; + + /// + /// Gets or sets a value indicating whether the current brush is using the provided pipeline, or the fallback color + /// + public bool IsEnabled + { + get => this._isEnabled; + set => this.OnEnabledToggled(value); + } + + /// + protected override async void OnConnected() + { + using (await this.connectedMutex.LockAsync()) + { + if (this.CompositionBrush == null) + { + if (this._isEnabled) + { + this.CompositionBrush = await this.OnBrushRequested().BuildAsync(); + } + else + { + this.CompositionBrush = await PipelineBuilder.FromColor(this.FallbackColor).BuildAsync(); + } + } + } + + base.OnConnected(); + } + + /// + protected override async void OnDisconnected() + { + using (await this.connectedMutex.LockAsync()) + { + if (this.CompositionBrush != null) + { + this.CompositionBrush.Dispose(); + this.CompositionBrush = null; + } + } + + base.OnDisconnected(); + } + + /// + /// Updates the property depending on the input value + /// + /// The new value being set to the property + protected async void OnEnabledToggled(bool value) + { + using (await this.connectedMutex.LockAsync()) + { + if (this._isEnabled == value) + { + return; + } + + this._isEnabled = value; + + if (this.CompositionBrush != null) + { + if (this._isEnabled) + { + this.CompositionBrush = await this.OnBrushRequested().BuildAsync(); + } + else + { + this.CompositionBrush = await PipelineBuilder.FromColor(this.FallbackColor).BuildAsync(); + } + } + } + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs new file mode 100644 index 00000000000..d6e893cf97e --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs @@ -0,0 +1,25 @@ +// 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 System; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +{ + /// + /// A that displays a tiled noise texture + /// + public sealed class TilesBrush : XamlCompositionEffectBrushBase + { + /// + /// Gets or sets the to the texture to use + /// + /// This property must be initialized before using the brush + public Uri TextureUri { get; set; } + + /// + protected override PipelineBuilder OnBrushRequested() => PipelineBuilder.FromTiles(this.TextureUri); + } +} From 5cf2d7681aeaeb61a43ebafa78d5d49bb46f8d27 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 18:17:58 +0100 Subject: [PATCH 04/92] Added XamlCompositionBrush type --- .../Brushes/XamlCompositionBrush.cs | 72 +++++++++++++++++++ .../Pipelines/PipelineBuilder.cs | 11 +++ 2 files changed, 83 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs new file mode 100644 index 00000000000..d241685ed6a --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs @@ -0,0 +1,72 @@ +// 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 System; +using System.Diagnostics.Contracts; +using System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +{ + /// + /// A that represents a custom effect animation that can be applied to a instance + /// + /// The animation target value + /// The animation duration, in milliseconds + /// A that completes when the target animation completes + public delegate Task XamlEffectAnimation(float value, int ms); + + /// + /// A simple that can be used to quickly create XAML brushes from arbitrary pipelines + /// + public sealed class XamlCompositionBrush : XamlCompositionEffectBrushBase + { + /// + /// Gets the pipeline for the current instance + /// + public PipelineBuilder Pipeline { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The instance to create the effect + public XamlCompositionBrush(PipelineBuilder pipeline) => this.Pipeline = pipeline; + + /// + /// Binds an to the composition brush in the current instance + /// + /// The input animation + /// The resulting animation + /// The current instance + [Pure] + public XamlCompositionBrush Bind(EffectAnimation animation, out XamlEffectAnimation bound) + { + bound = (value, ms) => animation(this.CompositionBrush, value, ms); + + return this; + } + + /// + protected override PipelineBuilder OnBrushRequested() => this.Pipeline; + + /// + /// Clones the current instance by rebuilding the source . Use this method to reuse the same effects pipeline on a different + /// + /// A instance using the current effects pipeline + [Pure] + public XamlCompositionBrush Clone() + { + if (this.Dispatcher.HasThreadAccess) + { + throw new InvalidOperationException("The current thread already has access to the brush dispatcher, so a clone operation is not necessary. " + + "You can just assign this brush to an arbitrary number of controls and it will still work correctly. " + + "This method is only meant to be used to create a new instance of this brush using the same pipeline, " + + "on threads that can't access the current instance, for example in secondary app windows."); + } + + return new XamlCompositionBrush(this.Pipeline); + } + } +} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index dc4ceeb2e5a..1c4c7637333 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -7,6 +7,7 @@ using System.Diagnostics.Contracts; using System.Text.RegularExpressions; using System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes; using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Collections.Generic; using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; using Windows.Graphics.Effects; @@ -183,5 +184,15 @@ public async Task AttachAsync(UIElement target, UIElement referenc return visual; } + + /// + /// Creates a new from the current effects pipeline + /// + /// A instance ready to be displayed + [Pure] + public XamlCompositionBrush AsBrush() + { + return new XamlCompositionBrush(this); + } } } From cc3206b5decb2f52bc79949e04cc992820257084 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 18:22:58 +0100 Subject: [PATCH 05/92] Added Win2D/Composition effects --- .../Effects/Abstract/ImageEffectBase.cs | 30 +++++++++++++ .../Effects/Abstract/ValueEffectBase.cs | 19 ++++++++ .../Effects/AcrylicEffect.cs | 43 +++++++++++++++++++ .../Effects/BackdropEffect.cs | 20 +++++++++ .../Effects/BlendEffect.cs | 31 +++++++++++++ .../Effects/BlurEffect.cs | 15 +++++++ .../Effects/ImageEffect.cs | 15 +++++++ .../Effects/Interfaces/IPipelineEffect.cs | 15 +++++++ .../Effects/LuminanceEffect.cs | 15 +++++++ .../Effects/OpacityEffect.cs | 15 +++++++ .../Effects/SaturationEffect.cs | 15 +++++++ .../Effects/SolidColorEffect.cs | 20 +++++++++ .../Effects/TileEffect.cs | 15 +++++++ .../Effects/TintEffect.cs | 25 +++++++++++ 14 files changed, 293 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs new file mode 100644 index 00000000000..e388189a3cd --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs @@ -0,0 +1,30 @@ +// 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 System; +using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; + +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 + { + /// + /// Gets or sets the for the image to load + /// + public Uri Uri { get; set; } + + /// + /// Gets or sets the DPI mode used to render the image (the default is ) + /// + public DpiMode DPIMode { get; set; } = DpiMode.DisplayDpiWith96AsLowerBound; + + /// + /// Gets or sets the cache mode to use when loading the image (the default is ) + /// + public CacheMode CacheMode { get; set; } = CacheMode.Default; + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs new file mode 100644 index 00000000000..5e912a8c86b --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ValueEffectBase.cs @@ -0,0 +1,19 @@ +// 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.Effects.Interfaces; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Abstract +{ + /// + /// 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; } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs new file mode 100644 index 00000000000..715a839070e --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs @@ -0,0 +1,43 @@ +// 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 System; +using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; +using Windows.UI; +using Windows.UI.Xaml.Media; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A custom acrylic effect that can be inserted into a pipeline + /// + public sealed class AcrylicEffect : IPipelineEffect + { + /// + /// Gets or sets the source mode for the effect + /// + public AcrylicBackgroundSource Source { get; set; } + + /// + /// Gets or sets the blur amount for the effect + /// + /// This property is ignored when the active mode is + public double BlurAmount { get; set; } + + /// + /// Gets or sets the tint for the effect + /// + public Color Tint { get; set; } + + /// + /// Gets or sets the color for the tint effect + /// + public double TintMix { get; set; } + + /// + /// Gets or sets the to the texture to use + /// + public Uri TextureUri { get; set; } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.cs new file mode 100644 index 00000000000..5b20e450dcb --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BackdropEffect.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.Effects.Interfaces; +using Windows.UI.Xaml.Media; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A backdrop effect that can sample from a specified source + /// + public sealed class BackdropEffect : IPipelineEffect + { + /// + /// Gets or sets the backdrop source to use to render the effect + /// + public AcrylicBackgroundSource Source { get; set; } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs new file mode 100644 index 00000000000..511e9eb54f2 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -0,0 +1,31 @@ +// 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 System.Collections.Generic; +using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A blend effect that merges the current pipeline with an input one + /// + public sealed class BlendEffect : IPipelineEffect + { + /// + /// Gets or sets the input pipeline to merge with the current instance + /// + public IList Input { get; set; } = new List(); + + /// + /// Gets or sets the blending mode to use (the default mode is ) + /// + public BlendEffectMode Mode { get; set; } + + /// + /// Gets or sets the placement of the input pipeline with respect to the current one (the default is ) + /// + public Placement Placement { get; set; } = Placement.Foreground; + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs new file mode 100644 index 00000000000..1814d3200be --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A gaussian blur effect + /// + public sealed class BlurEffect : ValueEffectBase + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs new file mode 100644 index 00000000000..d95dc44b93d --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ImageEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// An image effect, which displays an image loaded as a Win2D surface + /// + public sealed class ImageEffect : ImageEffectBase + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs new file mode 100644 index 00000000000..1750e362a64 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs @@ -0,0 +1,15 @@ +// 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 FluentExtensions.UI.Brushes.Brushes.Xaml; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces +{ + /// + /// The base for all the pipeline effects to be used in a + /// + public interface IPipelineEffect + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceEffect.cs new file mode 100644 index 00000000000..67183aacb39 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Interfaces; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A luminance effect which directly replicates + /// + public sealed class LuminanceEffect : IPipelineEffect + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs new file mode 100644 index 00000000000..95aabcbb97b --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A simple opacity effect + /// + public sealed class OpacityEffect : ValueEffectBase + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs new file mode 100644 index 00000000000..139f40eb129 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A saturation effect + /// + public sealed class SaturationEffect : ValueEffectBase + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs new file mode 100644 index 00000000000..b5723f2f14f --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.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.Effects.Interfaces; +using Windows.UI; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A simple effect that renders a solid color on the available surface + /// + public sealed class SolidColorEffect : IPipelineEffect + { + /// + /// Gets or sets the color to display + /// + public Color Color { get; set; } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs new file mode 100644 index 00000000000..115b7cc7a3a --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// An effect that loads an image and replicates it to cover all the available surface area + /// + public sealed class TileEffect : ImageEffectBase + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs new file mode 100644 index 00000000000..43071e4fdfc --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -0,0 +1,25 @@ +// 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.Effects.Interfaces; +using Windows.UI; + +namespace FluentExtensions.UI.Brushes.Brushes.Effects +{ + /// + /// A tint effect with a customizable opacity + /// + public sealed class TintEffect : IPipelineEffect + { + /// + /// Gets or sets the tint color to use + /// + public Color Color { get; set; } + + /// + /// Gets or sets the opacity of the tint effect + /// + public double Opacity { get; set; } + } +} From 137352eaf49948064044d6562fdc416d71266737 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 18:27:36 +0100 Subject: [PATCH 06/92] Added pipeline brush --- .../Brushes/PipelineBrush.cs | 107 ++++++++++++++++++ .../Effects/Interfaces/IPipelineEffect.cs | 2 +- 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs new file mode 100644 index 00000000000..9f458754d49 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.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; +using OpacityEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.OpacityEffect; +using SaturationEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.SaturationEffect; +using TileEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TileEffect; +using TintEffect = FluentExtensions.UI.Brushes.Brushes.Effects.TintEffect; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +{ + /// + /// A that renders a customizable Composition/Win2D effects pipeline + /// + public sealed class PipelineBrush : XamlCompositionEffectBrushBase + { + /// + /// Builds a new effects pipeline from the input effects sequence + /// + /// 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)); + } + + /// + /// Starts a new composition pipeline from the given effect + /// + /// 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.FromBackdropBrush(); + case BackdropEffect backdrop when backdrop.Source == AcrylicBackgroundSource.HostBackdrop: + return PipelineBuilder.FromHostBackdropBrush(); + case SolidColorEffect color: + return PipelineBuilder.FromColor(color.Color); + case ImageEffect image: + return PipelineBuilder.FromImage(image.Uri, image.DPIMode, image.CacheMode); + case TileEffect tile: + return PipelineBuilder.FromTiles(tile.Uri, tile.DPIMode, tile.CacheMode); + case AcrylicEffect acrylic 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()}"); + } + } + + /// + /// 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) + { + switch (effect) + { + case OpacityEffect opacity: + return builder.Opacity((float)opacity.Value); + case LuminanceEffect _: + return builder.Effect(source => new LuminanceToAlphaEffect { Source = source }); + case TintEffect tint: + return builder.Tint(tint.Color, (float)tint.Opacity); + case BlurEffect blur: + return builder.Blur((float)blur.Value); + case SaturationEffect saturation: + return builder.Saturation((float)saturation.Value); + case BlendEffect blend: + return builder.Blend(Build(blend.Input), blend.Mode, blend.Placement); + default: + throw new ArgumentException($"Invalid pipeline effect: {effect.GetType()}"); + } + } + + /// + protected override PipelineBuilder OnBrushRequested() + { + return Build(this.Effects); + } + + /// + /// 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/Interfaces/IPipelineEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs index 1750e362a64..b8166293da3 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. -using FluentExtensions.UI.Brushes.Brushes.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces { From 59fc3e1516dbf8999c027d526d1219eddda44d71 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 19:48:48 +0100 Subject: [PATCH 07/92] Minor code styling tweaks --- .../Helpers/Cache/ThreadSafeCompositionCache.cs | 5 ++--- .../Helpers/Cache/ThreadSafeCompositionMapCache.cs | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs index c409bc5b42c..5fe8140bc8c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs @@ -8,7 +8,6 @@ using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks; using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; using Windows.UI.Composition; -using Windows.UI.Core; namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache { @@ -41,8 +40,8 @@ public async Task TryGetInstanceAsync(Func factory) // Try to retrieve an valid instance from the cache foreach (var value in this.cache) { - if (value.TryGetTarget(out T instance) && - instance.TryGetDispatcher(out CoreDispatcher dispatcher) && dispatcher.HasThreadAccess) + if (value.TryGetTarget(out var instance) && + instance.TryGetDispatcher(out var dispatcher) && dispatcher.HasThreadAccess) { return instance; } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs index 00a27206872..6f6e22c33e8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs @@ -7,7 +7,6 @@ using System.Linq; using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; using Windows.UI.Composition; -using Windows.UI.Core; namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache { @@ -37,7 +36,7 @@ public bool TryGetInstance(TKey key, out TValue result) { foreach (var value in values) { - if (value.TryGetTarget(out TValue instance) && instance.TryGetDispatcher(out CoreDispatcher dispatcher) && dispatcher.HasThreadAccess) + if (value.TryGetTarget(out var instance) && instance.TryGetDispatcher(out var dispatcher) && dispatcher.HasThreadAccess) { result = instance; return true; @@ -108,7 +107,7 @@ public IReadOnlyList Clear() foreach (var reference in this.cache.Values.SelectMany(list => list)) { - if (reference.TryGetTarget(out TValue value)) + if (reference.TryGetTarget(out var value)) { values.Add(value); } From 64336818ae7f7f9f1645eaaeed3219c025549e2a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 20:18:22 +0100 Subject: [PATCH 08/92] Switched composition cache to ConditionalWeakTable --- .../Cache/CompositionObjectCache{T}.cs | 55 +++++++++++++++ .../Cache/ThreadSafeCompositionCache.cs | 68 ------------------- .../PipelineBuilder.Initialization.cs | 8 +-- .../Pipelines/PipelineBuilder.cs | 4 -- 4 files changed, 59 insertions(+), 76 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs delete mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs new file mode 100644 index 00000000000..1712fa6c40e --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs @@ -0,0 +1,55 @@ +// 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 System; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks; +using Windows.UI.Composition; +using Windows.UI.Core; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache +{ + /// + /// A used to cache reusable instances in each UI thread + /// + /// The type of instances to cache + internal sealed class CompositionObjectCache + where T : CompositionObject + { + /// + /// The cache of weak references, to avoid memory leaks + /// + private readonly ConditionalWeakTable> cache = new ConditionalWeakTable>(); + + /// + /// The instance used to synchronize concurrent operations on the cache + /// + private readonly AsyncMutex mutex = new AsyncMutex(); + + /// + /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found + /// + /// The current instance to get the value for + /// A instance used to produce a instance + /// A that returns a instance that is linked to + public async Task TryGetInstanceAsync(Compositor dispatcher, Func producer) + { + using (await this.mutex.LockAsync()) + { + if (this.cache.TryGetValue(dispatcher, out var reference) && + reference.TryGetTarget(out var instance)) + { + return instance; + } + + // Create a new instance when needed + var fallback = producer(dispatcher); + this.cache.AddOrUpdate(dispatcher, new WeakReference(fallback)); + + return fallback; + } + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs deleted file mode 100644 index 5fe8140bc8c..00000000000 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionCache.cs +++ /dev/null @@ -1,68 +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 System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; -using Windows.UI.Composition; - -namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache -{ - /// - /// A used to cache reusable instances - /// - /// The type of instances to cache - internal sealed class ThreadSafeCompositionCache - where T : CompositionObject - { - /// - /// The cache of weak references, to avoid memory leaks - /// - private readonly List> cache = new List>(); - - /// - /// The instance used to synchronize concurrent operations on the cache - /// - private readonly AsyncMutex mutex = new AsyncMutex(); - - /// - /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found - /// - /// A used when the requested value is not present in the cache - /// A with the retrieved instance - public async Task TryGetInstanceAsync(Func factory) - { - using (await this.mutex.LockAsync()) - { - // Try to retrieve an valid instance from the cache - foreach (var value in this.cache) - { - if (value.TryGetTarget(out var instance) && - instance.TryGetDispatcher(out var dispatcher) && dispatcher.HasThreadAccess) - { - return instance; - } - } - - // Create a new instance when needed - T fallback = factory(); - this.cache.Add(new WeakReference(fallback)); - return fallback; - } - } - - /// - /// Performs a cleanup of the cache by removing invalid references - /// - public async void Cleanup() - { - using (await this.mutex.LockAsync()) - { - this.cache.RemoveAll(reference => !reference.TryGetTarget(out T target) || !target.TryGetDispatcher(out _)); - } - } - } -} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 14c1c8a18ab..3ce80414823 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -26,12 +26,12 @@ public sealed partial class PipelineBuilder /// /// The cache manager for backdrop brushes /// - private static readonly ThreadSafeCompositionCache BackdropBrushCache = new ThreadSafeCompositionCache(); + private static readonly CompositionObjectCache BackdropBrushCache = new CompositionObjectCache(); /// /// The cache manager for host backdrop brushes /// - private static readonly ThreadSafeCompositionCache HostBackdropBrushCache = new ThreadSafeCompositionCache(); + private static readonly CompositionObjectCache HostBackdropBrushCache = new CompositionObjectCache(); /// /// Starts a new pipeline from the returned by @@ -40,7 +40,7 @@ public sealed partial class PipelineBuilder [Pure] public static PipelineBuilder FromBackdropBrush() { - return new PipelineBuilder(() => BackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor.CreateBackdropBrush)); + return new PipelineBuilder(() => BackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor, c => c.CreateBackdropBrush())); } /// @@ -50,7 +50,7 @@ public static PipelineBuilder FromBackdropBrush() [Pure] public static PipelineBuilder FromHostBackdropBrush() { - return new PipelineBuilder(() => HostBackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor.CreateHostBackdropBrush)); + return new PipelineBuilder(() => HostBackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor, c => c.CreateHostBackdropBrush())); } /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 1c4c7637333..1710a331a75 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -156,10 +156,6 @@ public async Task BuildAsync() effectBrush.SetSourceParameter(pair.Key, await pair.Value()); } - // Cleanup - BackdropBrushCache.Cleanup(); - HostBackdropBrushCache.Cleanup(); - return effectBrush; } From 3038e0c82f9143c3aa67c67ffb2d34d6e033b540 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 20:25:41 +0100 Subject: [PATCH 09/92] Minor performance improvements --- .../Cache/CompositionObjectCache{T}.cs | 23 +++++++------------ .../PipelineBuilder.Initialization.cs | 18 +++++++++++++-- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs index 1712fa6c40e..14ebf0ebd3f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs @@ -4,8 +4,6 @@ using System; using System.Runtime.CompilerServices; -using System.Threading.Tasks; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks; using Windows.UI.Composition; using Windows.UI.Core; @@ -19,34 +17,29 @@ internal sealed class CompositionObjectCache where T : CompositionObject { /// - /// The cache of weak references, to avoid memory leaks + /// The cache of weak references of type , to avoid memory leaks /// private readonly ConditionalWeakTable> cache = new ConditionalWeakTable>(); - /// - /// The instance used to synchronize concurrent operations on the cache - /// - private readonly AsyncMutex mutex = new AsyncMutex(); - /// /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found /// - /// The current instance to get the value for + /// The current instance to get the value for /// A instance used to produce a instance - /// A that returns a instance that is linked to - public async Task TryGetInstanceAsync(Compositor dispatcher, Func producer) + /// A instance that is linked to + public T GetValue(Compositor compositor, Func producer) { - using (await this.mutex.LockAsync()) + lock (cache) { - if (this.cache.TryGetValue(dispatcher, out var reference) && + if (this.cache.TryGetValue(compositor, out var reference) && reference.TryGetTarget(out var instance)) { return instance; } // Create a new instance when needed - var fallback = producer(dispatcher); - this.cache.AddOrUpdate(dispatcher, new WeakReference(fallback)); + var fallback = producer(compositor); + this.cache.AddOrUpdate(compositor, new WeakReference(fallback)); return fallback; } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 3ce80414823..4a4fe779630 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -40,7 +40,14 @@ public sealed partial class PipelineBuilder [Pure] public static PipelineBuilder FromBackdropBrush() { - return new PipelineBuilder(() => BackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor, c => c.CreateBackdropBrush())); + Task Factory() + { + var brush = BackdropBrushCache.GetValue(Window.Current.Compositor, c => c.CreateBackdropBrush()); + + return Task.FromResult(brush); + } + + return new PipelineBuilder(Factory); } /// @@ -50,7 +57,14 @@ public static PipelineBuilder FromBackdropBrush() [Pure] public static PipelineBuilder FromHostBackdropBrush() { - return new PipelineBuilder(() => HostBackdropBrushCache.TryGetInstanceAsync(Window.Current.Compositor, c => c.CreateHostBackdropBrush())); + Task Factory() + { + var brush = HostBackdropBrushCache.GetValue(Window.Current.Compositor, c => c.CreateHostBackdropBrush()); + + return Task.FromResult(brush); + } + + return new PipelineBuilder(Factory); } /// From 4fc8a3eff83a353ae334bb22742eec635123864b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 20:40:21 +0100 Subject: [PATCH 10/92] More code switched to ConditionalWeakTable --- .../CompositionObjectCache{TKey,TValue}.cs | 73 +++++++++++ .../Cache/CompositionObjectCache{T}.cs | 3 +- .../Cache/ThreadSafeCompositionMapCache.cs | 121 ------------------ .../Helpers/Win2DImageHelper.cs | 49 ++----- 4 files changed, 85 insertions(+), 161 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{TKey,TValue}.cs delete mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{TKey,TValue}.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{TKey,TValue}.cs new file mode 100644 index 00000000000..01bdb72e9ce --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{TKey,TValue}.cs @@ -0,0 +1,73 @@ +// 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 System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Windows.UI.Composition; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache +{ + /// + /// A used to cache reusable instances with an associated key + /// + /// The type of key to classify the items in the cache + /// The type of items stored in the cache + internal sealed class CompositionObjectCache + where TValue : CompositionObject + { + /// + /// The cache of weak references of type to instances, to avoid memory leaks + /// + private readonly ConditionalWeakTable>> cache = new ConditionalWeakTable>>(); + + /// + /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found + /// + /// The current instance to get the value for + /// The key to look for + /// The resulting value, if existing + /// if the target value has been found, otherwise + public bool TryGetValue(Compositor compositor, TKey key, out TValue result) + { + lock (this.cache) + { + if (this.cache.TryGetValue(compositor, out var map) && + map.TryGetValue(key, out var reference) && + reference.TryGetTarget(out result)) + { + return true; + } + + result = null; + return false; + } + } + + /// + /// Adds or updates a value with the specified key to the cache + /// + /// The current instance to get the value for + /// The key of the item to add + /// The value to add + public void AddOrUpdate(Compositor compositor, TKey key, TValue value) + { + lock (this.cache) + { + if (this.cache.TryGetValue(compositor, out var map)) + { + _ = map.Remove(key); + + map.Add(key, new WeakReference(value)); + } + else + { + map = new Dictionary> { [key] = new WeakReference(value) }; + + this.cache.Add(compositor, map); + } + } + } + } +} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs index 14ebf0ebd3f..8e686696e6d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/CompositionObjectCache{T}.cs @@ -5,7 +5,6 @@ using System; using System.Runtime.CompilerServices; using Windows.UI.Composition; -using Windows.UI.Core; namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache { @@ -24,7 +23,7 @@ internal sealed class CompositionObjectCache /// /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found /// - /// The current instance to get the value for + /// The current instance to get the value for /// A instance used to produce a instance /// A instance that is linked to public T GetValue(Compositor compositor, Func producer) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs deleted file mode 100644 index 6f6e22c33e8..00000000000 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Cache/ThreadSafeCompositionMapCache.cs +++ /dev/null @@ -1,121 +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 System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; -using Windows.UI.Composition; - -namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache -{ - /// - /// A used to cache reusable instances with an associated key - /// - /// The type of key to classify the items in the cache - /// The type of items stored in the cache - internal sealed class ThreadSafeCompositionMapCache - where TValue : CompositionObject - { - /// - /// The cache of weak references, to avoid memory leaks - /// - private readonly Dictionary>> cache = new Dictionary>>(); - - /// - /// Tries to retrieve a valid instance from the cache, and uses the provided factory if an existing item is not found - /// - /// The key to look for - /// The resulting value, if existing - /// if the target value has been found, otherwise - public bool TryGetInstance(TKey key, out TValue result) - { - // Try to retrieve an valid instance from the cache - if (this.cache.TryGetValue(key, out var values)) - { - foreach (var value in values) - { - if (value.TryGetTarget(out var instance) && instance.TryGetDispatcher(out var dispatcher) && dispatcher.HasThreadAccess) - { - result = instance; - return true; - } - } - } - - // Not found - result = null; - return false; - } - - /// - /// Adds a new value with the specified key to the cache - /// - /// The key of the item to add - /// The value to add - public void Add(TKey key, TValue value) - { - if (this.cache.TryGetValue(key, out var list)) - { - list.Add(new WeakReference(value)); - } - else - { - this.cache.Add(key, new List> { new WeakReference(value) }); - } - } - - /// - /// Adds a new value and removes previous values with the same key, if any - /// - /// The key of the item to add - /// The value to add - public void Overwrite(TKey key, TValue value) - { - this.cache.Remove(key); - - this.cache.Add(key, new List> { new WeakReference(value) }); - } - - /// - /// Performs a cleanup of the cache by removing invalid references - /// - public void Cleanup() - { - foreach (var list in this.cache.Values) - { - list.RemoveAll(reference => !reference.TryGetTarget(out TValue value) || !value.TryGetDispatcher(out _)); - } - - foreach (var key in this.cache.Keys.ToArray()) - { - if (this.cache[key].Count == 0) - { - this.cache.Remove(key); - } - } - } - - /// - /// Clears the cache by removing all the stored items - /// - /// An instance with the existing values before the cleanup - public IReadOnlyList Clear() - { - var values = new List(); - - foreach (var reference in this.cache.Values.SelectMany(list => list)) - { - if (reference.TryGetTarget(out var value)) - { - values.Add(value); - } - } - - this.cache.Clear(); - - return values; - } - } -} \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs index 99c3ad35b46..5fb57331ef9 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System; -using System.Collections.Generic; using System.Numerics; using System.Runtime.InteropServices; using System.Threading.Tasks; @@ -42,7 +41,7 @@ public static class Win2DImageHelper /// /// Gets the local cache mapping for previously loaded Win2D images /// - private static readonly ThreadSafeCompositionMapCache Cache = new ThreadSafeCompositionMapCache(); + private static readonly CompositionObjectCache Cache = new CompositionObjectCache(); /// /// Loads a instance with the target image from the shared instance @@ -69,19 +68,6 @@ public static Task LoadImageAsync(this CanvasControl ca return LoadImageAsync(Window.Current.Compositor, canvas, uri, dpiMode, cacheMode); } - /// - /// Clears the internal cache of Win2D images - /// - /// A sequence of the objects that were present in the cache - /// The returned items should be manually disposed after checking that they are no longer in use in other effect pipelines - public static async Task> ClearCacheAsync() - { - using (await Win2DMutex.LockAsync()) - { - return Cache.Clear(); - } - } - /// /// Loads a from the input , and prepares it to be used in a tile effect /// @@ -152,9 +138,6 @@ private static async Task LoadSurfaceBrushAsync( finally { bitmap?.Dispose(); - - // Cleanup leftover references - Cache.Cleanup(); } } @@ -222,7 +205,7 @@ async void Canvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEve using (await Win2DMutex.LockAsync()) { if (cacheMode == CacheMode.Default && - Cache.TryGetInstance(uri, out var cached)) + Cache.TryGetValue(compositor, uri, out var cached)) { return cached; } @@ -251,16 +234,10 @@ async void Canvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEve var brush = tcs.Task.Result; // Cache when needed and return the result - if (brush != null) + if (brush != null && + cacheMode != CacheMode.Disabled) { - if (cacheMode == CacheMode.Default) - { - Cache.Add(uri, brush); - } - else if (cacheMode == CacheMode.Overwrite) - { - Cache.Overwrite(uri, brush); - } + Cache.AddOrUpdate(compositor, uri, brush); } return brush; @@ -285,7 +262,9 @@ internal static async Task LoadImageAsync( using (await Win2DMutex.LockAsync()) { uri = uri.ToAppxUri(); - if (cacheMode == CacheMode.Default && Cache.TryGetInstance(uri, out var cached)) + + if (cacheMode == CacheMode.Default && + Cache.TryGetValue(compositor, uri, out var cached)) { return cached; } @@ -305,16 +284,10 @@ internal static async Task LoadImageAsync( } // Cache when needed and return the result - if (brush != null) + if (brush != null && + cacheMode != CacheMode.Disabled) { - if (cacheMode == CacheMode.Default) - { - Cache.Add(uri, brush); - } - else if (cacheMode == CacheMode.Overwrite) - { - Cache.Overwrite(uri, brush); - } + Cache.AddOrUpdate(compositor, uri, brush); } return brush; From f3a4a3df76ea4dffc35fd0e9fe5c116370eb3f3c Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 25 Jan 2020 20:54:18 +0100 Subject: [PATCH 11/92] Fixed missing file header --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 9f458754d49..f214cb490c4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -1,4 +1,8 @@ -using System; +// 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 System; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; From bb06aefee9a97935c6d393017ff501f3741c0ce3 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Wed, 29 Jan 2020 22:48:54 +0100 Subject: [PATCH 12/92] Added empty PipelineBrush sample page --- .../Microsoft.Toolkit.Uwp.SampleApp.csproj | 9 ++++++ .../PipelineBrush/PipelineBrush.png | Bin 0 -> 24376 bytes .../PipelineBrush/PipelineBrushPage.xaml | 18 ++++++++++++ .../PipelineBrush/PipelineBrushPage.xaml.cs | 22 ++++++++++++++ .../PipelineBrush/PipelineBrushXaml.bind | 27 ++++++++++++++++++ .../SamplePages/samples.json | 11 +++++++ 6 files changed, 87 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrush.png create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml.cs create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj index d95e24c902f..995138129ff 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj +++ b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj @@ -284,6 +284,7 @@ + @@ -531,6 +532,9 @@ OnDevicePage.xaml + + PipelineBrushPage.xaml + RemoteDeviceHelperPage.xaml @@ -552,6 +556,7 @@ + @@ -946,6 +951,10 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrush.png b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrush.png new file mode 100644 index 0000000000000000000000000000000000000000..c344005ac5a0c5af3606a465f4970e5c12a49008 GIT binary patch literal 24376 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 V^8>Nzi?;hqCJ)RFEA^j8{vZFTusZ+% literal 0 HcmV?d00001 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml new file mode 100644 index 00000000000..a3da3ebe687 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml.cs new file mode 100644 index 00000000000..a28b89b3168 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml.cs @@ -0,0 +1,22 @@ +// 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 Windows.UI.Xaml.Controls; + +namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages +{ + /// + /// A page that shows how to use the pipeline brushes. + /// + public sealed partial class PipelineBrushPage : Page + { + /// + /// Initializes a new instance of the class. + /// + public PipelineBrushPage() + { + this.InitializeComponent(); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind new file mode 100644 index 00000000000..4f8035c9c9d --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json index 22cef444cca..b919f6c6258 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json @@ -988,6 +988,17 @@ "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/RadialGradientBrush.md" + }, + { + "Name": "PipelineBrush", + "Type": "PipelineBrushPage", + "About": "A composition brush which can render any custom Win2D/Composition effects chain.", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "XamlCodeFile": "PipelineBrushXaml.bind", + "Icon": "/SamplePages/PipelineBrush/PipelineBrush.png", + "BadgeUpdateVersionRequired": "Creators Update required", + "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", + "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" } ] }, From 873f0c3d7d24603e60fa368f9fe04964382a3d9a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Wed, 29 Jan 2020 23:05:42 +0100 Subject: [PATCH 13/92] Fixed an incorrect namespace --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index f214cb490c4..db3c98b10f0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -16,7 +16,7 @@ using OpacityEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.OpacityEffect; using SaturationEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.SaturationEffect; using TileEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TileEffect; -using TintEffect = FluentExtensions.UI.Brushes.Brushes.Effects.TintEffect; +using TintEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TintEffect; namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs index 43071e4fdfc..f9ee1b5f459 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -5,7 +5,7 @@ using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; using Windows.UI; -namespace FluentExtensions.UI.Brushes.Brushes.Effects +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// /// A tint effect with a customizable opacity From 960440eed62f382954d5b947c37d8846d2ce4c2d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Wed, 29 Jan 2020 23:05:52 +0100 Subject: [PATCH 14/92] Implemented PipelineBrush sample --- .../Assets/BrushAssets/NoiseTexture.png | Bin 0 -> 221038 bytes .../Microsoft.Toolkit.Uwp.SampleApp.csproj | 1 + .../PipelineBrush/PipelineBrushXaml.bind | 23 ++++++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/NoiseTexture.png diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/NoiseTexture.png b/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/NoiseTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..067f8d7696025eee10f17ef7b63294433ba54ca6 GIT binary patch literal 221038 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 z�D1-tS;t{6-{d!Izo)qFOvO!^uM3~RXn-R<-6|a!2W++xH(mHXX8Iu zo?F@^Ss!(A2J)*UBTC4Uo&ixmsyBW$zP3{Z!r@PnA{ROrmG2;Uuq*=Z&#<+tZW zQ`9WIaXQE|f7ZpK@HXcYm1fGj>}wFmtMY^V-0e#6gUBF9*u$ z6u5}V^T|{x=Pj87x(2mx_KbGJl|F6xM*!=yWXS&OmTZI*{o70Fe6=>#AIAGcleMgi zqj&yfg4MXKA2hIQ%?3t7#Q3cTn1z~Df|0{gAI%2#HF@`-DSYC+)Y)at%^KquILb#d z&Rz!5yqa6eeQ(#-`E|VQVY^ES&dBCrCqt)k=IDH^n2#En5wKOoN=WuRr2?)$#b66h z3qPM5z_a87CU;3i6CDxRyR=PaHf?@#LKHb=RB4%(17Y}jx%?Dm=LeYMA;J6LLI9B# z5iYfp6-IW06ae3(qGCP_8dS#Uj9G^W#0ZP^)&ZLGRCX^3;OnY@lvF=A$UN=o_=h0Tm0^R=hFN0ug zYmAI4Om5l6v7Nuaj{SW|k`sF|!-Sx(vDo3VzXaKj7xEVl za4n0u4HDR`mSCW6XqPWQttE-%$D7NSiE3zt3O2hLiSPyaD+N$(0+WV0BSvDilX2l) ztB(VzTMadz!)d>^?qDz}glUp03xK^DBm#qj_gStaM|0#Gh0-i76xauCg&Iuq6t@OE z_@10H17{?0G{Y7#J?^qItF{%_R3m13?%)-ac!k(ASy=&a(*W{_&o_qh=UM%^gcmVIY zMe2Jv{RVr)BQg0-6Qtc9zQtGMP+W zBty>Vn6>}r;Mq25jR^v$J`>T0kj%+=Gd%s7YBzMD2r3n@dK?Q-g!bq7ovm6DB~)U3 z=VGQ5dw^V2+pxI0<0f$jlaP*A(Tz%RimY^X?1HA-CmnVjXEy6~PZF(yPl0X^{n#OG zOt?IC)F#@hevr>kn`E_>h3UR*YdR%3OMW};nI0QbpnJ*+>~;(G8UcGd_Zt=$Enf_W zR%#2)AK`81>jZ_Kq}7ElqK~Vl#-tQ^>I=?zZjiHYC~e&zw|8>NypH2%3?@F| zr>qe3y)et0nEIzdZ&zCVxXpKeY{3oGhoMU&x!*2l7h>*-Otgyus%u!_BBskJxfFM zZOsAh; zj>U)vGJG=vaE02sA<@1@g=y$5n;p)XXWQ@i=nFD(0^fsMA)#%(0{Yt=ooME;m{}Hb zNDbv#)}UVN_L@QS3kJomkxM=S4{sjnYh9>}HnUfXW@tMndsBX##EC;+W`beKwKw2` z<<}(jwiJ>v!1aB_fPC}ZlHBlh+RL7+qLYVlCkud6*Kc&>`u2H%afR(kReTvgaV8L+1HhM)Dmzn*T7!_ zkHn<`>AR8J!L7T5j{IVY)Z+;k+;lveW0u6y7mBADVI8V2nS3E~=};Qx1ufdFXK-Jw z^Nx^7vdnqlfF8PLP&EdAxXBa*xC+PMlPqm$sj-r|YW?66zQ8oh%suCB(az50*mlnv z)$*+(aV7Rz1NaFJ(=6~UszH=0Mt}FFWCHh17QvvDcfd!@%!cquzp2;a&LGK ziWwAnmnITBTj7W@2jL6a-5*buuY1_G?pfB^rSvPa*uGye{}8jdAIwghT)=-nF$B7k z`R?mG^K#>AneaJW$1)TcODNk%M+2}<+;Dt|dX%AMl-PP6p&F)FsLdaqfG6-j-3tQo z#nc)Ry|4^Da0WE>tqIHL7kM1xy(-SF4i-Q&OFmmMvTQG$sMrpQZ5RvgqAls#Uk*#m zxiu;Y{~J!xz%osBZY%Yrx`9Zx@7rah;wNFB(es?nd&bm2IQ0p1&_K?Lq?>u|or1B) z!^TgjWkARto439r1l3PbjUG$`He?!Hks0&87}+67)e0Cs`T&&TG#&Y2I=+0b!2@+G z%l_o+3btYBtT-N3MNuc|h|GvQu?~I=|I~bH~%)#CsC;? z`6t>nxl#Ad#3S8#;0I|GJ|3N;>anRekapWJN=PQOkUTOMW@_RXIH8lhVH7gYDyG`d zb)QO78Y9=%`EN)XaniIUqy%qZGBFLE)c?x4HT8A$BfM2rw{T80@s)?Po^-b3k1Grm^`(h5o^@d8k zi9fPvZd#B2vEQ{`7sA6Bp=pIn@eS7#68C7;3X3K*F?=qxO30F#+J95B`E09isKf}1IF&w0uL*XqodkFP$?M0*F5VP!hd*# z&!qURoTZ6_)V|F7ubMn-g>*hzAo?m)m|1(VA!xD9AZGQNxnV1a0Z>6g>5I%RVjYW} z5V#2Kcd%i?501h0k)*^ms|O*rmu_U+&e<@5ns^2C^TPGQ0y3d0{7halzscI@F*`mE@e zvNUu&O5&RkS&fJRj1bNzvUSgjww04mJkrK{Y6;G5+X75jHC@H|6Z}cJG4r{|wItL% zy{oT?;?$*knZzf%&w6Q2E0*`mJcyTwVrHzLYuSvh-;(oV`or)}!+fvZ>`efvO+{B1 z47E3zt8X3pUeGsvq4mc=Uvx|&=>!aE)9i{Z*up|xE~t`^EwY!Qn|qbwThWK)^iWRf z&rajIoeb(jyR|_lrWQ{~AeT|3n`;}RN6O}TvBPwS`MOWJ8|d^|n!OM|q?E?sCG)1iU-WvN6XyW>qxc1#N^YYaVYk-GMQ5BFIYTZYxIrK6$EGH@n-fcDxk?CWA0#djw8pfEd+cTnul~ZAeC0Fj?hP4W3&z7tueJ+Z3pF<_!{GTVe zVDyBqVrhD|aqaIfK4In)qPsq9DtdB)_F~KA)^AL-|NS-F0-++Go-dEwVE3vSyH-*9 z^1111Txd=cD@k)O9^YHQ@IC8OH2vMJLc4;i(sosdGp-AxX(ru$0D~haN;KLsK6|D0 ztPmi^No3)iRCfUJYxYWDzu1rgEYn*sG!>o`mgM_kdfmwS5NStz>|xAZZzE=Wf*;Q< z2^r{xfpI24lVx-{6O0R}>3fBHjfTK(qxIHzjgW9Kj%qlb!ze3hu{N-Ae!dxr2X_m2NLBHJS9puj`eI%pIJbiU6EV#X?^;kv)BG3YbTOlNf+6n^1)C@bbUA1ku! zbT|9_hBc+|-J7+>y{mnrG#}sZ`Gf17=+8!{1)TAQqV)RE+f_1;AcIjAj zmU@r?;xTVJcz39CI;A1x3i1P$eVXDJUwquXm%Fx! z`a#YxHIy`;a9M=iVy-u)_EJUl&$`)(ToA-X6H@KxkE?HA?3@s3f?I zkFYP*7kI*>19{@rTVc4c|?6rcWwjK19J@V#txMpOum$7G{&25zz<>UC& zR2QI$LyKrm77nu4Q(Pr^^tA?3&9UiNy)pJ6*i#3452g45?c__Q0EJ?=oAytU>G*ag z(tXu@+ikVzstz~MoVCe3uV%@3z*=U1#sm7p9ty0-x=pMNvJGXxoNSBZ({WvC5;%28 z@O7cuo9F~Expz-6%O{~zT^y1oz$sYVpW}8HSuhVN%4U4~9S4>8$=?L<3&E}%r1vx< z@mX{J+h?dav6c<6iX?HqZB;i+1;0|y_F4sBA9OPHUC@g^w!d$>tsa18ts5*w%^-JB zTe*4o6>7X(Vp8u^B%^&}gZ}U*Jd_LM#dpq1U6-X)MEtC|!<&DyX*|bg0xJ`-n_8u| zzsAYmRrt3#U2jMdWEGMPSK>=gi?kuZjoz(1I9@~oqT|9{J3SI;Au7D#YU}Y5I}zVw zJBvCzNu4upG&avJ;!^kwaWaowkFW>7ZxW_fOX-6b#RYtRezD~Qoqf-Cm^?PCa^z0* zd5kCH2({>V+uzIV&*$HX*dU`PzOf*-SnwwymcVN+vrMkc+uX~V&(bmP9|Ly7=e74D z2I@0l;Dy0!8dtXl5AIvjBCi4G{-1}gbSU0I|CGxgZ!u8@{E7CR-H>SRFv#+(0VswJ zaOhRg$h`yiCbeLS@E3e|2-9OyI=B}1ym5#>95Va2WY=#5MH>bmT!dww@SZ51B9wO8 zIV5}!e2%~TnQpbt6!|=5r%-;81NdIRs*zYqeeiTV4l9{*$os@&Y##kiU@oP|V+=KH zADK?GKnx5DBK(LC5t)iHPD}Gr9Gx@~O2I#uY+}nX&rH*a4bxFe!m;tf5TJ3uUAb*7SpO7}nS%L5C^Z)z*yb3lSYQm=kgHzM z!o?2o6)Q*p<1}B4=h9|-R_#^iP|CoA4$n=46FoPdP6oz=pU0=I?Ai@q0&N24M`9q- z-L7cfsN_JU!QDPM-#fSKGwX_fZ}h@;`0l^vq=s@}kR9q3usR27&W|205y#E{=eC;3C}4EJhIQubW;uaaYIEnaGFK|I)@i zGtC=2*HE&TgONy~jmO~!FxTe}jOe>4#X94_iTB=tHLf5Dq+Tqrc{9s;EJ9;SSTyC8 z1p1(1^5tF*@n^a(eW7eJYzv8BqJR$Z+;9@_c5OT5kt>R^425R;;lUlc3T<&({8$ob zwDlRQ)?d!rA0_CUdZAqE3t6DI?_<`pJMNAh+e~Or?wNLGX&Hbo%1uCe*L80r9co6j zK#`+_9=oPv*R=8P6Sx(3rX*aZ02=fwRJS{S{>ZOVQq~KLtgc=gfR~8Pu(D$pY@JKW z&YBx2VE{;9jhBJfuDj_F|3y{z-5h=x+j>hjk>WB*g9&>9IqWrfBr=LTo(jKU}xPe-iev|oM_RQn>*vea0p7&gaf+;T2@1dORkKNMTK1X{IIDD>ydthv%jMQ?qw(_I zFLf8<-8u!JeQ{CvvV5$r+PViauGJp1L!zIDQ%cj4?8}^dNzxtf#_Q-t@ntO2A!DNY z*QQ^Qr6o7A+QPGGwm-8_Uf``-iEP{Oi1~@)@$qYBI>Oq%tLUJ0zup7nOLKX)}HlfE~6zd0r#E_{gKL@3ARR7y4*QJ~B-PsP*%< zQAJ76dag;i=&1E3me<5r%_pa*O&3!$c;fhY4rXYbh5op~**^YSoQ649N>s#FzX6VB8 z4$JHx`0*yfz4^=sHIZi3nO^yT+@+*Bi7&y1EbHfSpsf;R3VqaOL-frcxz#jZLACRw zZoe?w4-}3KWZ<~`W!3n)#v|U9rmx;VVl9Q+Hxtn1CF}*SK`JS?5dcVv1T*LOcC(79 zKsQcKR1=WH6Sd3@0@f_3!3_-njp&#EZJD<2c>a-_-FtGH5_$#r)i=8TM$1&kIp+gn z6m>tV=lh`omDUfNV$r-tBLPqXzruay{**G{t3T-d0Y(_A80b?k6$fu+xb zABN~j!n1ikcNAzo8oNqGf(wrXYSTg>n5%s2Pi*hV29>eX8Z#QlHGMTF0W(7l^B$>_ zI9tF1WIL6moz1x(j)(7-@aox(-|{^14c&ep=HK99(Np%n4Vx0l68{|P3&@2G?xADL zYS9KONebttXU7E$3(+)l?ms7+}h?( z@uz4`Js5%yt`JhZiD^nO{4rK`n(9=lo)7ex1_jbn>QyhuoZ}YGs>vd9E&7Qe^cuTQ zE*LaC6ooVB?$X|kIX&Pv{6wn$y?uI0K8EG7PlwaEj4SNXa6B6TQTC za`e#-QA#++)E;gz3YsVNFam z8!2bWCUd+fN%S*F=Zz(~I84nCfy5eSL*A3;8>q`iI#|RTjloyn9+Te2rxo^KU+ySzj|h&6XU0pipXQIxwN^Gadbi4ocD{gjt+el2d7 zz4DORH-lh!J$A6nAUAlVg$O+fW&lCOzUS@oWS4WbZ`zxdmiB*9hZwi2ix~DpI>ul z2>MTh0y;(YK>iXRliC|ef8Euw;~)ML=gxk(+Q#z!DFXBGAKHM1Pt9+xip?9T0xaCd zLoZ?$KRd}~B6D3q!drwFevb9lEiVCa1JxVMOzTDC$g6Uj z7Wfi}^ucFE>>~ILYh$VubSl$sDlOH0r`woYre?_e8zhYI$mZL84+w_?@9d?F1!?VV zXR@5OiFDf~xB2qZoIN($^S}@F7K*OCia{OsV<>oAB4qILC?1v$VOkY7%9HDg2klCzIfYSXKz@yOWyJ#)I)#e>vwDdSGgK#jG9OL5N?Y-2dQh9-!C{rd!A0`Glw#>vpr183n~^0pu9-Y5Pky6KDR)@YA~2| z=QosQW%EHSWaWS`&A-%7VFFW12N=5}(M~zL2up~#^94ndXrM!RKfrZGcd{6HGRNfB*?T*dazN9e<_Z3>8WUX>)_C(YE7=|YeFf1 zmd>RwPXtvd=L2_?@l&4l4HJR}T=W_5+gYY_9ffl-RmQ*_OzQMD#hOO>x8&Jty{NA? zS4v`r@IE71BjQu@diby7dyJ2F&t?#T{q09`1ZPXoY3-W*9Rpn8av^YlkoGSo!Ls@& zXLlOrb&bDIBhG$)>n;B{qpsE5+IRG3ZYf7$`Fyxy>s&EwAW$D=gMwNj6q&76Jg~xv z9fTB&QLw(d0V9^ZSGqk;Gky1)2pmj5R!`%Nt}9k*-sj*wfgjV`$Wa{5CEeGxTgH#E z$xw6G-pLbpsh!bz1UJ3zIa-&RKcoTxKWr-^LgV|?hHxv_rL1O-K4@JMonf*qMR zye4WN!SmUCAsWEf;b&g!5Jo`jG7;Y)_b$Gq!Y!J$GM^hXAJV*kL=OnJhh^R=NfcrO z8yWO7-`It!zMuVE>X8x!H=B)BdM7^8$WdY6U~;YY>n7W=j@6=kF_er#-6*$4%gCJh z&!nfLX8*kR7!QWZK)E%gOdbk;CJL{S+WU14d{ZyMlk`ti15VgZwox6cabJ8HC1Z9Z zR3y3v{}H~ypI0$3W%gbPoM1Wsr3C%Km6&gX*Bd7f=ssn*eME-Q$qXT&?ky}k$^95J zeb^@#QPTj08YvGqeZxK0O4r&O-?$lnmwJX31k(#h#@tQqJe`U+ zGyX_+ezZZsEL01nj)vE0sb8e{a-XQ!7C<~s9hY?71i2WQL#nVHDROFys|!a#o(RpZs$oF7H}pUpx30C;_`e>p3asH`PgK?XAI))` znudgsvp~ZgN@7016ecv5?m21xxQFRChoTcdN#fhquUfN{4>fWKxNtWBWd=H6P7aS9 zA?%(uC+Uwya3zNZbY?; zKli6a;x1K;72sQyj0Yd%s`-%(2XIj?xL(qyrHj|3YtR>Yvqi`GBZae_0D*n8#xHHP z4j*~f^9J@F&Aib}?_LpYDw;+_XZ8W9aUPb%+VU7gzPCe^a2>bW>LTpf_3Y1hxS?T^ zoWv_kD<>*(40%k$6DIhJR+K3YIprCWxs_W4vj;GtjN=^An1E`L6uREKT#u?4uVzLfhgz#kJK zDB5I=g<7DSLBEvbykIDyu=tt#x#D*e7<35S+E%oof3aV8FROD-m&3_& zh-lAQgUsN8%!Lu0FSHhVZtOo_PFh3v5c{TD;G*Q8n0Rrh-tBILtNvxjv2AL5o$4K!+;g}xT)@K3l> z5_J2Dy}jk^*Vhd%w0)0S8I*?{Y!+qbcvv%j?J2J>GbP0+alRjA zDfqvf%2tW|@YWFJ|5etBpl1@(lq|F5_~Z%0$Hcx3t#Y$yo$$Yf7pyr@7p&|=SL_uI z4GGF*+Gg)Z`QQ{WQYAN1j3eL{4?@U#w@?N9=JBAmrV72rD!;OHW5@>IQKAS(_$BNP zvQa@G+ICuhq-Tr-9&fZ$vfQc9&^{;?Cz`(@y#5H!>KrEUpPzHG4mP(J&N7)jddpHZ zO7dx@xe{N-~MM(Yos1 z)WJUn!Vl!kze@-Vc-mZu&rx%orWc$%GhT-XMD4VE;8KaE8fa%bo|lC?E?&4Cyz~1* zldMf#ulFH8{E@bbBxuJ1E#t{)L<+3%pLFPi{lJ28?AsT4Q{{mBW1=*YDiUi>6XvIxn*Ez>Ej za#lRd#$l@nviZ*oHI3z`kjgs_dEdcY;NNa5Px2?E-c_-<(ZV6v{3X$i0s~01m3t8a zw-_g>r_pZ7@}k_*vYRK(%NNOY%^(1$s$Oknron9ArBiiDIovz;xml4fb9#lm2&$kT zVvDtC?=GAD+_d)Yl;N6M79n8FYwjcI-bupc*<=_`g`}d|!ne$k@`y6Yy)c&b_-rz& zg0r4mLdt5B5-_zn{FtSu>~*D7Jv-6pA&8t)i)5l1=w`LTt4YdCf2eiyRnvkn6WT$- zXK%V~>ANv-!%15}+U&xW$2q>KGp)6I6nlW`<|$sNqr<~v{S}V;M+Ly!+O*3FsfjB& zpD2_8US%Fz`9YEBl~eZ7cV9qmsFx4K;Q=)@s@+Z_(oh<;dOMGD;&4!F6aDYh`cfS( z7lt(Nvw4Ig*A%+uwg_=>#R|;{=G>p5Ay#kf6fTZy3^a6N-&z_mmm99T4*jZ@6GO)GqDdmg{u9 z1`k`(MO0i8gFz$pbi7{IimZubw@IuBE+Enwu0EJT=D#Q*b}OHpW>=~7jNC5e>@y?v zw7l*&1EhS{6_n4ZJSO4x+5>tRRd${*zDIz9gpyvpp5%K+P_y1%^y z_e$d*x#f~iY4U8BGAN*BY4pVXnn5dnja4b!u$(^C3AU z0cCB&cj#QP(TzR9ANor&2+Oj&6r*^ghmzDUoenQP?weNTBtm>8q(3TZs(NC#BE1RI z#xFdYZ1msE&7iOen~V=J9-9>%#3+m7PVt63WmKOX#9z_sKJ z%<0v#hUTM+69hku8nJV1#7G-u)>abyeA5eI0HK-Z!c@n z>)b47gOy|d>QLylvgyy6DT`al6z07FNHx6XvF#ssp(`0L_U%mwVt>5k$@A>1y->aE z`9qEm@%G(~t;`SBlJHiPS(}z0k~j7!&37GO4`X6`aCOeiuw5L<8|m$uyHG|FJkKI9dPw>|E;W$92KNqVPB@$`_smxM0yF3VyWNAh z$y0(iQ$dz-`Wt-G!T6njNO4HE0$zZ&iqQk&#XxuQgDHS@1Id9HCJyR^0dv?gwE(XG zegwyoAkj8nJCS8k4wSrcqV{G8j%{uNb{%0RrxQtb&Cf|~ph_v)p!@Z1BM$MnQtQAQ zd`da}bTPchU@KDPmeFTpf_fFxz29t`8DvGQW0HWfjMaz3k}RxQ+CODsVtE?X_^j2a zNFc9}-%}_XTG_VLGn|=cw4m@>DL`q7#dL$BZuWGq-gdm4&oj!o$2zF_dRP{rrKEAd zBUPG}_uLSru)4`;+ORhHS2JSez3TGI;_lPGdVP~x?#%uvk-arN!Pp}y3R(N@R#_C+ zv&1-zr2X4@`!V%eY>Q)?6kiIvmo z9n_aiY`gx?*!&N>rR25!h9UskNxIy@7aZV1@Ts(aMh3Pvmm~d={&N|ptt0=I5)!Bp zwdb8mJ4SoiT=2eGbi16f*Tl`2(GCt+{^^xR)^aH_`Z$)_5iAvLQ`j#S=*sz44`+nM zLoqvc=H)Gfn5}ukX<%zdFtW^PaHkOLupe zjn2|KiKbug&=;xAZGpc?m~YgCUbGXAD*Hbx+^~&ZU<&wFr0C1sxt!gA_LwtFFo!s+ zHCxQT|FrSz=k^4b&UU3JC42I>7xQBIbB^sNuX67TuC7&xDS~9Jo_%v#rlV3}YE4DW z_34NaBbk~VxR{$UQfadu-Ber>wb&rYp~1$hSsp6Lm3M<_yEj%b=!h_(agGBdA8Q~G z!?4top=_}>P9i-~C0gO@&}}$DGhp#pIX0G?OH;GM!Ug9E%TKV|9j{Yb%w##sz~1#f zbiLG{2FmC}@NpPSXRy%C{`_<|+u*V7ykdxv5**K>`C5Sa;xhie4w^#B+*<)KhO?kd zjSk9gLk=H1V*v`zcj3x0XJNN>Kyv=(gcZmI*}k3&+Mm;Gmmgo0Mpk9MpE$2*u8J3G zE}L!Xmx`ouU3W|1d8GY&h0O@B9&@TC6)zdKFm3B$>*F{hDY1X*rYj`Awt1zds>7OZ z+nq1%EAwDtfhC<({)TK64IKc#O*ujdS!y$zrl)wgAX5s~%r8MD?0fDw!u>Qv7WbAv zQnkO-iFB5>)hy<3So~IsYMHRV3tau?0~~W1rQXTF0*b_6B4gXnY>rDwT-YN?OSYoH zi`;Bs=3do|BMM?$(dGd`xo5}AKSTL!AN`#et8Tj+$pyg2Vscll^2k*ze*ii3w=n1L zA?e%!I!Z2g>8ybyjR5~*=K>UZ&s_UOn)wK5{1obGh7ZN91*@RYMAWv}VjETeuK(Va zel62Sa8YP?hg-|+6O5EI^$jIJB-4D6(<{y$G=0t>ja4<4%Qu%GdUL};2JY@HADyqh zr(L)gI36B`j{f{0$g(9yBG;Y-Uj$PL;3Zn6x7mq5M02r}ZEoWI=v*hX;FS7B#_$00 zJ-PeIOGKxH)r1fL7CsJSR0#MS2(2c+me^DA`Hv#-5M6M>mpI(q69!B#P?+TuBHl45 zjarp&cN6c)zq(Xl{MGh?Mo6ESm+}h8u!B>_kaNGSTH|B>aXaeggDndwdzMjOnRCXu z4<0>`{Kxa7e)3Quct91kIPh~cs4cAFQEg|JUH6P6A1MoYDx+!(J#ff;I-J{vsAF8j zw|2qJNuM!JV53t!k*&K-zK$xh-j^ah!-nP2M`_^WZ(7ze>oC{9X_(eTw^ueHp{ET# z(4o6HMrhl#NlX{f*v+pFI;uS;fJtx2d?H(x;xgAEGs*1IE6kt(Bcw|Sa7Y^ZCH`&o zK`7P47@ZW-J7iW&dz4(V;#?-dk7j1p9tKDvq_d74xS8m~4gE;)fs7{gl23^x6vL4g zf_XHLM?C94{|4LClSuhFI;HUAu7L@B(6J<+$SU2@Dsc~HbUI)nr+0?sb_{D4a zOcWs)P!G%=W2_BMAN4`}upWr|rexr%#O-~^kbaps9|LP%Uo;xjYZX5ju4ax>UD8+o zk@fsSNZa#)iQlgB3Mn5|u9SJrIqL)NN7PAy_uE-ar(`Z2>tq`GcUpK@hU)Zb{0#=7 zU3XMwc~HzhO51&$L%vC*+GnP8Q z|EI`|QjDG{dg4^8L?5Ke=vdo-d{Ps10|!r2pp;?zrl-B^D!HK(hbFE||U9uXV*z2!e-6R-~R@z(zmWeV^a8u7*~h7qX6Euf3?2qHwS^ zx6G=M!WH~owUV2P(CQs7=5VFlQXv^iW@{tYzTSD^C;M|#yRwL1Q5v;*P=@wsZbAuT zFByr$eJSg!s279}IxyI@=Nq!Q(;T_Xxf87=Ma~7TT8}Wl#}U+aAI6ERHByH?Vf61! zjeANMaa#?)Y!EiZ(3&m6o11Hn7Yptl-HD1S4bk&B;j(G)gY_`&B#XV>J{`xk)1W|H z`yEj-d9meAF3TqWz?Hu%z|VLS(muq7a!d(vfM1JQ5O>otABtsh)q@>y(xONr%07NLOcWvpp*!jPUYr*b3r_NwR$Zy*2ohHJk- z{BOhf~bKzJDSzv4`Zg))$Er4tz2Z9OQhCu`Nigh&cvQBbPm@$8Oxl^PBO* z;US&udTTJT`#|Btn(AJANs@n)8)^w{-o7Vazr3-2+3;<(-%rlDa{0{;)(rWA^{sqw z{(B?kd)n{Akk|0=;DQSE(!esnrM3V%$$xDlbsWLGN1Om)6F1ah4AA~o1922~dCGax zSQ)7#W9GRS@$Lth!@FlCxTULoVi|1M7{Zj4c?eV1eg_AK<<-o zc*kj257C;)xo!5H@Wmc>hqVo|4px?B-93>@-~{V(%lviw0~&6zOIX1sMd&0boTqo< zD4!2aC3iR#64svC=F@+XwjF0qRyCc=s|4?US?qV}@63lkhD;^Azt{N(dwd0{XbQ!p z`F=CybY=TXSKNW~>muru&uphjdkR%R!c|YEUNh zGG&3VPdM?Q=^?!aXd6bOXza=jO8ryrv-*LO*S^1$Zy@=*6ZjilE2U}e2HDmTe$WVw zdXM;#)}P^FyjGWriE5!~-+D33S=Ws^Q4B7ZiUVq>=PRRlbM>dfUx>4J!@_rMZIlLL zRTM`yapiF{E?a$_O__q*Wy%3Eq1B-@?&Q^&5Nn{F`_d?VBxJ}l8dZaoCi!ZLq zR_6DEJLo3G77o+&fXj9jXo1lwoDrnT729Y%KEx_csgBWO4M&rHGBnfpnpbGse@j%7tUCW)aIQf90%UFoKaOEP>RF zRX2m0rglvCU@{dwNqwP32jIXT58->sOND9GLD99O9<^Qf!AVoEs)+&A=~!*CIUxrV z>O0r1kRD2k=b)>K`hUd`LBiYXa}e)WbEC&Da{&X4?wA=dwKbqZ*eKR~0z^m`8RfJI zAYToge)}1n^m7(cy&%~F1-4aH=%iHRfIiocT{AzNwVDY`be;s(X{Z&5;^9(L+w>8F zACH4>l&kR5899wl5l1m1Gj-~$@tyFGWDvjz!{byl$CG!^Hd@HfY0%_jOb-zet8!tG z%fFrK-w@MfS-c<5Xx==R@z6G%GMP*!vl!*_F_qzCZJHWudr}q6w8hF2mwNJkdOotk|PO8$ja~h{)4>Wyw3T4pXc*=zqzYdg2mme1g=rZ zrIb$$iLecWz9WD>KWks#xH!6gK!%a8*=T9sQ<(~O2s#@S2rwaZqlu8`V^cl+FNbY$s?tK1UxOwQ6Wo~WdS^o{iVdU)U6(oxX zfcVYKD+o(Vi-f{51mn_|TJqu^yYtG(Ryl8}8IqCGBJyBG;ajBXqWHHQvq2ez3tbxh z-Kg3@i3(>yF0bnUBSLas11f@${$U5A5t!y}pP&3(Y3Q*WMgmPwEVjJ(FFc#>VXHL# z^NWz5Ew+Ryq2C$TQ%lD|Z`|rgE&eo<=B}}CLddr8QsElIa?KDdLHP!D1Hjc1 z?fMPkhF8CC#(v3s_%Pw-t048J`pI=pUw+?3^sVUQ9=q?C4HfXGq|9osP9JZYppH?x`33(=EBxG zIj^RgCV`vm&?2(fp$x9aD``}INXH%RLx3ooHo=W%o6N5T&5x-in8^d^I`QBM=&8lY zJ5UE{%&z9FSId%iBv+%*v6GsmVILERi8;`_p@)^QNGCs9O|Lpq{6f>jP*LK$!S6dT zy$gA;RXbGm6#})(MIe4q7B>11`cF&AQ*3+M%7J`!H;8ZJ9ES{YAhCM?$R@b1Pi|ih zM^rQIf)*;Jm%nU_d~h#ljtKn6iQ}b7A*G}IgjB1PJlsy$?qy8* z4cJ$2(@8$(nzoc@=ktiCA}6@K<5hB*)T4@^uPa!r?}9UY&cqI`kw>081ONHCeTJ^U z2bg^Rv2MZ$^k)h?b3N3(^cLFn0o!Jq-aE3pi})^sl3#DS#=T^1r=CPIF= zKnw6`w~ef;@k$gaH#`cb#b1@1 z)-&n(bO%q&s<=@aB!L@443TT!aB?xmsrm{&*l{5fr#J3a{N{PR&=UG@8r|bv0Y9}G z$j46j8>E2x&z+uns;g%D(4&8TG5!nGjU1DotvMvv`$PN?(fb95RF0wF3M6NBBSNdb zK-G5uN2RM~DNv`mcg0R|w7ik(zgYR+E6`6(xab_&zKKFG@xZlu&vV@Oy^%x42S=iY zxirrj7?CYbp)TR7j>}ZFs&xd`5rD|z^LKy8wV)xTio7l*=YDBNOt2SyT@QjZmlz_ z`t*-`X3SGzxHFI+p4uwUQmxJdQ{2MTwn5{7a+sb7{^T-);DuW5tWN&6 z6qM@@$XvM5N$|+@jgyv6nrV?&EQ`d4##@z(KNB(04d9IfAqK&{Chgzqj3F4?Y;sL& zw`@8*g;3;+>9F58DGL35z4rgWtY6yMGElG@Fn`#hPg>P-E!vuC=VR#RuvRPm5&7UY zu1)HZQS96Vd&NQwMYH%hoz3Jmmd<=W4mrhh z!e;kvZY3|WjuD}5hPn>*Q+@vTC=$35Y-XL@6`wths?~<@EIPscYSn9FCCfM-2vuF7lp$nxxfyf$`pB>_`8`|gN) z%h_kMnDvPM1x^67&YF3f@~gI8e&I;nctxlHCS0?9Y|Dq9FA0alm(0)VycU*mRnnwY zR*^J>>iM zB9#r!$MI|RDFfxc3m~cU(5pqdUyYVYT*_g-5KyQ=a(KsYU|W z8}UZ6mnV7$c$0SV9lFU}RtCu@dqoy*B_HAzG~$1Z+t@-s3kr6;imywQ^z3;YG%vE` zxn~amH`6~|5_4)DA64Ax{nq0T$=q-Y~Us*0lqx9 zIW1lzyFE=;kA?1ztntwA>KM!2brqHHGonrQA+4u_3%IYoxYm)j(feB4r-`HsQ10!} z_yo>n3l5=*joH+E;}F{=Of5QI<-YI;4>>>1IyW!YH77GAmV<~4_Dfwwsin785Nd&e z0^XX@Q}u;oL+TBNZxeapO{Z_MiOhQR(vsn5yAQswy<;_dd^nA7k^MepYWK;m4!BDL z!uHc+5zDgshBo<>R_)Kr*`2CdcG5Onh;Ulci$Y8Lc7}6%ihQYD&2dtE- z1?0e624g)Ah3VdVGQqQ9^`UqZ9AiVpy2jP=vqX`&FEocoxW0uCe!Gz^+q#4Tk;9eB z6sm9NIj$^g0R_qnN8eVIIe{xOx=o(li-C#Tg|kwc;Q*ff_!< z?j10&ehU0$sQli1K2v#-Q!ROi|9gxv#Nwg*ahL=_YL5=%lT}k-OhuLB{ot2ONLLE3 zz-BQJayONLWCmimPXZl@U`htpp~H2%qnQwl2YdSCnUad^`A_MZ@!APz;fo+RVM`DJ z{41uijqi)lP>1Ox+ayyk>!XCaiXEOyfZleXlfGhE+vS-7_$-YNWkaE-ssy8yp(hXF zASs`0_GL?Qh%6t~o3u&#s0O zqPlw4loog|jB9koQa>wtmIEiwW|6c#3&h*7j zPePu~xye$~3HOgLqGdz{9PP=Ln@4|@C+TWeA|VYGzYHom7N7@ab+wh3@8NfblaYSknU zk>3DD;abh@QL>tovAy`uwb3Je@Nn|slYFwGgLwn9NHV?dYv~gVy}D4v*}~wFzv}zJ zt0^qJF$$>=9&MsXa`1K93K2*A{w|}!K`3x1e#ppJwMLscH@@7!`mq2yS9UY3`*@H!ktt`> zo<+^-grmoED5P$7?_*SoMYXmXxFTlAlloo@6t=o z70-y!8!4Q^A6tN_WNI6E?4xzy@(Pd$MGUZsYo@dwt>3{{U4E1|zEuA%TYJ)}%Nb`> zwu9LU3>+>$6G}?Cc}i|?nP!tYHa*(z;<8-zXZTy`r16?T2Hw&R>JE}!qbKSiB-YXp zRR!o<9!|2c-1gL&k^HzeWK&t)ThpUh1p&=m2&#xHJXKW|EYexdcEMgB)UjA7&bH7C zSx&tMP?eP|7y73hEecH4>zV#VvH_@8jBP0+6eYK3x*w>z@m?O;Cw!mEL*C%PCY%%? za{DUX>1WzRdSj|FCxY(^yN=Ww9BYI^6?!RS_nf2|!V zMvt|s#Z#w%>1@fdZBA42aG@xOXaBT^yw=&VFord`Wf(tX>my~t${WW2W?=uSudPW? zaQN3aql`!F_SC$M4=Q5Xlk^rXW$E{0mRC6c$g<-2rc}k$F&E>4YU3$H&X4yUgR;F#EiKa_yvkK z7}pjc`}FGH{`jeEH|_Y4=f4J;0bJAVH}c>=PSK-Z#pQzH_usQZ4ECiiz+-aj(m*xn zYq*>|oZUrflwcwD-Uc>78u(xb0Q9p6dyMd?KP9i7TVS!rw;}CKK6vSb(qHym6VAV0@V1*-2JpqaVYoXZB9HbZ@_PDjqrc zwI^rsCM#xwR6L`T_bT2lD0#(>y!7Muy;{9ZzKklOzo3Wb#jYv4bp*M%yMk4U_}GR# zJu>b0Nl>0~d84G5nC-5iBiXgpX%RSPE7Hj;Egs?$5?S_=SIUPeA>5kFS9tP;b%gy^ zvNKB0%Peh%Cu^g{qe=C6=thE!tZu189%7d?ZB=WS{A|%vZ>n5;9ZX$k{H+fgojtX6 zL}aJXDqFIm3aEll1lnB^$E`Td?9$rA4KTb}Dn*>!vpUWh>@( z;`7vhKluyg_3DuTbo3By~m^k>&`+& z3kRYd@`zl2&As88)t8dG)?p&({MZ8OBcsLrSgQVPDPsO1r28daT{NKhy@`t+YWWWC zCCIT2UWVOrhfu8Ha<3y7Iy`|U7DY3?0NvD7R3-391IGs8JM-Y>vSR3Gxp>vwauJ>{ zd9#U0c~LA&k#~`$M*p+aw~3q*$Dw>Ok$RkhA=%W$^GeAKSxDV*l-AI_LLefe$v%m8aN(Yb5LyF&o|#<@2ytXpihl zJ$lMFSY#*!5aL8YYd<30k-Mk@07egNnIxEy8#E#;=D;+`)BuDTf?q6}el`+3b-YlS zQ(qLkplGdHK~{!8e{;^^7$7%Bc+%KpxavPk@JRo}QbQ#xY-Zhzn)-hJ-YvDqDN@b84mLYr{?ID4ue%G?-F>((o&tXdFVQztpH*LUp0eql z5+ugZe$a(9Hl7=KzGjJE%?Ji+-&A!=oX`a|b8ui6->ULk$+ zSciL5^HHs#Pq;aq7~1zHDQ+IQVAp;tYKvs%3)J*GskhfO0V2gk6Q|9p9U{gUy|G!Sxs{W!>1poAMskU2r zHuj|F{vu!lSD|uXVC~@x_?+0r48t_wOBut%ChqieEsO?fzF)!SubpO8Hi4Rs zDw$N>5T-j7^3Rm^f>UvI9mOBwN*p)2e=Tz8*js^u^6 z|N4X3tvCq1ja%b(w-`v0C*82vN<%9-c2#pDW6->=bO?kxj`QudJRtabr#p#`j3`)POXRu~sxZ!)(_e2cJ zqJC_5=rh8eQM?vH_!g=ofXMS`c{5vm`XBAl=f%nQ^&QH4jd=GTBt)9g(79s!>@FH+ zPqCMk`fsUsO%M`c7!ojiQe1T9asgB5OG|eytxWkbL#+`g7C~mhVf-fWbEeZ^4g3H! zlmQOMdq(s}lulT10Qw!}0jz)BL@HKQ-i5DK5hWL=3F}H#0*{-;ks}P&giX(Di#T~l zb$D;?uQzSta^BHuCCYbjtNZM=78NXAWl`CQP%hOpMK)Yyx`d0d378PwXPT3O?ADB_ z!t09b?l!u?`m}XLwq*X)IE%)f1`#LF|cLM*;Mgy@o&1By#>V1)fqoYK!Wm0;nS$q7&c zBo)cl%3XhC>T(yvqHCT?GmpX?*33ix{ROP?2(Ge{am->SE$rg)LU_FqvdFxYDz;XJ znur{2YTB0?7AY#Y9#*+@*5knZ4l z=UL=*O`&!{Xm8<%3|tq%nZJsGEarEQ$$|@fyZKct6(;<2nx<06_z}Ock6W%+NU=`r zFzVNe^h{j)bTz2Dq*Tlx7f$;2e`NWiqv$|*=L|I9Z}T81@aj8g=5r2xtAo&}El zLtSJKO3T`keD&S|!MF_kd+=bL7!UFUN{-#r25TmUQsYf-5!FSc2Laww?vG=A`CAL_ zdN-XS3;>(Lmb%mN&Lg-WpcHv5Q@xDa1P4A5LeD%aPocaN%-`Q}h98;Qmd%)qd_Mlv zLVq&xEdoBzuZj+xyJWu*UfCDIZX-kAey-v5=FC@%utfRgX`7CTm1_d|mBQhJ{Nzf{ zB3O@?$NQ#^cY0#$OGZAJZ5W~Fx1UcM%@0Lxru3rXYsXDrR&UlMRjC+eg6Gl!~-2yxHxh=~}q?aXzv1 zMXLoE^`j;77&$RT=TTIwGjk>nQP?Jz!gO*5kWp%q-t%I+KW@wTU(vtPNz{rbA_wEaRlY%kM#yc6FHmtevB!1EuP+*6}6pUY6~ zy|f_=3{K^e=I|k*p4qGCx}s^+4I{%H|0<;v5>)jGYuKlVN^?lHAJNOE*@e3Vm~Vfi2VHcd?om-N`|AuV6e zi7@-2itPtO=(_)Usz3NSnzCSAY2Jy&?#Exw#_@O?X3$hbFsQkt0v^FE(yj_5rTuXZ zQ@gPXTU>fqx<9s%)Zp!zNL4UH!7P|oij3@$057u4;#cbm{bdW&)D0DkDq00$?micr zX9>Q0zZILX4Ur0QLSx{K9I$>#c(_f={DWXiK4vFKPZ{U#+sza7W}}=#VRF5t&KEiR zt|IEa=Ur0D?6Pwu_mvG3&=B|(4Yt}UX{)|k`{--Ws)&**DVI{S*0ca_ExRmnNklpB z5oV_w75E(gC7X9%9bACBQj*wbJ!n5YA_FHcj_W7wDMq8^3+@WN+VWWpKlV>&ykA^Xgf5w!^pL%2U*93#^qhPES^J1V(c0_lYK{ zXN*FboEoj7IOMmQXrVSuqYS}3HPzrvayGcGkb1OQ`Okv?I4XGu+FMw+9yx@!EXr}; zIS%7m^0ZYm={tzVF%eX6_K>QaH;_Gd!(4P$Ejwkg^)Ce>6487UW%crD(EOjU%otX_ z3A1$Ae_4ZkPTz`{k&$My?7{X|hQm$!g?gKVk9ZJ3J=P|5%%enFm0cfqRCaIBPtAE&mhYjKFG z?nufyU}&I?>{V{6mBtu75whc=3C;sP2W(-#<$=rqy6D~ zat`j1^Y$*oYDi46cG&y3&8yAj@Et-u2N8xDDJ~>SqS-tI}lgr0VM9kW6 z^eb`&X4qTV(6dI?k~4l|_xwIf(Y$6rI*vS$g0KmGr)7)s5=)h4-wv&Y2(*qHrVh(T z1;cA9u5gI<2V3}i^KCP!0Ta{NdH!>=&2XPtI@F3A@5VHo$SX}>l=c_$%zvHTr_dd% zx=8}teP+(8F>`7&v%(?VhU*&88&%84S!in6vFuOgd;;&51#T+82XXpleXsiWix?E- z1Iq51pcXj>{ zxBYLWQ_$$`@f|pMga67!I)aH9izau2ImOS~OF`KuRS~bLVkW{O?sPB37h22Kd25)jX(${gUz1q z!Cy4M?W;qlXB*OqgKl9>gcJ+SQc0K@ov5~nsS0KFs`;(RN}=g$ zZ_n99QpAt7D@wq#z=@teYZlI`sJb)T`Dia37mTFS5n}-VKquqNkIOpC(&(iUh7~J+oH#|f4GKH=zX6&kuT6)by^DrOHfKIMVX3H;8k8#4GI&m)Q#`;ADysK2;0p99T5O((CZ+CPx>G`@5{EQC#UivJ3S=Kkv@ z8h`apy(Y6vk%}NZ*q}nAc|o?DHDIb&@*->S8boiB(-FZ{R+zz$|7SU}qcUA~PXYGA zi0s@YrIF&P&i-m>)t2j-{-Wr_uYKm ztW7$_WnzEYTrn&g957=9l``isY^gzHoi(21rH*D+Ep;W5fdABevszX}Rs`b^VofSv zSe7k<L0d<3fLi@%GC|zO& z!mT$J+#rU}@hsj7yMlKJf^#2;`mCWzfdIw!@9(01f5mrSd`*+Hb%4$2!OviUW{HwZ zYT383Os5eW*O@{eLG&$U3l^L`2-e9-SL!U5oG#Tvz7stmn~uy|bgd84x8m;Vfp{kO z!sPtDXqgR8pRd%2+9wZ@CXz(?AXmENz1+Y)owc8BEVj^ayv&*0VLi)hjI65~C;Vk4 z7)n8|3Uoj&|2#u4cAwJ=`*d!MmPAZjw{4)%Rq*%EZtv~#`1X5DZtNm`fxNo@kv`^3 z95V_wIA?*ULv|-mfBprPwzVpsTsv#J-X1Vt%8Xx%xF+-LCO*NEd1)V~!sbk-LnjUm zzR~KRkpK=IP+uUeJ6#r9mmV4Fj&U6#lxbf$i;TC@9TBfv+^wMejC&es}c~PWA#}@9C9reuGur2y2Vhw=;OX(%YMT$5z%j~bI%~(W%oX_OaXGneZ-@80|A7e}9_e$q*VxS&&*D3 z%dlE_6VR@un=UtX;m0$+$2o%v_Ca-E2f*{roW>Rs--@R3C>ERqQQgC{@7FOr>5Ot>Y?n0> zU_)_(sJfRGkvMNQU#QDIw*R?nllQdFQS4;%!ym23E^7+>!5eM?^ z{SVnw=~h7%XNth1ROuEqWzw@?x&?P)x08=Q{gjoSs~$Qgk!87KD7KBw)_c0Y{ynz< zy58SQ4f%xQEZpk|Sr+4$a2v>HqOLPh83FEr`~f#Cb(e+(1<8AcfJE=6B&=Y3)N)0p z_|wK^GH-qNhqB1v-mL@zh}fXxc3YQLcQCG=^nQXx@(-7so3NE}J|+b%LX5C)cn&i# zdTCalP8&YgPAdkd^ko)yg(SDYIkwl2r`?XKGXJ0t0)St*?Y111%+)pH~Z(!(tKo{(?U?_w;nN$Wmvk#F(d2l0$yS=F)3^au4|L`S8}FQqDazUa=U8%!tmx%)hR z^IV`KM!&|k4P?)sE6XUga(Rsp)zWQu;oChfDg{y{%gIK=R8`c#7|D5i_s7iCs)hYE z+S&1CTo;q8eqy;yvcp;wnGkny$k|yL>Bb7Mq=kKvLG@^;fcd+-?1RrTRm#zidfz;{ zf6=m`i$hYbZL%ufw0yTImP1O(`<_|hDltq!4K}u=q~EZ9$y=LeoP`&ID&gL_z};5I zFM&AiL5dbiL1eW^B*b&r`g-o=~H=SVUh&92`ziS?1f(); z>L!4b?iMZ|vF!Gqdb66)@M!1qxN^;5iIW$CX@NdLQy`s`Z<4A5OE) zHAOzz%r0)BfN9PL_ggLFDT_eC;IOAtcY7apHcfm8Ew;$q0IDroiP^V0mO9Rm~z@$TV6!; z(4?G*5zL|(>=j{`9In*@W*Y3PnGbvw{>sy_NP*C6h2}R#O)32D zC;{4_miTr*E@fxdtHP;!l%Xp1Z^QPSRo!cP{c%?(W+eWm$|R30Grr82!gH?HHzC0m z8ZFtAt;h&iooKXt`sWDpi}(?4bvOHINFfpLn_awH6ge+G6RLkei#s;+H+otJ5Y=$O zo#}s8t667TI-W(&J41zFEuV!OaVollR|EvL=l+~(Vn#jVHG-)e+ZLEB zfb-%IIuDTuS-&v`_0^bvR03-6@%T>I@uwYpW27r=9{@Xh@M!xay(pV;qP~8=?(u}T zMid!u+Ra39S*R4QVdbU%8<0k|bRaKqE-Nwd9ZT>HW42@S)IzB$qqDV1mc`COX;H2F z$M~WBO+B47%bJ_jTI`9{{VOl*jCcpz`|)=-;*7nldVAjLK9OFdjy_{@lWoY*RBLyn zWd5{+5S#%blXqN8HHKc;^1) zWNm7d#_ksq6NSHiEP+DCfh7NCt?xQ+bJBxOu2@ARKBR-^6P)7%)B}1#HZ{%~j6Cby zHBQ}QF(1z@4!t6=bc02a=Lu~v%1_X8pW(GURKdPSFKiZ2<@>xwH>l+Fr*dIpYVZD` z)a5)VX=4XAa`9Cv50YUI=2{#!vV5!L4jSf?jhsworVX7~wK*R?sncgOl44(r46|2z zv^sQjxCXr!Lw=5JlAES&MYKclT%^nPX^(I6^2V`8lR+Xg8m>b9R+UgsQlI46HD5`? z;FI?+q{bkol<{@&=0*RHZy}D1-dMdNGydd_?d+c$7_Sk*aFxrlEjLsPyI2!FW?-56 zm;8Uf4if$K?BRn~`Zjf2l@E8|+&wKD*;jRLSzTWML+j)N`*=;&snu*NYG)avIFS`C ztQ0)y3Al3wt*h~u>nd503IiUfD&Z;!YN|CtPBsf6Qz}J^V-D1m4@bOF#-bgB>_OjT z&j^$#zl)zxWiH>0Sky27Sr0k5X7*l2PgLWCX*zN__6#s17hYHXAKv41k!cytJR7-t zo*!ZOjz>Xr4%jCKu7z1NG# zR$Xiak5kNj$`XVai&z26H4IiY;kT+}9bruB4_l)%-CAasj9nbLTYP*sKAhmijBdpn zr#5uU9p^3jBa5(%MYi^1SNo%dx+~QT&~NVD`^dQywO688U4HqFn4$lxK!5-CIDAuI zzTjJA`sdR<{gb_iNh3L7oLs8KIReac6e*y5Nrsopcjx3Fmsb9SLu>G9M@(&tnr$8$ z53#bIeS5vHN4M?DEFbU29%y7wnO6)iFx7Z@ zQtJ_jSNc;z1ihf=g8|(>u<$fKiX-?$o;8m*ji1|7n)QJw*(r$Q;ED^?uZ|6~<@-zK zH1_!0;~tEYOz`=j{wF7h`_&%8C%JIm+2W^xkWOZqPwBrPwe!T4C)+z^kdRq11AU+0 zK8Rm%t*>?B?8r$ZiOlAVF{v~Qu349S?V*yx{!0mlSn?&X3EeG0%nfrXS>i!@-5oSB8P=y(O{JM$BPiiz$omBHSQp#eQAeP8EQ}^G zmkCH#P(4cfXPB3ke0IIR{+(dUupjFWt2tSDRHq+5n!Ib3+E>|x*q9kz!UlcdNT!!l zbtbZ$Se&0%Jv306oQmxRvvc}}0>-f1H8kbbazLQ-1Mk3 zqHs^f^bFZ@D}%TE_&X|aWGVg9@<#(H67OA^AR8YeYVGR|56X_<}U?NiMtGK;PNn!_I2aHwUEWXuo@)a-W_}fR2Kh}zF|)W zH-CD=y~`aw*XuZCSJ}^>sERVbk{SoFxDZ*nze)h*L@V=k-_qqW<8};pTm3CuCbJRW zJPZ;Ni>aqj8I}{RK9PFf?0y8sWlJ2E>d%BMaV3E+O|TYb$Hbj0W%Qg*UaR#;yib8m z6Cx@3sxGQ|5?-}P5(N6u$!*Vwr|Xdl*=nf=$+3U*G2)(LHPcZ74mQw9OXR!tFwsmT z*EC&2!xgCi2TTT4JG+W6>9X!>n;^0D-pz!kekCvUpM4z9X}G{9TV1gpW}v``=WXM{ z)7qTC^G)e$PfdQU+8a<`?zG08D<)sP@&2!TlGA)>Nd14%S$yL*I&Y(Y zRWd(iX2b9ggWxzV$J3<0r28;;;8&qeCOi`|XG@&TZsh4GmakUV_2~R)kBEDNH0zM@ zZ36_*`82xy;U=32Iv|6$YWu-#~q#B?IMm_0a* zaEU(?!%OkY;^(V2-i0{l)DW1h#~$O8hoDfL;cxQkG>m}&@CW@3P~MRC79_4mGnVyoO2{xFqH9p!1f<2e(;6_a$5 z*FYgw1S9$TnczCT%UNb@mp78?-V(j_{yJx0Tz4tHptU~r=ZUEf z45y@^D?LNeIklg7k^bQ;EYEv+n)^ayyeM*yOSl0Urhcaw*b;i^#!Qvz$IZ4q*Lp+= zMCTg0`P5YgReWG6eRO_0W5C+FoM!S&@tI)=X3`|@PtSaYmq>X#)Eyz55h~3t>Zm1Yrz`**9jcnSwox9A?w6gJSS4vj$zWbxNkxD$uSR z)!|azvP}jaH(87Hp}nUNLgfNLtxta!qXwUGS};{K_wIDqP(1XZCAA+fuuf%t5AfI0 ziwM1t+#l=r`AKS4d z+?4+0>7EyM_+Es;Q!?eQ9AQ)rzh+^(9Expce6USsndxce0j^YtMj?`@?ns+tY7(RWZzpN)Kt zm#7Es9}2z7VE1M%qV>=TGVh~uA2n>ozYDvKlo8HWd(Y*^+Ob!LZN6t_S?SwFAy=xy z1`2I^ymMY>E4DB~c`q1Ssw6)=Li;n(MYFOOk-CVI{MB2MZ1dogfXD1k)0TKpy32m( zbfhJ?G6V(5q^42Wn`UAmZ=rT}`B=w6-vHcq4q8R9=tWk5sWtj)DO0tji5U4lKTui> zK0~^9vWL>7#YP(YF=mG8mz&D|Yu}{I&Gl-fQN%F_{!79oMa|W^VI%eA9BX!b7NS2B zQzafXz}#lG=}N~emshnnKxij^HmkuHC4As{kG;aCw1jpbr)59nMJ^ccem5uPa`W`c zA2>zQ3^gysS|dF*^CsmMOD|vuiB3Wv{fBt_MvYV$UWwHGED(M*4_9M}ZsA#1TC_Jr zzb?U?h=f*)xVw~A?9@>{PBF?Xx9U>rYL{x|g#LAGMm##4CRx;5bA_sZV_FD=Lnhy~ zoxxgmctJ=5c+_~1H#cQmhjzABb=2aM0uDs_2Qb41<{9g(vrCA0=kU)V1>^r(^VQWu zLlwV%q3v7!a@(}3W-}tDk6huMQ>bKA8ZVP_tJZN#DwiY;C`8ySNZtW|&MV zYC(Z+%vxl;Qq$(@zm5o%w}fQ$*m4EB8yH=*TRy==IG|Ty$cDAL<3G1x1?R9~KJ0`g zx~EO(wrb|pisxJPEX;hxHq~E4h>h-hc zb;d`Y4dvI|UMQo&y7gLCs z`52IkmBi&E3itF-V8f%_p6s!|qY~UZ4L%=U-F@&feM8oNmj2?q-u9xu+)L9M7KdH? zmK{2FF>#5|{KV4oB`B}#w!gsnXQ0>Ar};|iuO!WxezuRVUMZ>mznp<`f0?rEq;%7T zBhWHsZGL#D{wd9oQ=iSbgm z#@f$DI&4RrH)}~xy~8z`3m!@qc3NKmTT)GD@uoryAAdYw|=I@Us_v?cYvpV!k*)YLy*K??fwRfr8#{`E7xrsUHJvg@i#Z$=dyZATs zHZTlR%)Ci7kxGVh_Nu)x_2$h@#2M66wDyoEB%VmsM?PrhW_GYfLSMrbf$IuXdz~4L zZt14zm;0@Kli1_VY^LgBRnY>Qk2^6e!8UyzfMkRU^>315l)UWrB6ecCN>cj?lo zLa9;qarfV#JF_3;3=ZvWvMH$ts?3I$t2XQ4r`a8Q)@=N04ru(Du(!0rTl$dm`8DpW zH7lv(?b309^Fr5*TyyZ)8_D=rM8VD`y-M$!QF2{&w{TDZ{s)*{q#cf$*RjMNUk^qf~}?@EV_g+wrt((jcDP#jfv`iJBkDdf@ev zs`QnoGY+buII9mtaB+2mx`bHZxZUJeUKcDqO6=x{g~?G_vaw@5)m%8z(3C9wc|}hegFM*o)4>B+Ot-Ou6wEqZDoh)CgNjUKQ6gr#B(q`) z{zSQl`N6(?{~vkxh!*zs_DHkkJ*?i19N7b^s@?WA4bub3wWd$yEVW@V->Er_;bG%e z^{a&Q^mdSLrymv`trx1i@hQxPc&_1e?4Bln<#p#+PjE{A-Sc1fZ2q`36EczJ{TG^g zqy6mHVuWb*>5pX&uF@>YuJ(3`) zU3un6V+CB@5`VvEUd}@nLnbb|=Hy~_g}jXT=*f6!H@~t-CLVYnO&1_VWI<<$HT5eg zj|P;Y_EPPk|JoVXnME+N?WtU8&h0_e@bSo4t1cN*O253>&9M_6^NbWN2gDxT;n_iN z?6tSh(+G2CGv=({;OVu=Q$YdwJRTKAmm#yZqWREOlf35`Bh84`hx#2C$Tk-wd z>BOE2W>mNmXL$)eWFk#Z=$?*^1GC}=R8hBpjtZ`knn$SH=W1Jtu_hLFt_h9q{eY33 zqtklGJ~wo4Q0mN;IoHAFHOU13$nW%KcgrCyH?pEze?oQ>WiZys0JAdX_wO4d2G>p{ zWNb$4wW>l+<4vGR#L$j;tPUW;S{254D*7M(Nka?VGu5mRGQd_i1bVeFA6JIr{T(Nv z*5a2-T{~A6c+?=hH2%Zn0*X-^QtA{ge^!J#4N@C=$5e5X$tDn(UU+IZmuU=MvQ5L; z#8c@_aNl{455hy?c@;Q-n>-9fL!tX)LH@@|hifuVXXaw+DL!XP3PvVNptaFnXZkkq zU?MX!Y&Znk3Fyfs_#{!uX>TmOiwv zjwA?~>XJynYn3bQWv%in#5yo@%@x+zrHXgYP4qrxcxRI%_*O$*U=}GVPr<-yK0+IW zdnk?J-x^pmbs-dQ5TL^93M_gKjKDj@L>{hUI=55J@SkMX4dfkCi-&I}C^V4F&U|EFV4lDMWDmw;LBCe6CeC9pMIN$4R zHBc4@?Rh{aynip-zNo*m*L`V51$+a(-CgNm6G@~|yTBXmbgd)G8{)INwj%xR^$$L7 zC&z-1XD>(Z@D!VC7^$Ug_YYQV&^FNjMlB85 zSelId0oTe2AuwP^I)gAQ^l>-WE_&`e^_#a)ZXi;ZXOT*9H8S;N3Y1Gs`vSVn;F5X2 z!5sK-k}NwI5DUv!U(&tM3?~?+UJjbn*$2RVgzJqoB^%F_p&g2jbX}XgR%0$LaiDfa z_BFb9Wh(JyyEU=+4`-IqAA|IMoM{v9j*Q)HJ^`J8>;oeG=q0A#QTve0X{UaMtO8T8 z4Kl2_rn*gDI?Fx-arQKg=R+rQxXdVFQMA>IAO9O#BhxE9+>{vHZm*l{x>+wY@ZvCv$FG386@n3DucW8LoUlX2#4}5%=VbKd9l5-ol z@7jst44`G5s`utkfpV&Mrbds0EdGpUiqR{7jn6H-`SGDRzrK!43W!w8H79d~p}fq# ziF&#WOyf>9Kr|G>NumV?z~OJFa_0>p|7C^v7?&K(|1%w!gIlWMjgh03(1!18<)SyB zbo<#36cG7rsVAo#?i}~r%r72PH-LQ?#mc%B!Se@Rchm%32$GW072<(6Nc^BYAMT{; zHhK~XeKeDRfHow>iW5G}uFti6v(53|J}~_SDh~LxBNoK~o;`s+PJIbIl+0Ep9`PK% zZR98)sB3_rY2=zN=Ayg7dS_5X{7qShKMh*PLT*HKP4u(by#=UgZITx;0y=_%S`cRv zl`1*6R;EwcgsDyi7TFb#nE_~gtqZJvW09UfP7=A8|DpcX%^!S-ja*fPkad9hV`8_%ye zD_G1%Q)jW`z=~yD7P&7yD+BzU_2C(^?CXh5yeGMfLLyz%44{)3Mu%?Z^Yo&Xe{@)h zt)XuI+>EwvE$@X6G-1k2pWh~X&*nB0_@Pq4GAIVP5+!lrPqlu4J-iI%q|66M_>%3> zs(-s3b+B6$bxsqu-iv}K40Y<-uhIxIeQ=HOX6rAPnpSGR>2IN3?o|KRpR#nY;*$*N z11#{wr2Q0sRjM!+%7ogT+~|n+PVn1TN=AVJ5(Lu2NxOv2NxXmFu+nPZutRX~;946y z1m28W5uaGOgBJ7DhQdT3Y-e?OD%H@yJ6Xk2ZTied-;gd#wInaAKX)h`$mJ7&>(at$ zLmn_?>4OB;qHj@HjQyK{$OAeDrz1I6Jwd=!|6+HzuN#>0ld>%4;Oz#SOhQn7G%II# zQ@10}EO0I&MX;+fn`+r);NUJx-th2_zvy-DU@6yDIS$nJ78e1z+_fqi4$-lXajPIF z^XX%oJ&|SdQ%3WyRkpr(STbbRN^{IpH z1$A_`^;-I+9sel=FZxs7UlCt%{qH`oI&;5W{**HFY!7Jz<_g()!)KAqbFnwtmWxFaXLiMGp;yJUV0q=AlB2%4EapGCf*I8*+ z@?KE7lB#=-StK}>l2^1v{WaCHz;Y~2Gsi%$$EzWkT+TyDH=cZdk$*W6x}*NX<2}}# z{&R3E2Vl=qCo1A|n8JHgmNYFAD-TQr92XBxXR?GYy>_}txfS5tPLCnr-j`sSo z+iL!;ufntrUqT^AFR>$Ocgs#=A1x^uJN(buthdEmHvA2<2YU5H(?;0qs1Y{#T^y(P zg~#8MzQ#EpJ3=`U+4i1y%+fv|wI1WyJ4yECOI)YXAv}`5jeM{)3bnfT3YrEBVN%C%~=1AS$=W%=8Iig$%n7>njBLdGE8XFy~U07s<|5 zSUjigFOUv219n@IQCSs&Vx+2=EU-eNf++T)+m8WCHRS?JaMlpBMy`gg^-W1nEh71x zb$G7S1sRE>E1d~feJ~W;6RqE~^wFaPp&;dug<~FA@=GGG@VBoWa4p+0RY$KcyjD~` z;Xk?siMx#5$l@LSNu}?U{pY0IuMt-;BVl~d^dD4%Ev%N6E5xPDOM?$;>J?|feU=*w zgWQ7O)FJfNbBmeB-?Lf6Zb)(7Ga+YBVkWvhLL94}Q}eJU)~4Ztn->uF2Hzf?xh^ zFS^FhzouH1w~KoUcB;LJniz>WA#d-|oi9J!*eE&O>*RromMU~t1U-H9S}gR6+UjW>y~Slo2EUAyZ!jotGovC`m*2u!Q^1wf z;+`(G_mo85^R(YgG|>#4uwq?eMZMtSgoF|BTFEi}a)oz;>kWIzQjjyM9nyeSbvUUkH2Gu z-6x!ej?LMRfAV?27q1Tc!(Ls>ot|}l`W0;TFp(UV9F>j@-Uw!VgPsFZF}IMus31@- zNH2mz=D(^)nzs!bAAWzBg1Tt4Q|QW!1GRcfe!` z-ic}!*GOv`w8EbwgXt;j*CcG~tV~u>q7VUPZG-IHA%Lq+~JhMivFO`e$(SXX#fydOap4nOWgykrmRmZi1 z6A%i&6Z$^0j5o~^8xEb%Wes}4bs6Q7cV?7WQ`oV47|jSyih6{i;Ik9Y#3j^c&J`ur z7$uACC|Zt`xH(z^Khh-2XB94kyS$3a>?xNjsABfg6#ZB*PNFZ_ zL+(_?QQHa?G_~t0TR#@1Pl2g(-^W{cP|*L%1hHCDUL2`Tpj9lQ(Zt@7Sr+V^`MQ!! z0M3@|=kiXBm8DlRg=-s48AlD~zUx#<3v<&TW73@VpR9nuQF6_W+5v%6uAj`7)YV@X zjL&l(DI&1O-=R=6wM!6~~3059Nj? ztqAjJGkRh2XH{$ZPb^+9_p00HWX9Q#+lx`?Pcv8qj)aK*x0@CJu*N|VK}JF!o#I;B zd+TwWf(U#AmB`r~7lxpE?kF=tgaeL6;4JT? z_WIHVrtTcKp5LqW7d95N_$rM~bs;>@6j&$&&euFCQ*_r{5j^%8%UW4}&IXs6z8wMl zOcScT1$|6bT5OvAZEhKilxvq5-?lG<5CE!TS_OC0TBWCL6S;N)r}Q)DJ7sIEHyr#} zxQ1luGc-sDD@D(saWG3bZjKP>2X>TL+k~c8Ov0gI$<%Qc>3r1+I zqw;jYdn&V9t-k{22Kvn(E1Q#KyekWOch>Ns_O~L^Qx+FHPmbUd$?e6?Ue1YZ&{Hp!

`y`y*F_HB?a&vr9t2lqr% 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 literal 0 HcmV?d00001 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj index 995138129ff..4eba5827c1f 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj +++ b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj @@ -148,6 +148,7 @@ + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 4f8035c9c9d..62be9a12069 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -3,7 +3,8 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:media="using:Microsoft.Toolkit.Uwp.UI.Media" + xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:effects="using:Microsoft.Toolkit.Uwp.UI.Media.Effects" mc:Ignorable="d"> @@ -19,7 +20,25 @@ Grid.Column="2" Height="400"> - + + + + + + + + + + + + + + + + + + + From 5b3caef9d90e5a7f33d1ca941aa8b67c5c493d18 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Wed, 29 Jan 2020 23:16:48 +0100 Subject: [PATCH 15/92] Fixed incorrect extensions namespaces --- .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 2 +- .../Extensions/System.Collections.Generic/GenericExtensions.cs | 2 +- .../Extensions/System.Threading.Tasks/AsyncMutex.cs | 2 +- .../Extensions/System/UriExtensions.cs | 2 +- .../Windows.UI.Composition/CompositionObjectExtensions.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs | 3 +-- .../Pipelines/PipelineBuilder.Effects.cs | 2 +- .../Pipelines/PipelineBuilder.Initialization.cs | 2 +- .../Pipelines/PipelineBuilder.Prebuilt.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs | 3 +-- 10 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index 2170426aab1..69bed244a23 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs @@ -2,9 +2,9 @@ // 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.Extensions.System.Threading.Tasks; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs index 24e2a1450e7..202669d3da4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Collections.Generic/GenericExtensions.cs @@ -7,7 +7,7 @@ using System.Diagnostics.Contracts; using System.Linq; -namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Collections.Generic +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions { ///

/// An extension for the diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs index 9f6562409ba..d820f502f83 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System.Threading.Tasks/AsyncMutex.cs @@ -7,7 +7,7 @@ using System.Threading; using System.Threading.Tasks; -namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions { /// /// An implementation that can be easily used inside a block diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs index 55cc6df1bfe..5395a03337c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/UriExtensions.cs @@ -5,7 +5,7 @@ using System; using System.Diagnostics.Contracts; -namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.System +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions { /// /// An extension for the type diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs index 97945c463b6..cf9fe9292a6 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs @@ -9,7 +9,7 @@ using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; -namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions { /// /// An extension for the type diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs index 5fb57331ef9..3b50c856492 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs @@ -10,8 +10,6 @@ using Microsoft.Graphics.Canvas.UI; using Microsoft.Graphics.Canvas.UI.Composition; using Microsoft.Graphics.Canvas.UI.Xaml; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Threading.Tasks; using Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache; using Windows.Foundation; using Windows.Graphics.DirectX; @@ -20,6 +18,7 @@ using Windows.UI; using Windows.UI.Composition; using Windows.UI.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index f827f058201..14589d14d1f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -8,10 +8,10 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.Graphics.Canvas.Effects; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; using Windows.Graphics.Effects; using Windows.UI; using Windows.UI.Composition; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 4a4fe779630..6643af313c2 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using Microsoft.Graphics.Canvas; using Microsoft.Graphics.Canvas.Effects; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System; using Microsoft.Toolkit.Uwp.UI.Media.Helpers; using Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache; using Windows.Graphics.Effects; @@ -15,6 +14,7 @@ using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index d8673c2434a..9d786b20408 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -5,8 +5,8 @@ using System; using System.Diagnostics.Contracts; using Microsoft.Graphics.Canvas.Effects; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System; using Windows.UI; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 1710a331a75..107bfa2f963 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -8,12 +8,11 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Toolkit.Uwp.UI.Media.Brushes; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.System.Collections.Generic; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions.Windows.UI.Composition; using Windows.Graphics.Effects; using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { From cf13f31b8557d53bccfc63735a289d3786ad773a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Wed, 29 Jan 2020 23:42:44 +0100 Subject: [PATCH 16/92] Reordered using directives --- .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index 69bed244a23..59233a9781e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs @@ -2,9 +2,9 @@ // 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.Extensions; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base { From f1f69934538b82ca104cf3f9aaa4ee3b2e633a30 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Wed, 29 Jan 2020 23:54:09 +0100 Subject: [PATCH 17/92] Code refactoring, added LuminanceToAlpha pipeline effect --- .../PipelineBrush/PipelineBrushXaml.bind | 2 +- .../Brushes/PipelineBrush.cs | 6 +++--- ...nanceEffect.cs => LuminanceToAlphaEffect.cs} | 2 +- .../Pipelines/PipelineBuilder.Effects.cs | 17 ++++++++++++++++- 4 files changed, 21 insertions(+), 6 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{LuminanceEffect.cs => LuminanceToAlphaEffect.cs} (88%) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 62be9a12069..6eb1c790259 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -23,7 +23,7 @@ - + diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index db3c98b10f0..f3ca736158e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -6,13 +6,13 @@ using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; -using Microsoft.Graphics.Canvas.Effects; using Microsoft.Toolkit.Uwp.UI.Media.Brushes.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; +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 TileEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TileEffect; @@ -82,8 +82,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu { case OpacityEffect opacity: return builder.Opacity((float)opacity.Value); - case LuminanceEffect _: - return builder.Effect(source => new LuminanceToAlphaEffect { Source = source }); + case LuminanceToAlphaEffect _: + return builder.LuminanceToAlphaEffect(); case TintEffect tint: return builder.Tint(tint.Color, (float)tint.Opacity); case BlurEffect blur: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs similarity index 88% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs index 67183aacb39..d0476ee2aaa 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs @@ -9,7 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A luminance effect which directly replicates /// - public sealed class LuminanceEffect : IPipelineEffect + public sealed class LuminanceToAlphaEffect : IPipelineEffect { } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 14589d14d1f..a236f8ca56d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -8,10 +8,10 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Windows.Graphics.Effects; using Windows.UI; using Windows.UI.Composition; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { @@ -366,6 +366,21 @@ public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animatio return FromColor(color).Mix(this, mix, out animation); } + /// + /// Applies a luminance to alpha effect on the current pipeline + /// + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder LuminanceToAlphaEffect() + { + async Task Factory() => new LuminanceToAlphaEffect + { + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + /// /// Applies a custom effect to the current pipeline /// From 14da07b943b47beb75c5f3999854b5de6ca462ab Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 00:15:07 +0100 Subject: [PATCH 18/92] Added C# sample code --- .../Microsoft.Toolkit.Uwp.SampleApp.csproj | 1 + .../PipelineBrush/PipelineBrushCode.bind | 20 +++++++++++++++++++ .../SamplePages/samples.json | 1 + 3 files changed, 22 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj index 4eba5827c1f..0c2666a788f 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj +++ b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj @@ -558,6 +558,7 @@ + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind new file mode 100644 index 00000000000..a1ed8ed968a --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind @@ -0,0 +1,20 @@ +// Defines a brush like the one shown in the XAML code, but via C# code. +using Microsoft.Toolkit.Uwp.UI.Media.Brushes; +using Microsoft.Toolkit.Uwp.UI.Media.Effects; +using Windows.UI.Xaml.Media; + +Brush brush = + PipelineBuilder + .FromBackdropBrush() + .LuminanceToAlphaEffect() + .Opacity(0.4f) + .Blend( + PipelineBuilder.FromBackdropBrush(), + BlendEffectMode.Multiply) + .Blur(16) + .Tint("#FF222222".ToColor(), 0.4f) + .Blend( + PipelineBuilder.FromTiles("/Assets/BrushAssets/NoiseTexture.png"), + BlendEffectMode.Overlay, + Placement.Background) + .AsBrush(); diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json index b919f6c6258..507c54d5a77 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json @@ -994,6 +994,7 @@ "Type": "PipelineBrushPage", "About": "A composition brush which can render any custom Win2D/Composition effects chain.", "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "CodeFile": "PipelineBrushCode.bind", "XamlCodeFile": "PipelineBrushXaml.bind", "Icon": "/SamplePages/PipelineBrush/PipelineBrush.png", "BadgeUpdateVersionRequired": "Creators Update required", From 84e6fbdf53413d5ed6913593d125e528044652da Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 00:21:56 +0100 Subject: [PATCH 19/92] Reordered a using statement --- .../Pipelines/PipelineBuilder.Prebuilt.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index 9d786b20408..4bf8228769c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -5,8 +5,8 @@ using System; using System.Diagnostics.Contracts; using Microsoft.Graphics.Canvas.Effects; -using Windows.UI; using Microsoft.Toolkit.Uwp.UI.Media.Extensions; +using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { From 371e3e21b4e2d307bdb03ae7fd9e171c1bb6b456 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 00:25:24 +0100 Subject: [PATCH 20/92] Renamed some public APIs --- .../PipelineBrush/PipelineBrushCode.bind | 6 +++--- .../Pipelines/PipelineBuilder.Initialization.cs | 6 +++--- .../Pipelines/PipelineBuilder.Prebuilt.cs | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind index a1ed8ed968a..6514342d0c4 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind @@ -5,11 +5,11 @@ using Windows.UI.Xaml.Media; Brush brush = PipelineBuilder - .FromBackdropBrush() - .LuminanceToAlphaEffect() + .FromBackdrop() + .LuminanceToAlpha() .Opacity(0.4f) .Blend( - PipelineBuilder.FromBackdropBrush(), + PipelineBuilder.FromBackdrop(), BlendEffectMode.Multiply) .Blur(16) .Tint("#FF222222".ToColor(), 0.4f) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 6643af313c2..5492ada4d6c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Microsoft.Graphics.Canvas; using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Microsoft.Toolkit.Uwp.UI.Media.Helpers; using Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache; using Windows.Graphics.Effects; @@ -14,7 +15,6 @@ using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { @@ -38,7 +38,7 @@ public sealed partial class PipelineBuilder /// /// A new instance to use to keep adding new effects [Pure] - public static PipelineBuilder FromBackdropBrush() + public static PipelineBuilder FromBackdrop() { Task Factory() { @@ -55,7 +55,7 @@ Task Factory() /// /// A new instance to use to keep adding new effects [Pure] - public static PipelineBuilder FromHostBackdropBrush() + public static PipelineBuilder FromHostBackdrop() { Task Factory() { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index 4bf8228769c..3d4a7947775 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -41,10 +41,10 @@ public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, str public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { return - FromHostBackdropBrush() + FromHostBackdrop() .Effect(source => new LuminanceToAlphaEffect { Source = source }) .Opacity(0.4f) - .Blend(FromHostBackdropBrush(), BlendEffectMode.Multiply) + .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) .Tint(tint, mix) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } @@ -77,10 +77,10 @@ public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, out public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, out EffectAnimation tintAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { return - FromHostBackdropBrush() + FromHostBackdrop() .Effect(source => new LuminanceToAlphaEffect { Source = source }) .Opacity(0.4f) - .Blend(FromHostBackdropBrush(), BlendEffectMode.Multiply) + .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) .Tint(tint, mix, out tintAnimation) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } @@ -113,7 +113,7 @@ public static PipelineBuilder FromBackdropAcrylic(Color tint, float mix, float b public static PipelineBuilder FromBackdropAcrylic(Color tint, float mix, float blur, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { return - FromBackdropBrush() + FromBackdrop() .Tint(tint, mix) .Blur(blur) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); @@ -161,7 +161,7 @@ public static PipelineBuilder FromBackdropAcrylic( CacheMode cacheMode = CacheMode.Default) { return - FromBackdropBrush() + FromBackdrop() .Tint(tint, mix, out tintAnimation) .Blur(blur) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); @@ -209,7 +209,7 @@ public static PipelineBuilder FromBackdropAcrylic( CacheMode cacheMode = CacheMode.Default) { return - FromBackdropBrush() + FromBackdrop() .Tint(tint, mix) .Blur(blur, out blurAnimation) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); @@ -261,7 +261,7 @@ public static PipelineBuilder FromBackdropAcrylic( CacheMode cacheMode = CacheMode.Default) { return - FromBackdropBrush() + FromBackdrop() .Tint(tint, mix, out tintAnimation) .Blur(blur, out blurAnimation) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); From b844a1e0dd9191a5c8484450011649f780e1e97b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 00:25:41 +0100 Subject: [PATCH 21/92] More API refactoring --- .../Brushes/PipelineBrush.cs | 6 +++--- .../Pipelines/PipelineBuilder.Effects.cs | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index f3ca736158e..6b50b0a3fca 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -52,9 +52,9 @@ private static PipelineBuilder Start(IPipelineEffect effect) switch (effect) { case BackdropEffect backdrop when backdrop.Source == AcrylicBackgroundSource.Backdrop: - return PipelineBuilder.FromBackdropBrush(); + return PipelineBuilder.FromBackdrop(); case BackdropEffect backdrop when backdrop.Source == AcrylicBackgroundSource.HostBackdrop: - return PipelineBuilder.FromHostBackdropBrush(); + return PipelineBuilder.FromHostBackdrop(); case SolidColorEffect color: return PipelineBuilder.FromColor(color.Color); case ImageEffect image: @@ -83,7 +83,7 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu case OpacityEffect opacity: return builder.Opacity((float)opacity.Value); case LuminanceToAlphaEffect _: - return builder.LuminanceToAlphaEffect(); + return builder.LuminanceToAlpha(); case TintEffect tint: return builder.Tint(tint.Color, (float)tint.Opacity); case BlurEffect blur: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index a236f8ca56d..a37132b7aeb 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -53,14 +53,14 @@ public PipelineBuilder Blend(PipelineBuilder pipeline, BlendEffectMode mode, Pla } /// - /// Blends two pipelines using an instance + /// Cross fades two pipelines using an instance /// - /// The second instance to blend + /// The second instance to cross fade /// The cross fade factor to blend the input effects /// The placement to use with the two input pipelines /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Mix(PipelineBuilder pipeline, float factor = 0.5f, Placement placement = Placement.Foreground) + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, Placement placement = Placement.Foreground) { if (factor < 0 || factor > 1) { @@ -90,16 +90,16 @@ public PipelineBuilder Mix(PipelineBuilder pipeline, float factor = 0.5f, Placem } /// - /// Blends two pipelines using an instance + /// Cross fades two pipelines using an instance /// - /// The second instance to blend + /// The second instance to cross fade /// The cross fade factor to blend the input effects /// The optional blur animation for the effect /// The placement to use with the two input pipelines /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Mix(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) { if (factor < 0 || factor > 1) { @@ -349,7 +349,7 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) [Pure] public PipelineBuilder Tint(Color color, float mix) { - return FromColor(color).Mix(this, mix); + return FromColor(color).CrossFade(this, mix); } /// @@ -363,7 +363,7 @@ public PipelineBuilder Tint(Color color, float mix) [Pure] public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animation) { - return FromColor(color).Mix(this, mix, out animation); + return FromColor(color).CrossFade(this, mix, out animation); } /// @@ -371,7 +371,7 @@ public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animatio /// /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder LuminanceToAlphaEffect() + public PipelineBuilder LuminanceToAlpha() { async Task Factory() => new LuminanceToAlphaEffect { From d6ffabbaa8aac26f6620110169916068743337a1 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 00:31:12 +0100 Subject: [PATCH 22/92] Removed unused API --- .../CompositionObjectExtensions.cs | 23 ------------------- .../Helpers/Win2DImageHelper.cs | 2 +- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs index cf9fe9292a6..fd584c27b9c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs @@ -5,7 +5,6 @@ using System; using System.Threading.Tasks; using Windows.UI.Composition; -using Windows.UI.Core; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; @@ -32,28 +31,6 @@ public static void BindSize(this CompositionObject source, UIElement target) source.StartAnimation("Size", bindSizeAnimation); } - /// - /// Tries to retrieve the instance of the input - /// - /// The source instance - /// The resulting , if existing - /// if the has been retrieved, otherwise - public static bool TryGetDispatcher(this CompositionObject source, out CoreDispatcher dispatcher) - { - try - { - dispatcher = source.Dispatcher; - - return true; - } - catch (ObjectDisposedException) - { - dispatcher = null; - - return false; - } - } - /// /// Starts an animation on the given property of a /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs index 3b50c856492..fbec05a9f2f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs @@ -10,6 +10,7 @@ using Microsoft.Graphics.Canvas.UI; using Microsoft.Graphics.Canvas.UI.Composition; using Microsoft.Graphics.Canvas.UI.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache; using Windows.Foundation; using Windows.Graphics.DirectX; @@ -18,7 +19,6 @@ using Windows.UI; using Windows.UI.Composition; using Windows.UI.Xaml; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers { From b913c9988d7c379a17876199f91f4669a337be11 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 01:49:08 +0100 Subject: [PATCH 23/92] Reordered a using statement --- Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 107bfa2f963..baa97735e0a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -8,11 +8,11 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Toolkit.Uwp.UI.Media.Brushes; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Windows.Graphics.Effects; using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { From 66d4dcef49d7312c30c94df2076d1f0197bbff28 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 15:36:34 +0100 Subject: [PATCH 24/92] Added support for repeated effects in a pipeline --- .../Extensions/System/GuidExtensions.cs | 30 +++++++++++++++++++ .../Pipelines/PipelineBuilder.Effects.cs | 30 ++++++++++++------- .../Pipelines/PipelineBuilder.cs | 4 +-- 3 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/GuidExtensions.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/GuidExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/GuidExtensions.cs new file mode 100644 index 00000000000..dcc7435f3b7 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/System/GuidExtensions.cs @@ -0,0 +1,30 @@ +// 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 System; +using System.Diagnostics.Contracts; +using System.Linq; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Extensions +{ + /// + /// An extension for the type + /// + public static class GuidExtensions + { + /// + /// Returns a representation of a only made of uppercase letters + /// + /// The input to process + /// A representation of only made up of letters in the [A-Z] range + [Pure] + internal static string ToUppercaseAsciiLetters(this Guid guid) + { + return new string(( + from c in guid.ToString("N") + let l = char.IsDigit(c) ? (char)('G' + c - '0') : c + select l).ToArray()); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index a37132b7aeb..0a28a8c2e32 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -118,12 +118,14 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff background = this; } + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + async Task Factory() => new CrossFadeEffect { CrossFade = factor, Source1 = await foreground.sourceProducer(), Source2 = await background.sourceProducer(), - Name = "Fade" + Name = id }; animation = (brush, value, ms) => @@ -136,7 +138,7 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff return brush.StartAnimationAsync("Fade.CrossFade", value, TimeSpan.FromMilliseconds(ms)); }; - return new PipelineBuilder(Factory, foreground, background, new[] { "Fade.CrossFade" }); + return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.CrossFade" }); } /// @@ -212,18 +214,20 @@ public PipelineBuilder Blur(float blur, EffectBorderMode mode = EffectBorderMode [Pure] public PipelineBuilder Blur(float blur, out EffectAnimation animation, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + async Task Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, Optimization = optimization, Source = await this.sourceProducer(), - Name = "Blur" + Name = id }; - animation = (brush, value, ms) => brush.StartAnimationAsync("Blur.BlurAmount", value, TimeSpan.FromMilliseconds(ms)); + animation = (brush, value, ms) => brush.StartAnimationAsync($"{id}.BlurAmount", value, TimeSpan.FromMilliseconds(ms)); - return new PipelineBuilder(this, Factory, new[] { "Blur.BlurAmount" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.BlurAmount" }); } /// @@ -263,11 +267,13 @@ public PipelineBuilder Saturation(float saturation, out EffectAnimation animatio throw new ArgumentOutOfRangeException(nameof(saturation), "The saturation must be in the [0,1] range"); } + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + async Task Factory() => new SaturationEffect { Saturation = saturation, Source = await this.sourceProducer(), - Name = "Saturation" + Name = id }; animation = (brush, value, ms) => @@ -277,10 +283,10 @@ public PipelineBuilder Saturation(float saturation, out EffectAnimation animatio throw new ArgumentOutOfRangeException(nameof(value), "The saturation must be in the [0,1] range"); } - return brush.StartAnimationAsync("Saturation.Saturation", value, TimeSpan.FromMilliseconds(ms)); + return brush.StartAnimationAsync($"{id}.Saturation", value, TimeSpan.FromMilliseconds(ms)); }; - return new PipelineBuilder(this, Factory, new[] { "Saturation.Saturation" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.Saturation" }); } /// @@ -320,11 +326,13 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) throw new ArgumentOutOfRangeException(nameof(opacity), "The opacity must be in the [0,1] range"); } + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + async Task Factory() => new OpacityEffect { Opacity = opacity, Source = await this.sourceProducer(), - Name = "Opacity" + Name = id }; animation = (brush, value, ms) => @@ -334,10 +342,10 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) throw new ArgumentOutOfRangeException(nameof(value), "The opacity must be in the [0,1] range"); } - return brush.StartAnimationAsync("Opacity.Opacity", value, TimeSpan.FromMilliseconds(ms)); + return brush.StartAnimationAsync($"{id}.Opacity", value, TimeSpan.FromMilliseconds(ms)); }; - return new PipelineBuilder(this, Factory, new[] { "Opacity.Opacity" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.Opacity" }); } /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index baa97735e0a..99f1d4a6357 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -51,9 +51,7 @@ public sealed partial class PipelineBuilder /// A instance that will return the initial private PipelineBuilder(Func> factory) { - string - guid = Guid.NewGuid().ToString("N"), - id = Regex.Replace(guid, @"\d", m => ((char)('g' + m.Value[0] - '0')).ToString()); + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); this.sourceProducer = () => Task.FromResult(new CompositionEffectSourceParameter(id)); this.lazyParameters = new Dictionary>> { { id, factory } }; From 05363d4dba6d9401115497927a1413b13c109ce3 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 16:04:01 +0100 Subject: [PATCH 25/92] Animation delegates changed to TimeSpan params --- .../Brushes/XamlCompositionBrush.cs | 6 +++--- .../Pipelines/PipelineBuilder.Effects.cs | 14 +++++++------- .../Pipelines/PipelineBuilder.cs | 5 ++--- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs index d241685ed6a..e7bbdd388b0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs @@ -14,9 +14,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes /// A that represents a custom effect animation that can be applied to a instance /// /// The animation target value - /// The animation duration, in milliseconds + /// The animation duration /// A that completes when the target animation completes - public delegate Task XamlEffectAnimation(float value, int ms); + public delegate Task XamlEffectAnimation(float value, TimeSpan duration); /// /// A simple that can be used to quickly create XAML brushes from arbitrary pipelines @@ -43,7 +43,7 @@ public sealed class XamlCompositionBrush : XamlCompositionEffectBrushBase [Pure] public XamlCompositionBrush Bind(EffectAnimation animation, out XamlEffectAnimation bound) { - bound = (value, ms) => animation(this.CompositionBrush, value, ms); + bound = (value, duration) => animation(this.CompositionBrush, value, duration); return this; } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 0a28a8c2e32..edd68cde255 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -128,14 +128,14 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff Name = id }; - animation = (brush, value, ms) => + animation = (brush, value, duration) => { if (value < 0 || value > 1) { throw new ArgumentOutOfRangeException(nameof(value), "The factor must be in the [0,1] range"); } - return brush.StartAnimationAsync("Fade.CrossFade", value, TimeSpan.FromMilliseconds(ms)); + return brush.StartAnimationAsync("Fade.CrossFade", value, duration); }; return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.CrossFade" }); @@ -225,7 +225,7 @@ public PipelineBuilder Blur(float blur, out EffectAnimation animation, EffectBor Name = id }; - animation = (brush, value, ms) => brush.StartAnimationAsync($"{id}.BlurAmount", value, TimeSpan.FromMilliseconds(ms)); + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.BlurAmount", value, duration); return new PipelineBuilder(this, Factory, new[] { $"{id}.BlurAmount" }); } @@ -276,14 +276,14 @@ public PipelineBuilder Saturation(float saturation, out EffectAnimation animatio Name = id }; - animation = (brush, value, ms) => + animation = (brush, value, duration) => { if (value < 0 || value > 1) { throw new ArgumentOutOfRangeException(nameof(value), "The saturation must be in the [0,1] range"); } - return brush.StartAnimationAsync($"{id}.Saturation", value, TimeSpan.FromMilliseconds(ms)); + return brush.StartAnimationAsync($"{id}.Saturation", value, duration); }; return new PipelineBuilder(this, Factory, new[] { $"{id}.Saturation" }); @@ -335,14 +335,14 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) Name = id }; - animation = (brush, value, ms) => + animation = (brush, value, duration) => { if (value < 0 || value > 1) { throw new ArgumentOutOfRangeException(nameof(value), "The opacity must be in the [0,1] range"); } - return brush.StartAnimationAsync($"{id}.Opacity", value, TimeSpan.FromMilliseconds(ms)); + return brush.StartAnimationAsync($"{id}.Opacity", value, duration); }; return new PipelineBuilder(this, Factory, new[] { $"{id}.Opacity" }); diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 99f1d4a6357..d5dcb3190ff 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using System.Diagnostics.Contracts; -using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Toolkit.Uwp.UI.Media.Brushes; using Microsoft.Toolkit.Uwp.UI.Media.Extensions; @@ -21,9 +20,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines /// /// The target instance to use to start the animation /// The animation target value - /// The animation duration, in milliseconds + /// The animation duration /// A that completes when the target animation completes - public delegate Task EffectAnimation(CompositionBrush brush, float value, int ms); + public delegate Task EffectAnimation(CompositionBrush brush, float value, TimeSpan duration); /// /// A that allows to build custom effects pipelines and create instances from them From 90fda1f07429528f780ee702274fe96a6a44cc99 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 16:27:17 +0100 Subject: [PATCH 26/92] Added effects setter APIs --- .../Brushes/XamlCompositionBrush.cs | 20 ++ .../Pipelines/PipelineBuilder.Effects.cs | 172 +++++++++++++++++- .../Pipelines/PipelineBuilder.cs | 9 +- 3 files changed, 198 insertions(+), 3 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs index e7bbdd388b0..4bfe83fe3c0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs @@ -10,6 +10,12 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes { + /// + /// A that represents a custom effect setter that can be applied to a instance + /// + /// The effect target value + public delegate void XamlEffectSetter(float value); + /// /// A that represents a custom effect animation that can be applied to a instance /// @@ -34,6 +40,20 @@ public sealed class XamlCompositionBrush : XamlCompositionEffectBrushBase /// The instance to create the effect public XamlCompositionBrush(PipelineBuilder pipeline) => this.Pipeline = pipeline; + /// + /// Binds an to the composition brush in the current instance + /// + /// The input setter + /// The resulting setter + /// The current instance + [Pure] + public XamlCompositionBrush Bind(EffectSetter setter, out XamlEffectSetter bound) + { + bound = value => setter(this.CompositionBrush, value); + + return this; + } + /// /// Binds an to the composition brush in the current instance /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index edd68cde255..0a061850e5b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -89,6 +89,58 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, return new PipelineBuilder(Factory, foreground, background); } + /// + /// Cross fades two pipelines using an instance + /// + /// The second instance to cross fade + /// The cross fade factor to blend the input effects + /// The optional blur setter for the effect + /// The placement to use with the two input pipelines + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectSetter setter, Placement placement = Placement.Foreground) + { + if (factor < 0 || factor > 1) + { + throw new ArgumentOutOfRangeException(nameof(factor), "The factor must be in the [0,1] range"); + } + + PipelineBuilder foreground, background; + if (placement == Placement.Foreground) + { + foreground = this; + background = pipeline; + } + else + { + foreground = pipeline; + background = this; + } + + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new CrossFadeEffect + { + CrossFade = factor, + Source1 = await foreground.sourceProducer(), + Source2 = await background.sourceProducer(), + Name = id + }; + + setter = (brush, value) => + { + if (value < 0 || value > 1) + { + throw new ArgumentOutOfRangeException(nameof(value), "The factor must be in the [0,1] range"); + } + + brush.Properties.InsertScalar($"{id}.CrossFade", value); + }; + + return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.CrossFade" }); + } + /// /// Cross fades two pipelines using an instance /// @@ -135,7 +187,7 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff throw new ArgumentOutOfRangeException(nameof(value), "The factor must be in the [0,1] range"); } - return brush.StartAnimationAsync("Fade.CrossFade", value, duration); + return brush.StartAnimationAsync($"{id}.CrossFade", value, duration); }; return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.CrossFade" }); @@ -202,6 +254,34 @@ public PipelineBuilder Blur(float blur, EffectBorderMode mode = EffectBorderMode return new PipelineBuilder(this, Factory); } + /// + /// Adds a new to the current pipeline + /// + /// The initial blur amount + /// The optional blur setter for the effect + /// The parameter for the effect, defaults to + /// The parameter to use, defaults to + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new GaussianBlurEffect + { + BlurAmount = blur, + BorderMode = mode, + Optimization = optimization, + Source = await this.sourceProducer(), + Name = id + }; + + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.BlurAmount", value); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.BlurAmount" }); + } + /// /// Adds a new to the current pipeline /// @@ -252,6 +332,43 @@ public PipelineBuilder Saturation(float saturation) return new PipelineBuilder(this, Factory); } + /// + /// Adds a new to the current pipeline + /// + /// The initial saturation amount for the new effect + /// The optional saturation setter for the effect + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Saturation(float saturation, out EffectSetter setter) + { + if (saturation < 0 || saturation > 1) + { + throw new ArgumentOutOfRangeException(nameof(saturation), "The saturation must be in the [0,1] range"); + } + + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new SaturationEffect + { + Saturation = saturation, + Source = await this.sourceProducer(), + Name = id + }; + + setter = (brush, value) => + { + if (value < 0 || value > 1) + { + throw new ArgumentOutOfRangeException(nameof(value), "The saturation must be in the [0,1] range"); + } + + brush.Properties.InsertScalar($"{id}.Saturation", value); + }; + + return new PipelineBuilder(this, Factory, new[] { $"{id}.Saturation" }); + } + /// /// Adds a new to the current pipeline /// @@ -311,6 +428,43 @@ public PipelineBuilder Opacity(float opacity) return new PipelineBuilder(this, Factory); } + /// + /// Adds a new to the current pipeline + /// + /// The opacity value to apply to the pipeline + /// The optional opacity setter for the effect + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Opacity(float opacity, out EffectSetter setter) + { + if (opacity < 0 || opacity > 1) + { + throw new ArgumentOutOfRangeException(nameof(opacity), "The opacity must be in the [0,1] range"); + } + + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new OpacityEffect + { + Opacity = opacity, + Source = await this.sourceProducer(), + Name = id + }; + + setter = (brush, value) => + { + if (value < 0 || value > 1) + { + throw new ArgumentOutOfRangeException(nameof(value), "The opacity must be in the [0,1] range"); + } + + brush.Properties.InsertScalar($"{id}.Opacity", value); + }; + + return new PipelineBuilder(this, Factory, new[] { $"{id}.Opacity" }); + } + /// /// Adds a new to the current pipeline /// @@ -365,7 +519,21 @@ public PipelineBuilder Tint(Color color, float mix) /// /// The tint color to use /// The initial amount of tint to apply over the current effect - /// The optional tint animation for the effect + /// The optional tint mix setter for the effect + /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Tint(Color color, float mix, out EffectSetter setter) + { + return FromColor(color).CrossFade(this, mix, out setter); + } + + /// + /// Applies a tint color on the current pipeline + /// + /// The tint color to use + /// The initial amount of tint to apply over the current effect + /// The optional tint mix animation for the effect /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index d5dcb3190ff..77509981488 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -16,7 +16,14 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines { /// - /// A that represents a custom effect animation that can be applied to a + /// A that represents a custom effect property setter that can be applied to a + /// + /// The target instance to target + /// The property value to set + public delegate void EffectSetter(CompositionBrush brush, float value); + + /// + /// A that represents a custom effect property animation that can be applied to a /// /// The target instance to use to start the animation /// The animation target value From 3a2f44c43e3422afefb813799f0649f6b22f0cb0 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 16:28:00 +0100 Subject: [PATCH 27/92] Removed unnecessary remarks --- .../Pipelines/PipelineBuilder.Effects.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 0a061850e5b..92f942d47c5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -96,7 +96,6 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, /// The cross fade factor to blend the input effects /// The optional blur setter for the effect /// The placement to use with the two input pipelines - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectSetter setter, Placement placement = Placement.Foreground) @@ -148,7 +147,6 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff /// The cross fade factor to blend the input effects /// The optional blur animation for the effect /// The placement to use with the two input pipelines - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) @@ -261,7 +259,6 @@ public PipelineBuilder Blur(float blur, EffectBorderMode mode = EffectBorderMode /// The optional blur setter for the effect /// The parameter for the effect, defaults to /// The parameter to use, defaults to - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) @@ -289,7 +286,6 @@ public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBorderMod /// The optional blur animation for the effect /// The parameter for the effect, defaults to /// The parameter to use, defaults to - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Blur(float blur, out EffectAnimation animation, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) @@ -337,7 +333,6 @@ public PipelineBuilder Saturation(float saturation) /// /// The initial saturation amount for the new effect /// The optional saturation setter for the effect - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Saturation(float saturation, out EffectSetter setter) @@ -374,7 +369,6 @@ public PipelineBuilder Saturation(float saturation, out EffectSetter setter) /// /// The initial saturation amount for the new effect /// The optional saturation animation for the effect - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Saturation(float saturation, out EffectAnimation animation) @@ -433,7 +427,6 @@ public PipelineBuilder Opacity(float opacity) /// /// The opacity value to apply to the pipeline /// The optional opacity setter for the effect - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Opacity(float opacity, out EffectSetter setter) @@ -470,7 +463,6 @@ public PipelineBuilder Opacity(float opacity, out EffectSetter setter) /// /// The opacity value to apply to the pipeline /// The optional opacity animation for the effect - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) @@ -520,7 +512,6 @@ public PipelineBuilder Tint(Color color, float mix) /// The tint color to use /// The initial amount of tint to apply over the current effect /// The optional tint mix setter for the effect - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Tint(Color color, float mix, out EffectSetter setter) @@ -534,7 +525,6 @@ public PipelineBuilder Tint(Color color, float mix, out EffectSetter setter) /// The tint color to use /// The initial amount of tint to apply over the current effect /// The optional tint mix animation for the effect - /// Note that each pipeline can only contain a single instance of any of the built-in effects with animation support /// A new instance to use to keep adding new effects [Pure] public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animation) From fd050ae4b781803f2b6204ea2c9e92bbefc3b564 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 16:46:13 +0100 Subject: [PATCH 28/92] Added generic parameter to effect setters --- .../Brushes/XamlCompositionBrush.cs | 10 +++++++--- .../Pipelines/PipelineBuilder.Effects.cs | 10 +++++----- .../Pipelines/PipelineBuilder.cs | 8 +++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs index 4bfe83fe3c0..ff6922bb2a4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs @@ -13,8 +13,10 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes /// /// A that represents a custom effect setter that can be applied to a instance /// + /// The type of property value to set /// The effect target value - public delegate void XamlEffectSetter(float value); + public delegate void XamlEffectSetter(T value) + where T : unmanaged; /// /// A that represents a custom effect animation that can be applied to a instance @@ -41,13 +43,15 @@ public sealed class XamlCompositionBrush : XamlCompositionEffectBrushBase public XamlCompositionBrush(PipelineBuilder pipeline) => this.Pipeline = pipeline; /// - /// Binds an to the composition brush in the current instance + /// Binds an to the composition brush in the current instance /// + /// The type of property value to set /// The input setter /// The resulting setter /// The current instance [Pure] - public XamlCompositionBrush Bind(EffectSetter setter, out XamlEffectSetter bound) + public XamlCompositionBrush Bind(EffectSetter setter, out XamlEffectSetter bound) + where T : unmanaged { bound = value => setter(this.CompositionBrush, value); diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 92f942d47c5..5bc90a7ecec 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -98,7 +98,7 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, /// The placement to use with the two input pipelines /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectSetter setter, Placement placement = Placement.Foreground) + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectSetter setter, Placement placement = Placement.Foreground) { if (factor < 0 || factor > 1) { @@ -261,7 +261,7 @@ public PipelineBuilder Blur(float blur, EffectBorderMode mode = EffectBorderMode /// The parameter to use, defaults to /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) + public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); @@ -335,7 +335,7 @@ public PipelineBuilder Saturation(float saturation) /// The optional saturation setter for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Saturation(float saturation, out EffectSetter setter) + public PipelineBuilder Saturation(float saturation, out EffectSetter setter) { if (saturation < 0 || saturation > 1) { @@ -429,7 +429,7 @@ public PipelineBuilder Opacity(float opacity) /// The optional opacity setter for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Opacity(float opacity, out EffectSetter setter) + public PipelineBuilder Opacity(float opacity, out EffectSetter setter) { if (opacity < 0 || opacity > 1) { @@ -514,7 +514,7 @@ public PipelineBuilder Tint(Color color, float mix) /// The optional tint mix setter for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Tint(Color color, float mix, out EffectSetter setter) + public PipelineBuilder Tint(Color color, float mix, out EffectSetter setter) { return FromColor(color).CrossFade(this, mix, out setter); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 77509981488..d982bdc0a49 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -18,9 +18,11 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines /// /// A that represents a custom effect property setter that can be applied to a /// + /// The type of property value to set /// The target instance to target /// The property value to set - public delegate void EffectSetter(CompositionBrush brush, float value); + public delegate void EffectSetter(CompositionBrush brush, T value) + where T : unmanaged; /// /// A that represents a custom effect property animation that can be applied to a @@ -60,8 +62,8 @@ private PipelineBuilder(Func> factory) string id = Guid.NewGuid().ToUppercaseAsciiLetters(); this.sourceProducer = () => Task.FromResult(new CompositionEffectSourceParameter(id)); + this.animationProperties = Array.Empty(); this.lazyParameters = new Dictionary>> { { id, factory } }; - this.animationProperties = new string[0]; } /// @@ -87,7 +89,7 @@ private PipelineBuilder( private PipelineBuilder(Func> factory) : this( factory, - new string[0], + Array.Empty(), new Dictionary>>()) { } From 85b67e67efce0cf6543f2be2785f9a0189047d50 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 16:49:39 +0100 Subject: [PATCH 29/92] Added generic parameter to effect animations --- .../Brushes/XamlCompositionBrush.cs | 10 +++++++--- .../Pipelines/PipelineBuilder.Effects.cs | 10 +++++----- .../Pipelines/PipelineBuilder.Prebuilt.cs | 20 +++++++++---------- .../Pipelines/PipelineBuilder.cs | 4 +++- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs index ff6922bb2a4..2e036a1d54b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs @@ -21,10 +21,12 @@ public delegate void XamlEffectSetter(T value) /// /// A that represents a custom effect animation that can be applied to a instance /// + /// The type of property value to animate /// The animation target value /// The animation duration /// A that completes when the target animation completes - public delegate Task XamlEffectAnimation(float value, TimeSpan duration); + public delegate Task XamlEffectAnimation(T value, TimeSpan duration) + where T : unmanaged; /// /// A simple that can be used to quickly create XAML brushes from arbitrary pipelines @@ -59,13 +61,15 @@ public XamlCompositionBrush Bind(EffectSetter setter, out XamlEffectSetter } /// - /// Binds an to the composition brush in the current instance + /// Binds an to the composition brush in the current instance /// + /// The type of property value to animate /// The input animation /// The resulting animation /// The current instance [Pure] - public XamlCompositionBrush Bind(EffectAnimation animation, out XamlEffectAnimation bound) + public XamlCompositionBrush Bind(EffectAnimation animation, out XamlEffectAnimation bound) + where T : unmanaged { bound = (value, duration) => animation(this.CompositionBrush, value, duration); diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 5bc90a7ecec..03210c6e4ea 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -149,7 +149,7 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff /// The placement to use with the two input pipelines /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) { if (factor < 0 || factor > 1) { @@ -288,7 +288,7 @@ public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBo /// The parameter to use, defaults to /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Blur(float blur, out EffectAnimation animation, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) + public PipelineBuilder Blur(float blur, out EffectAnimation animation, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); @@ -371,7 +371,7 @@ public PipelineBuilder Saturation(float saturation, out EffectSetter sett /// The optional saturation animation for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Saturation(float saturation, out EffectAnimation animation) + public PipelineBuilder Saturation(float saturation, out EffectAnimation animation) { if (saturation < 0 || saturation > 1) { @@ -465,7 +465,7 @@ public PipelineBuilder Opacity(float opacity, out EffectSetter setter) /// The optional opacity animation for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) + public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) { if (opacity < 0 || opacity > 1) { @@ -527,7 +527,7 @@ public PipelineBuilder Tint(Color color, float mix, out EffectSetter sett /// The optional tint mix animation for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animation) + public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animation) { return FromColor(color).CrossFade(this, mix, out animation); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index 3d4a7947775..5b51ed8f270 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -59,7 +59,7 @@ public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, Uri /// 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, out EffectAnimation tintAnimation, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) + public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, out EffectAnimation tintAnimation, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) { return FromHostBackdropAcrylic(tint, mix, out tintAnimation, noiseRelativePath.ToAppxUri(), cacheMode); } @@ -74,7 +74,7 @@ public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, out /// 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, out EffectAnimation tintAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) + public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, out EffectAnimation tintAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { return FromHostBackdrop() @@ -133,7 +133,7 @@ public static PipelineBuilder FromBackdropAcrylic(Color tint, float mix, float b public static PipelineBuilder FromBackdropAcrylic( Color tint, float mix, - out EffectAnimation tintAnimation, + out EffectAnimation tintAnimation, float blur, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) @@ -155,7 +155,7 @@ public static PipelineBuilder FromBackdropAcrylic( public static PipelineBuilder FromBackdropAcrylic( Color tint, float mix, - out EffectAnimation tintAnimation, + out EffectAnimation tintAnimation, float blur, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) @@ -182,7 +182,7 @@ public static PipelineBuilder FromBackdropAcrylic( Color tint, float mix, float blur, - out EffectAnimation blurAnimation, + out EffectAnimation blurAnimation, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) { @@ -204,7 +204,7 @@ public static PipelineBuilder FromBackdropAcrylic( Color tint, float mix, float blur, - out EffectAnimation blurAnimation, + out EffectAnimation blurAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { @@ -230,9 +230,9 @@ public static PipelineBuilder FromBackdropAcrylic( public static PipelineBuilder FromBackdropAcrylic( Color tint, float mix, - out EffectAnimation tintAnimation, + out EffectAnimation tintAnimation, float blur, - out EffectAnimation blurAnimation, + out EffectAnimation blurAnimation, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) { @@ -254,9 +254,9 @@ public static PipelineBuilder FromBackdropAcrylic( public static PipelineBuilder FromBackdropAcrylic( Color tint, float mix, - out EffectAnimation tintAnimation, + out EffectAnimation tintAnimation, float blur, - out EffectAnimation blurAnimation, + out EffectAnimation blurAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index d982bdc0a49..92e7f5e9ec3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -27,11 +27,13 @@ public delegate void EffectSetter(CompositionBrush brush, T value) /// /// A that represents a custom effect property animation that can be applied to a /// + /// The type of property value to animate /// The target instance to use to start the animation /// The animation target value /// The animation duration /// A that completes when the target animation completes - public delegate Task EffectAnimation(CompositionBrush brush, float value, TimeSpan duration); + public delegate Task EffectAnimation(CompositionBrush brush, T value, TimeSpan duration) + where T : unmanaged; /// /// A that allows to build custom effects pipelines and create instances from them From dc7718f99166671418e10eabd6cb81c48695db7d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 17:05:13 +0100 Subject: [PATCH 30/92] Added overloads to set/animate a color effect --- .../CompositionObjectExtensions.cs | 25 +++++++++-- .../PipelineBuilder.Initialization.cs | 44 +++++++++++++++++++ .../Pipelines/PipelineBuilder.cs | 39 +++++++++++----- 3 files changed, 92 insertions(+), 16 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs index fd584c27b9c..1802d5ebf43 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs @@ -4,6 +4,7 @@ using System; using System.Threading.Tasks; +using Windows.UI; using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Hosting; @@ -34,19 +35,35 @@ public static void BindSize(this CompositionObject source, UIElement target) /// /// Starts an animation on the given property of a /// + /// The type of the property to animate (can be or ) /// The target /// The name of the property to animate /// The final value of the property /// The animation duration /// A that completes when the created animation completes - public static Task StartAnimationAsync(this CompositionObject target, string property, float value, TimeSpan duration) + public static Task StartAnimationAsync(this CompositionObject target, string property, T value, TimeSpan duration) + where T : unmanaged { // Stop previous animations target.StopAnimation(property); - // Setup the animation - var animation = target.Compositor.CreateScalarKeyFrameAnimation(); - animation.InsertKeyFrame(1f, value); + // Setup the animation to run + KeyFrameAnimation animation; + switch (value) + { + case float f: + var scalarAnimation = target.Compositor.CreateScalarKeyFrameAnimation(); + scalarAnimation.InsertKeyFrame(1f, f); + animation = scalarAnimation; + break; + case Color c: + var colorAnimation = target.Compositor.CreateColorKeyFrameAnimation(); + colorAnimation.InsertKeyFrame(1f, c); + animation = colorAnimation; + break; + default: throw new ArgumentException($"Invalid animation type: {typeof(T)}", nameof(value)); + } + animation.Duration = duration; // Get the batch and start the animations diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 5492ada4d6c..b0867185b91 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -78,6 +78,50 @@ public static PipelineBuilder FromColor(Color color) return new PipelineBuilder(() => Task.FromResult(new ColorSourceEffect { Color = color })); } + /// + /// Starts a new pipeline from a solid with the specified color + /// + /// The desired color for the initial + /// The optional color setter for the effect + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromColor(Color color, out EffectSetter setter) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + Task Factory() => Task.FromResult(new ColorSourceEffect + { + Color = color, + Name = id + }); + + setter = (brush, value) => brush.Properties.InsertColor($"{id}.Color", value); + + return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + } + + /// + /// Starts a new pipeline from a solid with the specified color + /// + /// The desired color for the initial + /// The optional color animation for the effect + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromColor(Color color, out EffectAnimation animation) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + Task Factory() => Task.FromResult(new ColorSourceEffect + { + Color = color, + Name = id + }); + + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.Color", value, duration); + + return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + } + /// /// Starts a new pipeline from the input instance /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 92e7f5e9ec3..11dc44f7c50 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -68,32 +68,47 @@ private PipelineBuilder(Func> factory) this.lazyParameters = new Dictionary>> { { id, factory } }; } + /// + /// Initializes a new instance of the class. + /// + /// A instance that will return the initial + private PipelineBuilder(Func> factory) + : this( + factory, + Array.Empty(), + new Dictionary>>()) + { + } + /// /// Initializes a new instance of the class. /// /// A instance that will produce the new to add to the pipeline /// The collection of animation properties for the new effect - /// The collection of instances that needs to be initialized for the new effect private PipelineBuilder( Func> factory, - IReadOnlyCollection animations, - IReadOnlyDictionary>> lazy) + IReadOnlyCollection animations) + : this( + factory, + animations, + new Dictionary>>()) { - this.sourceProducer = factory; - this.animationProperties = animations; - this.lazyParameters = lazy; } /// /// Initializes a new instance of the class. /// - /// A instance that will return the initial - private PipelineBuilder(Func> factory) - : this( - factory, - Array.Empty(), - new Dictionary>>()) + /// A instance that will produce the new to add to the pipeline + /// The collection of animation properties for the new effect + /// The collection of instances that needs to be initialized for the new effect + private PipelineBuilder( + Func> factory, + IReadOnlyCollection animations, + IReadOnlyDictionary>> lazy) { + this.sourceProducer = factory; + this.animationProperties = animations; + this.lazyParameters = lazy; } /// From d331c1b20c206b539a97c30dfa76ab0a9cc9229a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 17:26:04 +0100 Subject: [PATCH 31/92] Fixed some XML docs --- .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 2 +- .../Windows.UI.Composition/CompositionObjectExtensions.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index 59233a9781e..fa8aa5cf787 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs @@ -20,7 +20,7 @@ public abstract class XamlCompositionEffectBrushBase : XamlCompositionBrushBase /// /// A method that builds and returns the pipeline to use in the current instance. - /// This method can also be used to store any needed instances in local fields, for later use (they will need to be called upon ). + /// This method can also be used to store any needed or instances in local fields, for later use (they will need to be called upon ). /// /// A instance to create the brush to display protected abstract PipelineBuilder OnBrushRequested(); diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs index 1802d5ebf43..51980b5b7c0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs @@ -35,7 +35,7 @@ public static void BindSize(this CompositionObject source, UIElement target) /// /// Starts an animation on the given property of a /// - /// The type of the property to animate (can be or ) + /// The type of the property to animate (can be or ) /// The target /// The name of the property to animate /// The final value of the property From 9955738e0925aa336a43084e6afe7c8df007d4f2 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 17:29:16 +0100 Subject: [PATCH 32/92] Added check for composition capabilities in brushes --- .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index fa8aa5cf787..a5e763a2ef7 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.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 Windows.UI.Composition; using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; @@ -43,6 +44,12 @@ protected override async void OnConnected() { if (this.CompositionBrush == null) { + // Abort if effects aren't supported + if (!CompositionCapabilities.GetForCurrentView().AreEffectsSupported()) + { + return; + } + if (this._isEnabled) { this.CompositionBrush = await this.OnBrushRequested().BuildAsync(); From 371ea4daceb18915d99b1ddac40e2c379736725d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 17:43:21 +0100 Subject: [PATCH 33/92] BackdropSaturationBrush switched to pipeline --- .../Brushes/BackdropSaturationBrush.cs | 63 ++++--------------- 1 file changed, 12 insertions(+), 51 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs index f6f1355599c..cf66b5ad687 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs @@ -2,17 +2,17 @@ // 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.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; -using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media { /// /// Brush which applies a SaturationEffect to the Backdrop. http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_SaturationEffect.htm /// - public class BackdropSaturationBrush : XamlCompositionBrushBase + public class BackdropSaturationBrush : XamlCompositionEffectBrushBase { /// /// Identifies the dependency property. @@ -47,61 +47,22 @@ private static void OnSaturationChanged(DependencyObject d, DependencyPropertyCh brush.Saturation = 0.0; } - // Unbox and set a new blur amount if the CompositionBrush exists. - brush.CompositionBrush?.Properties.InsertScalar("Saturation.Saturation", (float)brush.Saturation); - } - - /// - /// Initializes a new instance of the class. - /// - public BackdropSaturationBrush() - { - } - - /// - /// Initializes the Composition Brush. - /// - protected override void OnConnected() - { - // Delay creating composition resources until they're required. - if (CompositionBrush == null) + // Unbox and set a new blur amount if the CompositionBrush exists + if (brush.CompositionBrush is CompositionBrush target) { - // Abort if effects aren't supported. - if (!CompositionCapabilities.GetForCurrentView().AreEffectsSupported()) - { - return; - } - - var backdrop = Window.Current.Compositor.CreateBackdropBrush(); - - // Use a Win2D blur affect applied to a CompositionBackdropBrush. - var graphicsEffect = new SaturationEffect - { - Name = "Saturation", - Saturation = (float)Saturation, - Source = new CompositionEffectSourceParameter("backdrop") - }; - - var effectFactory = Window.Current.Compositor.CreateEffectFactory(graphicsEffect, new[] { "Saturation.Saturation" }); - var effectBrush = effectFactory.CreateBrush(); - - effectBrush.SetSourceParameter("backdrop", backdrop); - - CompositionBrush = effectBrush; + brush.setter?.Invoke(target, (float)brush.Saturation); } } /// - /// Deconstructs the Composition Brush. + /// The instance currently in use /// - protected override void OnDisconnected() + private EffectSetter setter; + + /// + protected override PipelineBuilder OnBrushRequested() { - // Dispose of composition resources when no longer in use. - if (CompositionBrush != null) - { - CompositionBrush.Dispose(); - CompositionBrush = null; - } + return PipelineBuilder.FromBackdrop().Saturation((float)Saturation, out setter); } } } From f24c48462979f3b9cd97c9edca123cbb812a4050 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 17:43:53 +0100 Subject: [PATCH 34/92] Removed unnecessary using directives --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/AlphaMode.cs | 6 ------ .../Windows.UI.Composition/CompositionObjectExtensions.cs | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AlphaMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AlphaMode.cs index 8d248160f3b..2b28ead6fe5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AlphaMode.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AlphaMode.cs @@ -2,12 +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 System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - namespace Microsoft.Toolkit.Uwp.UI.Media { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs index 51980b5b7c0..5a6389fc547 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs @@ -35,7 +35,7 @@ public static void BindSize(this CompositionObject source, UIElement target) /// /// Starts an animation on the given property of a /// - /// The type of the property to animate (can be or ) + /// The type of the property to animate /// The target /// The name of the property to animate /// The final value of the property From 3f534e6caaadaada569131829f91f6ac09c51ece Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 17:45:56 +0100 Subject: [PATCH 35/92] Added pipeline invert effect --- .../Brushes/PipelineBrush.cs | 2 ++ .../Effects/InvertEffect.cs | 15 +++++++++++++++ .../Effects/LuminanceToAlphaEffect.cs | 2 +- .../Pipelines/PipelineBuilder.Effects.cs | 15 +++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 6b50b0a3fca..d6f5cbedad3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -84,6 +84,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu return builder.Opacity((float)opacity.Value); case LuminanceToAlphaEffect _: return builder.LuminanceToAlpha(); + case InvertEffect _: + return builder.Invert(); case TintEffect tint: return builder.Tint(tint.Color, (float)tint.Opacity); case BlurEffect blur: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs new file mode 100644 index 00000000000..9eff91641f7 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Interfaces; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A luminance effect which directly replicates + /// + public sealed class InvertEffect : IPipelineEffect + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs index d0476ee2aaa..8948ea46051 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs @@ -7,7 +7,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// A luminance effect which directly replicates + /// A luminance effect which directly replicates /// public sealed class LuminanceToAlphaEffect : IPipelineEffect { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 03210c6e4ea..d36c7667802 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -547,6 +547,21 @@ public PipelineBuilder LuminanceToAlpha() return new PipelineBuilder(this, Factory); } + /// + /// Applies an invert effect on the current pipeline + /// + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Invert() + { + async Task Factory() => new InvertEffect + { + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + /// /// Applies a custom effect to the current pipeline /// From cac2fd15be765231ca5af162be782edfa0f93cd4 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 17:47:36 +0100 Subject: [PATCH 36/92] BackdropInvertBrush switched to pipeline --- .../Brushes/BackdropInvertBrush.cs | 59 ++----------------- 1 file changed, 6 insertions(+), 53 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs index 09377b6b086..09e0a1c1a3e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs @@ -4,9 +4,8 @@ //// Example brush from https://blogs.windows.com/buildingapps/2017/07/18/working-brushes-content-xaml-visual-layer-interop-part-one/#z70vPv1QMAvZsceo.97 -using Microsoft.Graphics.Canvas.Effects; -using Windows.UI.Composition; -using Windows.UI.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media @@ -14,58 +13,12 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// /// The is a which inverts whatever is behind it in the application. /// - public class BackdropInvertBrush : XamlCompositionBrushBase + public class BackdropInvertBrush : XamlCompositionEffectBrushBase { - /// - /// Initializes a new instance of the class. - /// - public BackdropInvertBrush() + /// + protected override PipelineBuilder OnBrushRequested() { - } - - /// - /// Initializes the Composition Brush. - /// - protected override void OnConnected() - { - // Delay creating composition resources until they're required. - if (CompositionBrush == null) - { - // Abort if effects aren't supported. - if (!CompositionCapabilities.GetForCurrentView().AreEffectsSupported()) - { - return; - } - - var backdrop = Window.Current.Compositor.CreateBackdropBrush(); - - // Use a Win2D invert affect applied to a CompositionBackdropBrush. - var graphicsEffect = new InvertEffect - { - Name = "Invert", - Source = new CompositionEffectSourceParameter("backdrop") - }; - - var effectFactory = Window.Current.Compositor.CreateEffectFactory(graphicsEffect); - var effectBrush = effectFactory.CreateBrush(); - - effectBrush.SetSourceParameter("backdrop", backdrop); - - CompositionBrush = effectBrush; - } - } - - /// - /// Deconstructs the Composition Brush. - /// - protected override void OnDisconnected() - { - // Dispose of composition resources when no longer in use. - if (CompositionBrush != null) - { - CompositionBrush.Dispose(); - CompositionBrush = null; - } + return PipelineBuilder.FromBackdrop().Invert(); } } } From ac6eede159befaa3b38e1d1b84e91566eb83b86b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 18:40:56 +0100 Subject: [PATCH 37/92] Reordered using directives --- .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index a5e763a2ef7..f1a059675b7 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs @@ -2,9 +2,9 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Windows.UI.Composition; using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; +using Windows.UI.Composition; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base From 1856e72164ed2298c57981176b2499d53a64b67d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 18:46:20 +0100 Subject: [PATCH 38/92] BackdropBlurBrush switched to pipeline --- .../Brushes/BackdropBlurBrush.cs | 61 ++++--------------- 1 file changed, 11 insertions(+), 50 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs index 0458960dd8d..9b276aae64a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs @@ -4,7 +4,8 @@ //// Example brush from https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.xamlcompositionbrushbase -using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Media; @@ -14,7 +15,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// /// The is a that blurs whatever is behind it in the application. /// - public class BackdropBlurBrush : XamlCompositionBrushBase + public class BackdropBlurBrush : XamlCompositionEffectBrushBase { /// /// Identifies the dependency property. @@ -38,61 +39,21 @@ private static void OnAmountChanged(DependencyObject d, DependencyPropertyChange { var brush = (BackdropBlurBrush)d; - // Unbox and set a new blur amount if the CompositionBrush exists. - brush.CompositionBrush?.Properties.InsertScalar("Blur.BlurAmount", (float)(double)e.NewValue); - } - - /// - /// Initializes a new instance of the class. - /// - public BackdropBlurBrush() - { - } - - /// - /// Initializes the Composition Brush. - /// - protected override void OnConnected() - { - // Delay creating composition resources until they're required. - if (CompositionBrush == null) + if (brush.CompositionBrush is CompositionBrush target) { - // Abort if effects aren't supported. - if (!CompositionCapabilities.GetForCurrentView().AreEffectsSupported()) - { - return; - } - - var backdrop = Window.Current.Compositor.CreateBackdropBrush(); - - // Use a Win2D blur affect applied to a CompositionBackdropBrush. - var graphicsEffect = new GaussianBlurEffect - { - Name = "Blur", - BlurAmount = (float)Amount, - Source = new CompositionEffectSourceParameter("backdrop") - }; - - var effectFactory = Window.Current.Compositor.CreateEffectFactory(graphicsEffect, new[] { "Blur.BlurAmount" }); - var effectBrush = effectFactory.CreateBrush(); - - effectBrush.SetSourceParameter("backdrop", backdrop); - - CompositionBrush = effectBrush; + brush.setter?.Invoke(target, (float)brush.Amount); } } /// - /// Deconstructs the Composition Brush. + /// The instance currently in use /// - protected override void OnDisconnected() + private EffectSetter setter; + + /// + protected override PipelineBuilder OnBrushRequested() { - // Dispose of composition resources when no longer in use. - if (CompositionBrush != null) - { - CompositionBrush.Dispose(); - CompositionBrush = null; - } + return PipelineBuilder.FromBackdrop().Blur((float)Amount, out setter); } } } From e63534c270e029e08ab8d68984eb175ff7d1c774 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 18:52:46 +0100 Subject: [PATCH 39/92] Added sepia effect APIs --- .../Brushes/PipelineBrush.cs | 2 + .../Effects/SepiaEffect.cs | 15 +++++ .../Pipelines/PipelineBuilder.Effects.cs | 63 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index d6f5cbedad3..5c4f8c206ae 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -86,6 +86,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu return builder.LuminanceToAlpha(); case InvertEffect _: return builder.Invert(); + case SepiaEffect sepia: + return builder.Sepia((float)sepia.Value); case TintEffect tint: return builder.Tint(tint.Color, (float)tint.Opacity); case BlurEffect blur: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs new file mode 100644 index 00000000000..95931cb848d --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A sepia effect + /// + public sealed class SepiaEffect : ValueEffectBase + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index d36c7667802..dcab7291938 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -400,6 +400,69 @@ public PipelineBuilder Saturation(float saturation, out EffectAnimation a return new PipelineBuilder(this, Factory, new[] { $"{id}.Saturation" }); } + /// + /// Adds a new to the current pipeline + /// + /// The sepia effect intensity for the new effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Sepia(float intensity) + { + async Task Factory() => new SepiaEffect + { + Intensity = intensity, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Adds a new to the current pipeline + /// + /// The sepia effect intensity for the new effect + /// The optional sepia intensity setter for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Sepia(float intensity, out EffectSetter setter) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new SepiaEffect + { + Intensity = intensity, + Source = await this.sourceProducer(), + Name = id + }; + + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.Intensity", value); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.Intensity" }); + } + + /// + /// Adds a new to the current pipeline + /// + /// The sepia effect intensity for the new effect + /// The sepia intensity animation for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Sepia(float intensity, out EffectAnimation animation) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new SepiaEffect + { + Intensity = intensity, + Source = await this.sourceProducer(), + Name = id + }; + + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.Intensity", value, duration); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.Intensity" }); + } + /// /// Adds a new to the current pipeline /// From f10c10a5156a6fadaefc56db3fd0b54bcabb842f Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 18:55:32 +0100 Subject: [PATCH 40/92] BackdropSepiaBrush switched to pipeline --- .../Brushes/BackdropSepiaBrush.cs | 61 ++++--------------- 1 file changed, 11 insertions(+), 50 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs index 9606cfd73fa..61fd9bfbd54 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs @@ -2,17 +2,17 @@ // 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.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; -using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media { /// /// Brush which applies a SepiaEffect to the Backdrop. http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_SepiaEffect.htm /// - public class BackdropSepiaBrush : XamlCompositionBrushBase + public class BackdropSepiaBrush : XamlCompositionEffectBrushBase { /// /// Identifies the dependency property. @@ -48,60 +48,21 @@ private static void OnIntensityChanged(DependencyObject d, DependencyPropertyCha } // Unbox and set a new blur amount if the CompositionBrush exists. - brush.CompositionBrush?.Properties.InsertScalar("Sepia.Intensity", (float)brush.Intensity); - } - - /// - /// Initializes a new instance of the class. - /// - public BackdropSepiaBrush() - { - } - - /// - /// Initializes the Composition Brush. - /// - protected override void OnConnected() - { - // Delay creating composition resources until they're required. - if (CompositionBrush == null) + if (brush.CompositionBrush is CompositionBrush target) { - // Abort if effects aren't supported. - if (!CompositionCapabilities.GetForCurrentView().AreEffectsSupported()) - { - return; - } - - var backdrop = Window.Current.Compositor.CreateBackdropBrush(); - - // Use a Win2D blur affect applied to a CompositionBackdropBrush. - var graphicsEffect = new SepiaEffect - { - Name = "Sepia", - Intensity = (float)Intensity, - Source = new CompositionEffectSourceParameter("backdrop") - }; - - var effectFactory = Window.Current.Compositor.CreateEffectFactory(graphicsEffect, new[] { "Sepia.Intensity" }); - var effectBrush = effectFactory.CreateBrush(); - - effectBrush.SetSourceParameter("backdrop", backdrop); - - CompositionBrush = effectBrush; + brush.setter?.Invoke(target, (float)brush.Intensity); } } /// - /// Deconstructs the Composition Brush. + /// The instance currently in use /// - protected override void OnDisconnected() + private EffectSetter setter; + + /// + protected override PipelineBuilder OnBrushRequested() { - // Dispose of composition resources when no longer in use. - if (CompositionBrush != null) - { - CompositionBrush.Dispose(); - CompositionBrush = null; - } + return PipelineBuilder.FromBackdrop().Sepia((float)Intensity, out setter); } } } From e9fac05846984fe2a7a980671d9b6ac6d6efeda9 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 19:27:47 +0100 Subject: [PATCH 41/92] Added HDR color pipeline initialization APIs --- .../CompositionObjectExtensions.cs | 6 ++ .../PipelineBuilder.Initialization.cs | 56 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs index 5a6389fc547..e87227b4e6c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Extensions/Windows.UI.Composition/CompositionObjectExtensions.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Numerics; using System.Threading.Tasks; using Windows.UI; using Windows.UI.Composition; @@ -61,6 +62,11 @@ public static Task StartAnimationAsync(this CompositionObject target, string colorAnimation.InsertKeyFrame(1f, c); animation = colorAnimation; break; + case Vector4 v4: + var vector4Animation = target.Compositor.CreateVector4KeyFrameAnimation(); + vector4Animation.InsertKeyFrame(1f, v4); + animation = vector4Animation; + break; default: throw new ArgumentException($"Invalid animation type: {typeof(T)}", nameof(value)); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index b0867185b91..8837269c2d6 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -4,6 +4,7 @@ using System; using System.Diagnostics.Contracts; +using System.Numerics; using System.Threading.Tasks; using Microsoft.Graphics.Canvas; using Microsoft.Graphics.Canvas.Effects; @@ -122,6 +123,61 @@ Task Factory() => Task.FromResult( return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); } + /// + /// Starts a new pipeline from a solid with the specified color + /// + /// The desired color for the initial + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromHdrColor(Vector4 color) + { + return new PipelineBuilder(() => Task.FromResult(new ColorSourceEffect { ColorHdr = color })); + } + + /// + /// Starts a new pipeline from a solid with the specified color + /// + /// The desired color for the initial + /// The optional color setter for the effect + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromHdrColor(Vector4 color, out EffectSetter setter) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + Task Factory() => Task.FromResult(new ColorSourceEffect + { + ColorHdr = color, + Name = id + }); + + setter = (brush, value) => brush.Properties.InsertVector4($"{id}.Color", value); + + return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + } + + /// + /// Starts a new pipeline from a solid with the specified color + /// + /// The desired color for the initial + /// The optional color animation for the effect + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromHdrColor(Vector4 color, out EffectAnimation animation) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + Task Factory() => Task.FromResult(new ColorSourceEffect + { + ColorHdr = color, + Name = id + }); + + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.Color", value, duration); + + return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + } + /// /// Starts a new pipeline from the input instance /// From 184cd2b56b075cc016387f277080181b3d48518e Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 22:06:08 +0100 Subject: [PATCH 42/92] Minor code refactoring --- .../Pipelines/PipelineBuilder.Effects.cs | 133 +++--------------- 1 file changed, 20 insertions(+), 113 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index dcab7291938..7a98888d722 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -62,11 +62,6 @@ public PipelineBuilder Blend(PipelineBuilder pipeline, BlendEffectMode mode, Pla [Pure] public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, Placement placement = Placement.Foreground) { - if (factor < 0 || factor > 1) - { - throw new ArgumentOutOfRangeException(nameof(factor), "The factor must be in the [0,1] range"); - } - PipelineBuilder foreground, background; if (placement == Placement.Foreground) { @@ -100,11 +95,6 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, [Pure] public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectSetter setter, Placement placement = Placement.Foreground) { - if (factor < 0 || factor > 1) - { - throw new ArgumentOutOfRangeException(nameof(factor), "The factor must be in the [0,1] range"); - } - PipelineBuilder foreground, background; if (placement == Placement.Foreground) { @@ -127,17 +117,9 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff Name = id }; - setter = (brush, value) => - { - if (value < 0 || value > 1) - { - throw new ArgumentOutOfRangeException(nameof(value), "The factor must be in the [0,1] range"); - } - - brush.Properties.InsertScalar($"{id}.CrossFade", value); - }; + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(CrossFadeEffect.CrossFade)}", value); - return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.CrossFade" }); + return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.{nameof(CrossFadeEffect.CrossFade)}" }); } /// @@ -151,11 +133,6 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff [Pure] public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) { - if (factor < 0 || factor > 1) - { - throw new ArgumentOutOfRangeException(nameof(factor), "The factor must be in the [0,1] range"); - } - PipelineBuilder foreground, background; if (placement == Placement.Foreground) { @@ -178,17 +155,9 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff Name = id }; - animation = (brush, value, duration) => - { - if (value < 0 || value > 1) - { - throw new ArgumentOutOfRangeException(nameof(value), "The factor must be in the [0,1] range"); - } - - return brush.StartAnimationAsync($"{id}.CrossFade", value, duration); - }; + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(CrossFadeEffect.CrossFade)}", value, duration); - return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.CrossFade" }); + return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.{nameof(CrossFadeEffect.CrossFade)}" }); } /// @@ -274,9 +243,9 @@ public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBo Name = id }; - setter = (brush, value) => brush.Properties.InsertScalar($"{id}.BlurAmount", value); + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(GaussianBlurEffect.BlurAmount)}", value); - return new PipelineBuilder(this, Factory, new[] { $"{id}.BlurAmount" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(GaussianBlurEffect.BlurAmount)}" }); } /// @@ -301,9 +270,9 @@ public PipelineBuilder Blur(float blur, out EffectAnimation animation, Ef Name = id }; - animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.BlurAmount", value, duration); + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(GaussianBlurEffect.BlurAmount)}", value, duration); - return new PipelineBuilder(this, Factory, new[] { $"{id}.BlurAmount" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(GaussianBlurEffect.BlurAmount)}" }); } /// @@ -314,11 +283,6 @@ public PipelineBuilder Blur(float blur, out EffectAnimation animation, Ef [Pure] public PipelineBuilder Saturation(float saturation) { - if (saturation < 0 || saturation > 1) - { - throw new ArgumentOutOfRangeException(nameof(saturation), "The saturation must be in the [0,1] range"); - } - async Task Factory() => new SaturationEffect { Saturation = saturation, @@ -337,11 +301,6 @@ public PipelineBuilder Saturation(float saturation) [Pure] public PipelineBuilder Saturation(float saturation, out EffectSetter setter) { - if (saturation < 0 || saturation > 1) - { - throw new ArgumentOutOfRangeException(nameof(saturation), "The saturation must be in the [0,1] range"); - } - string id = Guid.NewGuid().ToUppercaseAsciiLetters(); async Task Factory() => new SaturationEffect @@ -351,17 +310,9 @@ public PipelineBuilder Saturation(float saturation, out EffectSetter sett Name = id }; - setter = (brush, value) => - { - if (value < 0 || value > 1) - { - throw new ArgumentOutOfRangeException(nameof(value), "The saturation must be in the [0,1] range"); - } + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(SaturationEffect.Saturation)}", value); - brush.Properties.InsertScalar($"{id}.Saturation", value); - }; - - return new PipelineBuilder(this, Factory, new[] { $"{id}.Saturation" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(SaturationEffect.Saturation)}" }); } /// @@ -373,11 +324,6 @@ public PipelineBuilder Saturation(float saturation, out EffectSetter sett [Pure] public PipelineBuilder Saturation(float saturation, out EffectAnimation animation) { - if (saturation < 0 || saturation > 1) - { - throw new ArgumentOutOfRangeException(nameof(saturation), "The saturation must be in the [0,1] range"); - } - string id = Guid.NewGuid().ToUppercaseAsciiLetters(); async Task Factory() => new SaturationEffect @@ -387,17 +333,9 @@ public PipelineBuilder Saturation(float saturation, out EffectAnimation a Name = id }; - animation = (brush, value, duration) => - { - if (value < 0 || value > 1) - { - throw new ArgumentOutOfRangeException(nameof(value), "The saturation must be in the [0,1] range"); - } + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(SaturationEffect.Saturation)}", value, duration); - return brush.StartAnimationAsync($"{id}.Saturation", value, duration); - }; - - return new PipelineBuilder(this, Factory, new[] { $"{id}.Saturation" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(SaturationEffect.Saturation)}" }); } /// @@ -435,9 +373,9 @@ public PipelineBuilder Sepia(float intensity, out EffectSetter setter) Name = id }; - setter = (brush, value) => brush.Properties.InsertScalar($"{id}.Intensity", value); + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(SepiaEffect.Intensity)}", value); - return new PipelineBuilder(this, Factory, new[] { $"{id}.Intensity" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(SepiaEffect.Intensity)}" }); } /// @@ -458,9 +396,9 @@ public PipelineBuilder Sepia(float intensity, out EffectAnimation animati Name = id }; - animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.Intensity", value, duration); + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(SepiaEffect.Intensity)}", value, duration); - return new PipelineBuilder(this, Factory, new[] { $"{id}.Intensity" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(SepiaEffect.Intensity)}" }); } /// @@ -471,11 +409,6 @@ public PipelineBuilder Sepia(float intensity, out EffectAnimation animati [Pure] public PipelineBuilder Opacity(float opacity) { - if (opacity < 0 || opacity > 1) - { - throw new ArgumentOutOfRangeException(nameof(opacity), "The opacity must be in the [0,1] range"); - } - async Task Factory() => new OpacityEffect { Opacity = opacity, @@ -494,11 +427,6 @@ public PipelineBuilder Opacity(float opacity) [Pure] public PipelineBuilder Opacity(float opacity, out EffectSetter setter) { - if (opacity < 0 || opacity > 1) - { - throw new ArgumentOutOfRangeException(nameof(opacity), "The opacity must be in the [0,1] range"); - } - string id = Guid.NewGuid().ToUppercaseAsciiLetters(); async Task Factory() => new OpacityEffect @@ -508,17 +436,9 @@ public PipelineBuilder Opacity(float opacity, out EffectSetter setter) Name = id }; - setter = (brush, value) => - { - if (value < 0 || value > 1) - { - throw new ArgumentOutOfRangeException(nameof(value), "The opacity must be in the [0,1] range"); - } - - brush.Properties.InsertScalar($"{id}.Opacity", value); - }; + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(OpacityEffect.Opacity)}", value); - return new PipelineBuilder(this, Factory, new[] { $"{id}.Opacity" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(OpacityEffect.Opacity)}" }); } /// @@ -530,11 +450,6 @@ public PipelineBuilder Opacity(float opacity, out EffectSetter setter) [Pure] public PipelineBuilder Opacity(float opacity, out EffectAnimation animation) { - if (opacity < 0 || opacity > 1) - { - throw new ArgumentOutOfRangeException(nameof(opacity), "The opacity must be in the [0,1] range"); - } - string id = Guid.NewGuid().ToUppercaseAsciiLetters(); async Task Factory() => new OpacityEffect @@ -544,17 +459,9 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animati Name = id }; - animation = (brush, value, duration) => - { - if (value < 0 || value > 1) - { - throw new ArgumentOutOfRangeException(nameof(value), "The opacity must be in the [0,1] range"); - } - - return brush.StartAnimationAsync($"{id}.Opacity", value, duration); - }; + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(OpacityEffect.Opacity)}", value, duration); - return new PipelineBuilder(this, Factory, new[] { $"{id}.Opacity" }); + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(OpacityEffect.Opacity)}" }); } /// From a44b3ade9f34577b3d7e95b4376c7456278eff88 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 22:20:50 +0100 Subject: [PATCH 43/92] More code refactoring --- .../Brushes/AcrylicBrush.cs | 22 ++++----- .../Brushes/BackdropBlurBrush.cs | 46 ++++++++++--------- .../Brushes/BackdropSaturationBrush.cs | 41 +++++++++-------- .../Brushes/BackdropSepiaBrush.cs | 41 +++++++++-------- .../{Brushes => Enums}/AlphaMode.cs | 0 .../{Brushes => Enums}/ImageBlendMode.cs | 7 +-- 6 files changed, 86 insertions(+), 71 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/{Brushes => Enums}/AlphaMode.cs (100%) rename Microsoft.Toolkit.Uwp.UI.Media/{Brushes => Enums}/ImageBlendMode.cs (83%) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index 4376fd71ed1..8d0f196b13a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -15,6 +15,17 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes /// public sealed class AcrylicBrush : XamlCompositionEffectBrushBase { + /// + protected override PipelineBuilder OnBrushRequested() + { + switch (this.Source) + { + case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic(this.Tint, (float)this.TintMix, (float)this.BlurAmount, this.TextureUri); + case AcrylicBackgroundSource.HostBackdrop: return PipelineBuilder.FromHostBackdropAcrylic(this.Tint, (float)this.TintMix, this.TextureUri); + default: throw new ArgumentOutOfRangeException(nameof(this.Source), $"Invalid acrylic source: {this.Source}"); + } + } + /// /// Gets or sets the source mode for the effect /// @@ -40,16 +51,5 @@ public sealed class AcrylicBrush : XamlCompositionEffectBrushBase /// Gets or sets the to the texture to use /// public Uri TextureUri { get; set; } - - /// - protected override PipelineBuilder OnBrushRequested() - { - switch (this.Source) - { - case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic(this.Tint, (float)this.TintMix, (float)this.BlurAmount, this.TextureUri); - case AcrylicBackgroundSource.HostBackdrop: return PipelineBuilder.FromHostBackdropAcrylic(this.Tint, (float)this.TintMix, this.TextureUri); - default: throw new ArgumentOutOfRangeException(nameof(this.Source), $"Invalid acrylic source: {this.Source}"); - } - } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs index 9b276aae64a..574076d1459 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs @@ -17,6 +17,26 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// public class BackdropBlurBrush : XamlCompositionEffectBrushBase { + /// + /// The instance currently in use + /// + private EffectSetter setter; + + /// + protected override PipelineBuilder OnBrushRequested() + { + return PipelineBuilder.FromBackdrop().Blur((float)Amount, out setter); + } + + /// + /// Gets or sets the amount of gaussian blur to apply to the background. + /// + public double Amount + { + get => (double)GetValue(AmountProperty); + set => SetValue(AmountProperty, value); + } + /// /// Identifies the dependency property. /// @@ -27,33 +47,17 @@ public class BackdropBlurBrush : XamlCompositionEffectBrushBase new PropertyMetadata(0.0, new PropertyChangedCallback(OnAmountChanged))); /// - /// Gets or sets the amount of gaussian blur to apply to the background. + /// Updates the UI when changes /// - public double Amount - { - get { return (double)GetValue(AmountProperty); } - set { SetValue(AmountProperty, value); } - } - + /// The current instance + /// The instance for private static void OnAmountChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { - var brush = (BackdropBlurBrush)d; - - if (brush.CompositionBrush is CompositionBrush target) + if (d is BackdropBlurBrush brush && + brush.CompositionBrush is CompositionBrush target) { brush.setter?.Invoke(target, (float)brush.Amount); } } - - /// - /// The instance currently in use - /// - private EffectSetter setter; - - /// - protected override PipelineBuilder OnBrushRequested() - { - return PipelineBuilder.FromBackdrop().Blur((float)Amount, out setter); - } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs index cf66b5ad687..03856ac00b9 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs @@ -14,6 +14,26 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// public class BackdropSaturationBrush : XamlCompositionEffectBrushBase { + /// + /// The instance currently in use + /// + private EffectSetter setter; + + /// + protected override PipelineBuilder OnBrushRequested() + { + return PipelineBuilder.FromBackdrop().Saturation((float)Saturation, out setter); + } + + /// + /// Gets or sets the amount of gaussian blur to apply to the background. + /// + public double Saturation + { + get => (double)GetValue(SaturationProperty); + set => SetValue(SaturationProperty, value); + } + /// /// Identifies the dependency property. /// @@ -24,14 +44,10 @@ public class BackdropSaturationBrush : XamlCompositionEffectBrushBase new PropertyMetadata(0.5, new PropertyChangedCallback(OnSaturationChanged))); /// - /// Gets or sets the amount of gaussian blur to apply to the background. + /// Updates the UI when changes /// - public double Saturation - { - get { return (double)GetValue(SaturationProperty); } - set { SetValue(SaturationProperty, value); } - } - + /// The current instance + /// The instance for private static void OnSaturationChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var brush = (BackdropSaturationBrush)d; @@ -53,16 +69,5 @@ private static void OnSaturationChanged(DependencyObject d, DependencyPropertyCh brush.setter?.Invoke(target, (float)brush.Saturation); } } - - /// - /// The instance currently in use - /// - private EffectSetter setter; - - /// - protected override PipelineBuilder OnBrushRequested() - { - return PipelineBuilder.FromBackdrop().Saturation((float)Saturation, out setter); - } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs index 61fd9bfbd54..324a46d42d4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs @@ -14,6 +14,26 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// public class BackdropSepiaBrush : XamlCompositionEffectBrushBase { + /// + /// The instance currently in use + /// + private EffectSetter setter; + + /// + protected override PipelineBuilder OnBrushRequested() + { + return PipelineBuilder.FromBackdrop().Sepia((float)Intensity, out setter); + } + + /// + /// Gets or sets the amount of gaussian blur to apply to the background. + /// + public double Intensity + { + get => (double)GetValue(IntensityProperty); + set => SetValue(IntensityProperty, value); + } + /// /// Identifies the dependency property. /// @@ -24,14 +44,10 @@ public class BackdropSepiaBrush : XamlCompositionEffectBrushBase new PropertyMetadata(0.5, new PropertyChangedCallback(OnIntensityChanged))); /// - /// Gets or sets the amount of gaussian blur to apply to the background. + /// Updates the UI when changes /// - public double Intensity - { - get { return (double)GetValue(IntensityProperty); } - set { SetValue(IntensityProperty, value); } - } - + /// The current instance + /// The instance for private static void OnIntensityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var brush = (BackdropSepiaBrush)d; @@ -53,16 +69,5 @@ private static void OnIntensityChanged(DependencyObject d, DependencyPropertyCha brush.setter?.Invoke(target, (float)brush.Intensity); } } - - /// - /// The instance currently in use - /// - private EffectSetter setter; - - /// - protected override PipelineBuilder OnBrushRequested() - { - return PipelineBuilder.FromBackdrop().Sepia((float)Intensity, out setter); - } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AlphaMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/AlphaMode.cs similarity index 100% rename from Microsoft.Toolkit.Uwp.UI.Media/Brushes/AlphaMode.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Enums/AlphaMode.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/ImageBlendMode.cs similarity index 83% rename from Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendMode.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Enums/ImageBlendMode.cs index 0d93f1f529a..91580a7e661 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendMode.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Enums/ImageBlendMode.cs @@ -4,6 +4,8 @@ //// Composition supported version of http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_BlendEffectMode.htm. +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - see http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_BlendEffectMode.htm. + namespace Microsoft.Toolkit.Uwp.UI.Media { /// @@ -12,12 +14,12 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// public enum ImageBlendMode { - #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - see http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_BlendEffectMode.htm. Multiply = 0, Screen = 1, Darken = 2, Lighten = 3, - ////Dissolve = 4, // Not Supported + + // Dissolve = 4, // Not Supported ColorBurn = 5, LinearBurn = 6, DarkerColor = 7, @@ -55,6 +57,5 @@ public enum ImageBlendMode Luminosity = 23, Subtract = 24, Division = 25, - #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member } } From f4d37fc7634fb0b5692af731f45394f59f3ce2b2 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 22:43:14 +0100 Subject: [PATCH 44/92] More code refactoring --- .../Brushes/AcrylicBrush.cs | 22 ++++---- .../Brushes/BackdropBlurBrush.cs | 12 ++-- .../Brushes/BackdropSaturationBrush.cs | 12 ++-- .../Brushes/BackdropSepiaBrush.cs | 12 ++-- .../Brushes/ImageBlendBrush.cs | 56 ++++++++----------- .../Brushes/RadialGradientBrush.Properties.cs | 32 +++++------ .../Brushes/RadialGradientBrushInterop.cs | 2 +- 7 files changed, 68 insertions(+), 80 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index 8d0f196b13a..4376fd71ed1 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -15,17 +15,6 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes /// public sealed class AcrylicBrush : XamlCompositionEffectBrushBase { - /// - protected override PipelineBuilder OnBrushRequested() - { - switch (this.Source) - { - case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic(this.Tint, (float)this.TintMix, (float)this.BlurAmount, this.TextureUri); - case AcrylicBackgroundSource.HostBackdrop: return PipelineBuilder.FromHostBackdropAcrylic(this.Tint, (float)this.TintMix, this.TextureUri); - default: throw new ArgumentOutOfRangeException(nameof(this.Source), $"Invalid acrylic source: {this.Source}"); - } - } - /// /// Gets or sets the source mode for the effect /// @@ -51,5 +40,16 @@ protected override PipelineBuilder OnBrushRequested() /// Gets or sets the to the texture to use /// public Uri TextureUri { get; set; } + + /// + protected override PipelineBuilder OnBrushRequested() + { + switch (this.Source) + { + case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic(this.Tint, (float)this.TintMix, (float)this.BlurAmount, this.TextureUri); + case AcrylicBackgroundSource.HostBackdrop: return PipelineBuilder.FromHostBackdropAcrylic(this.Tint, (float)this.TintMix, this.TextureUri); + default: throw new ArgumentOutOfRangeException(nameof(this.Source), $"Invalid acrylic source: {this.Source}"); + } + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs index 574076d1459..117ee3bf76d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs @@ -22,12 +22,6 @@ public class BackdropBlurBrush : XamlCompositionEffectBrushBase /// private EffectSetter setter; - /// - protected override PipelineBuilder OnBrushRequested() - { - return PipelineBuilder.FromBackdrop().Blur((float)Amount, out setter); - } - /// /// Gets or sets the amount of gaussian blur to apply to the background. /// @@ -59,5 +53,11 @@ private static void OnAmountChanged(DependencyObject d, DependencyPropertyChange brush.setter?.Invoke(target, (float)brush.Amount); } } + + /// + protected override PipelineBuilder OnBrushRequested() + { + return PipelineBuilder.FromBackdrop().Blur((float)Amount, out setter); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs index 03856ac00b9..3f9083a87a5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs @@ -19,12 +19,6 @@ public class BackdropSaturationBrush : XamlCompositionEffectBrushBase /// private EffectSetter setter; - /// - protected override PipelineBuilder OnBrushRequested() - { - return PipelineBuilder.FromBackdrop().Saturation((float)Saturation, out setter); - } - /// /// Gets or sets the amount of gaussian blur to apply to the background. /// @@ -69,5 +63,11 @@ private static void OnSaturationChanged(DependencyObject d, DependencyPropertyCh brush.setter?.Invoke(target, (float)brush.Saturation); } } + + /// + protected override PipelineBuilder OnBrushRequested() + { + return PipelineBuilder.FromBackdrop().Saturation((float)Saturation, out setter); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs index 324a46d42d4..56e71660a4b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs @@ -19,12 +19,6 @@ public class BackdropSepiaBrush : XamlCompositionEffectBrushBase /// private EffectSetter setter; - /// - protected override PipelineBuilder OnBrushRequested() - { - return PipelineBuilder.FromBackdrop().Sepia((float)Intensity, out setter); - } - /// /// Gets or sets the amount of gaussian blur to apply to the background. /// @@ -69,5 +63,11 @@ private static void OnIntensityChanged(DependencyObject d, DependencyPropertyCha brush.setter?.Invoke(target, (float)brush.Intensity); } } + + /// + protected override PipelineBuilder OnBrushRequested() + { + return PipelineBuilder.FromBackdrop().Sepia((float)Intensity, out setter); + } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendBrush.cs index 41c746320e7..4bfa1dcd9d7 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendBrush.cs @@ -6,7 +6,6 @@ using System; using Microsoft.Graphics.Canvas.Effects; -using Windows.UI; using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Media; @@ -22,6 +21,15 @@ public class ImageBlendBrush : XamlCompositionBrushBase private LoadedImageSurface _surface; private CompositionSurfaceBrush _surfaceBrush; + /// + /// Gets or sets the source of the image to composite. + /// + public ImageSource Source + { + get => (ImageSource)GetValue(SourceProperty); + set => SetValue(SourceProperty, value); + } + /// /// Identifies the dependency property. /// @@ -29,15 +37,15 @@ public class ImageBlendBrush : XamlCompositionBrushBase nameof(Source), typeof(ImageSource), // We use ImageSource type so XAML engine will automatically construct proper object from String. typeof(ImageBlendBrush), - new PropertyMetadata(null, new PropertyChangedCallback(OnImageSourceChanged))); + new PropertyMetadata(null, OnImageSourceChanged)); /// - /// Gets or sets the source of the image to composite. + /// Gets or sets how to stretch the image within the brush. /// - public ImageSource Source + public Stretch Stretch { - get { return (ImageSource)GetValue(SourceProperty); } - set { SetValue(SourceProperty, value); } + get => (Stretch)GetValue(StretchProperty); + set => SetValue(StretchProperty, value); } /// @@ -48,15 +56,15 @@ public ImageSource Source nameof(Stretch), typeof(Stretch), typeof(ImageBlendBrush), - new PropertyMetadata(Stretch.None, new PropertyChangedCallback(OnStretchChanged))); + new PropertyMetadata(Stretch.None, OnStretchChanged)); /// - /// Gets or sets how to stretch the image within the brush. + /// Gets or sets how to blend the image with the backdrop. /// - public Stretch Stretch + public ImageBlendMode Mode { - get { return (Stretch)GetValue(StretchProperty); } - set { SetValue(StretchProperty, value); } + get => (ImageBlendMode)GetValue(ModeProperty); + set => SetValue(ModeProperty, value); } /// @@ -66,16 +74,7 @@ public Stretch Stretch nameof(Mode), typeof(ImageBlendMode), typeof(ImageBlendBrush), - new PropertyMetadata(ImageBlendMode.Multiply, new PropertyChangedCallback(OnModeChanged))); - - /// - /// Gets or sets how to blend the image with the backdrop. - /// - public ImageBlendMode Mode - { - get { return (ImageBlendMode)GetValue(ModeProperty); } - set { SetValue(ModeProperty, value); } - } + new PropertyMetadata(ImageBlendMode.Multiply, OnModeChanged)); private static void OnImageSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { @@ -120,16 +119,7 @@ private static void OnModeChanged(DependencyObject d, DependencyPropertyChangedE brush.OnConnected(); } - /// - /// Initializes a new instance of the class. - /// - public ImageBlendBrush() - { - } - - /// - /// Initializes the Composition Brush. - /// + /// protected override void OnConnected() { // Delay creating composition resources until they're required. @@ -172,9 +162,7 @@ protected override void OnConnected() } } - /// - /// Deconstructs the Composition Brush. - /// + /// protected override void OnDisconnected() { // Dispose of composition resources when no longer in use. diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrush.Properties.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrush.Properties.cs index f0d5863786b..26e3ee07630 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrush.Properties.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrush.Properties.cs @@ -18,8 +18,8 @@ public partial class RadialGradientBrush /// public AlphaMode AlphaMode { - get { return (AlphaMode)GetValue(AlphaModeProperty); } - set { SetValue(AlphaModeProperty, value); } + get => (AlphaMode)GetValue(AlphaModeProperty); + set => SetValue(AlphaModeProperty, value); } /// @@ -33,8 +33,8 @@ public AlphaMode AlphaMode /// public ColorInterpolationMode ColorInterpolationMode { - get { return (ColorInterpolationMode)GetValue(ColorInterpolationModeProperty); } - set { SetValue(ColorInterpolationModeProperty, value); } + get => (ColorInterpolationMode)GetValue(ColorInterpolationModeProperty); + set => SetValue(ColorInterpolationModeProperty, value); } /// @@ -48,8 +48,8 @@ public ColorInterpolationMode ColorInterpolationMode /// public GradientStopCollection GradientStops { - get { return (GradientStopCollection)GetValue(GradientStopsProperty); } - set { SetValue(GradientStopsProperty, value); } + get => (GradientStopCollection)GetValue(GradientStopsProperty); + set => SetValue(GradientStopsProperty, value); } /// @@ -63,8 +63,8 @@ public GradientStopCollection GradientStops /// public Point Center { - get { return (Point)GetValue(CenterProperty); } - set { SetValue(CenterProperty, value); } + get => (Point)GetValue(CenterProperty); + set => SetValue(CenterProperty, value); } /// @@ -78,8 +78,8 @@ public Point Center /// public Point GradientOrigin { - get { return (Point)GetValue(GradientOriginProperty); } - set { SetValue(GradientOriginProperty, value); } + get => (Point)GetValue(GradientOriginProperty); + set => SetValue(GradientOriginProperty, value); } /// @@ -93,8 +93,8 @@ public Point GradientOrigin /// public double RadiusX { - get { return (double)GetValue(RadiusXProperty); } - set { SetValue(RadiusXProperty, value); } + get => (double)GetValue(RadiusXProperty); + set => SetValue(RadiusXProperty, value); } /// @@ -108,8 +108,8 @@ public double RadiusX /// public double RadiusY { - get { return (double)GetValue(RadiusYProperty); } - set { SetValue(RadiusYProperty, value); } + get => (double)GetValue(RadiusYProperty); + set => SetValue(RadiusYProperty, value); } /// @@ -123,8 +123,8 @@ public double RadiusY /// public GradientSpreadMethod SpreadMethod { - get { return (GradientSpreadMethod)GetValue(SpreadMethodProperty); } - set { SetValue(SpreadMethodProperty, value); } + get => (GradientSpreadMethod)GetValue(SpreadMethodProperty); + set => SetValue(SpreadMethodProperty, value); } /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrushInterop.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrushInterop.cs index 8a6b23047e2..15910f486a3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrushInterop.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrushInterop.cs @@ -89,7 +89,7 @@ public static CanvasGradientStop[] ToWin2DGradientStops(this GradientStopCollect int x = 0; foreach (var stop in stops) { - canvasStops[x++] = new CanvasGradientStop() { Color = stop.Color, Position = (float)stop.Offset }; + canvasStops[x++] = new CanvasGradientStop { Color = stop.Color, Position = (float)stop.Offset }; } return canvasStops; From 066b9482876d8510d835975f8776b61d26ecc06f Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 22:55:15 +0100 Subject: [PATCH 45/92] Added exposure effect --- .../Brushes/PipelineBrush.cs | 2 + .../Effects/ExposureEffect.cs | 15 +++++ .../Pipelines/PipelineBuilder.Effects.cs | 63 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 5c4f8c206ae..2fca0a31228 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -86,6 +86,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu return builder.LuminanceToAlpha(); case InvertEffect _: return builder.Invert(); + case ExposureEffect exposure: + return builder.Exposure((float)exposure.Value); case SepiaEffect sepia: return builder.Sepia((float)sepia.Value); case TintEffect tint: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs new file mode 100644 index 00000000000..7a93a9f1a79 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// An exposure effect + /// + public sealed class ExposureEffect : ValueEffectBase + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 7a98888d722..4e0921a827e 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -464,6 +464,69 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animati return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(OpacityEffect.Opacity)}" }); } + /// + /// Applies an exposure effect on the current pipeline + /// + /// The amount of exposure to apply over the current effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Exposure(float amount) + { + async Task Factory() => new ExposureEffect + { + Exposure = amount, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Applies an exposure effect on the current pipeline + /// + /// The initial exposure of tint to apply over the current effect + /// The optional amount setter for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Exposure(float amount, out EffectSetter setter) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new ExposureEffect + { + Exposure = amount, + Source = await this.sourceProducer(), + Name = id + }; + + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(ExposureEffect.Exposure)}", value); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(ExposureEffect.Exposure)}" }); + } + + /// + /// Applies an exposure effect on the current pipeline + /// + /// The initial exposure of tint to apply over the current effect + /// The optional amount animation for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Exposure(float amount, out EffectAnimation animation) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async Task Factory() => new ExposureEffect + { + Exposure = amount, + Source = await this.sourceProducer(), + Name = id + }; + + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(ExposureEffect.Exposure)}", value, duration); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(ExposureEffect.Exposure)}" }); + } + /// /// Applies a tint color on the current pipeline /// From 066666a917685acee90dee12cab572fcbe40a401 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 22:57:52 +0100 Subject: [PATCH 46/92] Added grayscale effect --- .../Brushes/PipelineBrush.cs | 2 ++ .../Effects/GrayscaleEffect.cs | 15 +++++++++++++++ .../Pipelines/PipelineBuilder.Effects.cs | 15 +++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 2fca0a31228..b38691f7108 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -86,6 +86,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu 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: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs new file mode 100644 index 00000000000..c88ec3f0862 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs @@ -0,0 +1,15 @@ +// 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.Effects.Interfaces; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A grayscale effect + /// + public sealed class GrayscaleEffect : IPipelineEffect + { + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 4e0921a827e..bd0c86580bc 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -595,6 +595,21 @@ public PipelineBuilder Invert() return new PipelineBuilder(this, Factory); } + /// + /// Applies a grayscale on the current pipeline + /// + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Grayscale() + { + async Task Factory() => new GrayscaleEffect + { + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + /// /// Applies a custom effect to the current pipeline /// From 1d6a8f46dbb0efbd01c899f235710ef69911a2d0 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 23:00:35 +0100 Subject: [PATCH 47/92] Minor code refactoring and bug fixes --- .../Pipelines/PipelineBuilder.Initialization.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 8837269c2d6..7b51d718587 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -96,9 +96,9 @@ Task Factory() => Task.FromResult( Name = id }); - setter = (brush, value) => brush.Properties.InsertColor($"{id}.Color", value); + setter = (brush, value) => brush.Properties.InsertColor($"{id}.{nameof(ColorSourceEffect.Color)}", value); - return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + return new PipelineBuilder(Factory, new[] { $"{id}.{nameof(ColorSourceEffect.Color)}" }); } /// @@ -118,9 +118,9 @@ Task Factory() => Task.FromResult( Name = id }); - animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.Color", value, duration); + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(ColorSourceEffect.Color)}", value, duration); - return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + return new PipelineBuilder(Factory, new[] { $"{id}.{nameof(ColorSourceEffect.Color)}" }); } /// @@ -151,9 +151,9 @@ Task Factory() => Task.FromResult( Name = id }); - setter = (brush, value) => brush.Properties.InsertVector4($"{id}.Color", value); + setter = (brush, value) => brush.Properties.InsertVector4($"{id}.{nameof(ColorSourceEffect.ColorHdr)}", value); - return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + return new PipelineBuilder(Factory, new[] { $"{id}.{nameof(ColorSourceEffect.ColorHdr)}" }); } /// @@ -173,9 +173,9 @@ Task Factory() => Task.FromResult( Name = id }); - animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.Color", value, duration); + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(ColorSourceEffect.ColorHdr)}", value, duration); - return new PipelineBuilder(Factory, new[] { $"{id}.Color" }); + return new PipelineBuilder(Factory, new[] { $"{id}.{nameof(ColorSourceEffect.ColorHdr)}" }); } /// From 8147dbbd03b53cd49e940a6734b6f5a93ce5458a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 23:30:55 +0100 Subject: [PATCH 48/92] Switched to ValueTask to reduce allocations, new APIs --- .../Microsoft.Toolkit.Uwp.UI.Media.csproj | 1 + .../Pipelines/BrushProvider.cs | 21 +++++-- .../Pipelines/PipelineBuilder.Effects.cs | 52 ++++++++--------- .../PipelineBuilder.Initialization.cs | 58 ++++++++++++++----- .../Pipelines/PipelineBuilder.cs | 30 +++++----- 5 files changed, 99 insertions(+), 63 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj b/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj index c0e7bba86e7..f1f8dbc71a4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj +++ b/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj @@ -23,6 +23,7 @@ + diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs index e3bac42a681..df6c5042e33 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/BrushProvider.cs @@ -22,14 +22,14 @@ public sealed class BrushProvider /// /// Gets the stored effect initializer /// - internal Func> Initializer { get; } + internal Func> Initializer { get; } /// /// Initializes a new instance of the class. /// /// The name of the target /// The stored effect initializer - private BrushProvider(string name, Func> initializer) + private BrushProvider(string name, Func> initializer) { this.Name = name; this.Initializer = initializer; @@ -39,18 +39,27 @@ private BrushProvider(string name, Func> initializer) /// Creates a new instance with the info on a given to initialize /// /// The target effect name - /// A instance that will produce the to use to initialize the effect + /// A to use to initialize the effect /// A instance with the input initializer [Pure] - public static BrushProvider New(string name, Func initializer) => new BrushProvider(name, () => Task.FromResult(initializer())); + public static BrushProvider New(string name, CompositionBrush brush) => new BrushProvider(name, () => new ValueTask(brush)); /// /// Creates a new instance with the info on a given to initialize /// /// The target effect name - /// An asynchronous instance that will produce the to use to initialize the effect + /// A instance that will produce the to use to initialize the effect /// A instance with the input initializer [Pure] - public static BrushProvider New(string name, Func> initializer) => new BrushProvider(name, initializer); + public static BrushProvider New(string name, Func factory) => new BrushProvider(name, () => new ValueTask(factory())); + + /// + /// Creates a new instance with the info on a given to initialize + /// + /// The target effect name + /// An asynchronous instance that will produce the to use to initialize the effect + /// A instance with the input initializer + [Pure] + public static BrushProvider New(string name, Func> factory) => new BrushProvider(name, () => new ValueTask(factory())); } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index bd0c86580bc..ab4ec5c116f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -42,7 +42,7 @@ public PipelineBuilder Blend(PipelineBuilder pipeline, BlendEffectMode mode, Pla background = this; } - async Task Factory() => new BlendEffect + async ValueTask Factory() => new BlendEffect { Foreground = await foreground.sourceProducer(), Background = await background.sourceProducer(), @@ -74,7 +74,7 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, background = this; } - async Task Factory() => new CrossFadeEffect + async ValueTask Factory() => new CrossFadeEffect { CrossFade = factor, Source1 = await foreground.sourceProducer(), @@ -109,7 +109,7 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new CrossFadeEffect + async ValueTask Factory() => new CrossFadeEffect { CrossFade = factor, Source1 = await foreground.sourceProducer(), @@ -147,7 +147,7 @@ public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out Eff string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new CrossFadeEffect + async ValueTask Factory() => new CrossFadeEffect { CrossFade = factor, Source1 = await foreground.sourceProducer(), @@ -175,7 +175,7 @@ public PipelineBuilder Merge( IEnumerable animations = null, IEnumerable initializers = null) { - async Task Factory() => factory(await this.sourceProducer(), await background.sourceProducer()); + async ValueTask Factory() => factory(await this.sourceProducer(), await background.sourceProducer()); return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); } @@ -195,7 +195,7 @@ public PipelineBuilder Merge( IEnumerable animations = null, IEnumerable initializers = null) { - async Task Factory() => await factory(await this.sourceProducer(), await background.sourceProducer()); + async ValueTask Factory() => await factory(await this.sourceProducer(), await background.sourceProducer()); return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); } @@ -210,7 +210,7 @@ public PipelineBuilder Merge( [Pure] public PipelineBuilder Blur(float blur, EffectBorderMode mode = EffectBorderMode.Hard, EffectOptimization optimization = EffectOptimization.Balanced) { - async Task Factory() => new GaussianBlurEffect + async ValueTask Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, @@ -234,7 +234,7 @@ public PipelineBuilder Blur(float blur, out EffectSetter setter, EffectBo { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new GaussianBlurEffect + async ValueTask Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, @@ -261,7 +261,7 @@ public PipelineBuilder Blur(float blur, out EffectAnimation animation, Ef { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new GaussianBlurEffect + async ValueTask Factory() => new GaussianBlurEffect { BlurAmount = blur, BorderMode = mode, @@ -283,7 +283,7 @@ public PipelineBuilder Blur(float blur, out EffectAnimation animation, Ef [Pure] public PipelineBuilder Saturation(float saturation) { - async Task Factory() => new SaturationEffect + async ValueTask Factory() => new SaturationEffect { Saturation = saturation, Source = await this.sourceProducer() @@ -303,7 +303,7 @@ public PipelineBuilder Saturation(float saturation, out EffectSetter sett { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new SaturationEffect + async ValueTask Factory() => new SaturationEffect { Saturation = saturation, Source = await this.sourceProducer(), @@ -326,7 +326,7 @@ public PipelineBuilder Saturation(float saturation, out EffectAnimation a { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new SaturationEffect + async ValueTask Factory() => new SaturationEffect { Saturation = saturation, Source = await this.sourceProducer(), @@ -346,7 +346,7 @@ public PipelineBuilder Saturation(float saturation, out EffectAnimation a [Pure] public PipelineBuilder Sepia(float intensity) { - async Task Factory() => new SepiaEffect + async ValueTask Factory() => new SepiaEffect { Intensity = intensity, Source = await this.sourceProducer() @@ -366,7 +366,7 @@ public PipelineBuilder Sepia(float intensity, out EffectSetter setter) { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new SepiaEffect + async ValueTask Factory() => new SepiaEffect { Intensity = intensity, Source = await this.sourceProducer(), @@ -389,7 +389,7 @@ public PipelineBuilder Sepia(float intensity, out EffectAnimation animati { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new SepiaEffect + async ValueTask Factory() => new SepiaEffect { Intensity = intensity, Source = await this.sourceProducer(), @@ -409,7 +409,7 @@ public PipelineBuilder Sepia(float intensity, out EffectAnimation animati [Pure] public PipelineBuilder Opacity(float opacity) { - async Task Factory() => new OpacityEffect + async ValueTask Factory() => new OpacityEffect { Opacity = opacity, Source = await this.sourceProducer() @@ -429,7 +429,7 @@ public PipelineBuilder Opacity(float opacity, out EffectSetter setter) { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new OpacityEffect + async ValueTask Factory() => new OpacityEffect { Opacity = opacity, Source = await this.sourceProducer(), @@ -452,7 +452,7 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animati { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new OpacityEffect + async ValueTask Factory() => new OpacityEffect { Opacity = opacity, Source = await this.sourceProducer(), @@ -472,7 +472,7 @@ public PipelineBuilder Opacity(float opacity, out EffectAnimation animati [Pure] public PipelineBuilder Exposure(float amount) { - async Task Factory() => new ExposureEffect + async ValueTask Factory() => new ExposureEffect { Exposure = amount, Source = await this.sourceProducer() @@ -492,7 +492,7 @@ public PipelineBuilder Exposure(float amount, out EffectSetter setter) { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new ExposureEffect + async ValueTask Factory() => new ExposureEffect { Exposure = amount, Source = await this.sourceProducer(), @@ -515,7 +515,7 @@ public PipelineBuilder Exposure(float amount, out EffectAnimation animati { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - async Task Factory() => new ExposureEffect + async ValueTask Factory() => new ExposureEffect { Exposure = amount, Source = await this.sourceProducer(), @@ -572,7 +572,7 @@ public PipelineBuilder Tint(Color color, float mix, out EffectAnimation a [Pure] public PipelineBuilder LuminanceToAlpha() { - async Task Factory() => new LuminanceToAlphaEffect + async ValueTask Factory() => new LuminanceToAlphaEffect { Source = await this.sourceProducer() }; @@ -587,7 +587,7 @@ public PipelineBuilder LuminanceToAlpha() [Pure] public PipelineBuilder Invert() { - async Task Factory() => new InvertEffect + async ValueTask Factory() => new InvertEffect { Source = await this.sourceProducer() }; @@ -602,7 +602,7 @@ public PipelineBuilder Invert() [Pure] public PipelineBuilder Grayscale() { - async Task Factory() => new GrayscaleEffect + async ValueTask Factory() => new GrayscaleEffect { Source = await this.sourceProducer() }; @@ -623,7 +623,7 @@ public PipelineBuilder Effect( IEnumerable animations = null, IEnumerable initializers = null) { - async Task Factory() => factory(await this.sourceProducer()); + async ValueTask Factory() => factory(await this.sourceProducer()); return new PipelineBuilder(this, Factory, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); } @@ -641,7 +641,7 @@ public PipelineBuilder Effect( IEnumerable animations = null, IEnumerable initializers = null) { - async Task Factory() => await factory(await this.sourceProducer()); + async ValueTask Factory() => await factory(await this.sourceProducer()); return new PipelineBuilder(this, Factory, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 7b51d718587..a394736683f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs @@ -41,11 +41,11 @@ public sealed partial class PipelineBuilder [Pure] public static PipelineBuilder FromBackdrop() { - Task Factory() + ValueTask Factory() { var brush = BackdropBrushCache.GetValue(Window.Current.Compositor, c => c.CreateBackdropBrush()); - return Task.FromResult(brush); + return new ValueTask(brush); } return new PipelineBuilder(Factory); @@ -58,11 +58,11 @@ Task Factory() [Pure] public static PipelineBuilder FromHostBackdrop() { - Task Factory() + ValueTask Factory() { var brush = HostBackdropBrushCache.GetValue(Window.Current.Compositor, c => c.CreateHostBackdropBrush()); - return Task.FromResult(brush); + return new ValueTask(brush); } return new PipelineBuilder(Factory); @@ -76,7 +76,7 @@ Task Factory() [Pure] public static PipelineBuilder FromColor(Color color) { - return new PipelineBuilder(() => Task.FromResult(new ColorSourceEffect { Color = color })); + return new PipelineBuilder(() => new ValueTask(new ColorSourceEffect { Color = color })); } /// @@ -90,7 +90,7 @@ public static PipelineBuilder FromColor(Color color, out EffectSetter set { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - Task Factory() => Task.FromResult(new ColorSourceEffect + ValueTask Factory() => new ValueTask(new ColorSourceEffect { Color = color, Name = id @@ -112,7 +112,7 @@ public static PipelineBuilder FromColor(Color color, out EffectAnimation { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - Task Factory() => Task.FromResult(new ColorSourceEffect + ValueTask Factory() => new ValueTask(new ColorSourceEffect { Color = color, Name = id @@ -131,7 +131,7 @@ Task Factory() => Task.FromResult( [Pure] public static PipelineBuilder FromHdrColor(Vector4 color) { - return new PipelineBuilder(() => Task.FromResult(new ColorSourceEffect { ColorHdr = color })); + return new PipelineBuilder(() => new ValueTask(new ColorSourceEffect { ColorHdr = color })); } /// @@ -145,7 +145,7 @@ public static PipelineBuilder FromHdrColor(Vector4 color, out EffectSetter Factory() => Task.FromResult(new ColorSourceEffect + ValueTask Factory() => new ValueTask(new ColorSourceEffect { ColorHdr = color, Name = id @@ -167,7 +167,7 @@ public static PipelineBuilder FromHdrColor(Vector4 color, out EffectAnimation Factory() => Task.FromResult(new ColorSourceEffect + ValueTask Factory() => new ValueTask(new ColorSourceEffect { ColorHdr = color, Name = id @@ -178,6 +178,17 @@ Task Factory() => Task.FromResult( return new PipelineBuilder(Factory, new[] { $"{id}.{nameof(ColorSourceEffect.ColorHdr)}" }); } + /// + /// Starts a new pipeline from the input instance + /// + /// A instance to start the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromBrush(CompositionBrush brush) + { + return new PipelineBuilder(() => new ValueTask(brush)); + } + /// /// Starts a new pipeline from the input instance /// @@ -186,7 +197,7 @@ Task Factory() => Task.FromResult( [Pure] public static PipelineBuilder FromBrush(Func factory) { - return new PipelineBuilder(() => Task.FromResult(factory())); + return new PipelineBuilder(() => new ValueTask(factory())); } /// @@ -197,7 +208,20 @@ public static PipelineBuilder FromBrush(Func factory) [Pure] public static PipelineBuilder FromBrush(Func> factory) { - return new PipelineBuilder(factory); + async ValueTask Factory() => await factory(); + + return new PipelineBuilder(Factory); + } + + /// + /// Starts a new pipeline from the input instance + /// + /// A instance to start the pipeline + /// A new instance to use to keep adding new effects + [Pure] + public static PipelineBuilder FromEffect(IGraphicsEffectSource effect) + { + return new PipelineBuilder(() => new ValueTask(effect)); } /// @@ -208,7 +232,7 @@ public static PipelineBuilder FromBrush(Func> factory) [Pure] public static PipelineBuilder FromEffect(Func factory) { - return new PipelineBuilder(() => Task.FromResult(factory())); + return new PipelineBuilder(() => new ValueTask(factory())); } /// @@ -219,7 +243,9 @@ public static PipelineBuilder FromEffect(Func factory) [Pure] public static PipelineBuilder FromEffect(Func> factory) { - return new PipelineBuilder(factory); + async ValueTask Factory() => await factory(); + + return new PipelineBuilder(Factory); } /// @@ -273,7 +299,7 @@ public static PipelineBuilder FromTiles(Uri uri, DpiMode dpiMode = DpiMode.Displ { var image = FromImage(uri, dpiMode, cacheMode); - async Task Factory() => new BorderEffect + async ValueTask Factory() => new BorderEffect { ExtendX = CanvasEdgeBehavior.Wrap, ExtendY = CanvasEdgeBehavior.Wrap, @@ -291,7 +317,7 @@ public static PipelineBuilder FromTiles(Uri uri, DpiMode dpiMode = DpiMode.Displ [Pure] public static PipelineBuilder FromUIElement(UIElement element) { - return new PipelineBuilder(() => Task.FromResult(ElementCompositionPreview.GetElementVisual(element).Compositor.CreateBackdropBrush())); + return new PipelineBuilder(() => new ValueTask(ElementCompositionPreview.GetElementVisual(element).Compositor.CreateBackdropBrush())); } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 11dc44f7c50..9894569481c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -43,7 +43,7 @@ public sealed partial class PipelineBuilder /// /// The instance used to produce the output for this pipeline /// - private readonly Func> sourceProducer; + private readonly Func> sourceProducer; /// /// The collection of animation properties present in the current pipeline @@ -53,30 +53,30 @@ public sealed partial class PipelineBuilder /// /// The collection of info on the parameters that need to be initialized after creating the final /// - private readonly IReadOnlyDictionary>> lazyParameters; + private readonly IReadOnlyDictionary>> lazyParameters; /// /// Initializes a new instance of the class. /// /// A instance that will return the initial - private PipelineBuilder(Func> factory) + private PipelineBuilder(Func> factory) { string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - this.sourceProducer = () => Task.FromResult(new CompositionEffectSourceParameter(id)); + this.sourceProducer = () => new ValueTask(new CompositionEffectSourceParameter(id)); this.animationProperties = Array.Empty(); - this.lazyParameters = new Dictionary>> { { id, factory } }; + this.lazyParameters = new Dictionary>> { { id, factory } }; } /// /// Initializes a new instance of the class. /// /// A instance that will return the initial - private PipelineBuilder(Func> factory) + private PipelineBuilder(Func> factory) : this( factory, Array.Empty(), - new Dictionary>>()) + new Dictionary>>()) { } @@ -86,12 +86,12 @@ private PipelineBuilder(Func> factory) /// A instance that will produce the new to add to the pipeline /// The collection of animation properties for the new effect private PipelineBuilder( - Func> factory, + Func> factory, IReadOnlyCollection animations) : this( factory, animations, - new Dictionary>>()) + new Dictionary>>()) { } @@ -102,9 +102,9 @@ private PipelineBuilder( /// The collection of animation properties for the new effect /// The collection of instances that needs to be initialized for the new effect private PipelineBuilder( - Func> factory, + Func> factory, IReadOnlyCollection animations, - IReadOnlyDictionary>> lazy) + IReadOnlyDictionary>> lazy) { this.sourceProducer = factory; this.animationProperties = animations; @@ -120,9 +120,9 @@ private PipelineBuilder( /// The collection of instances that needs to be initialized for the new effect private PipelineBuilder( PipelineBuilder source, - Func> factory, + Func> factory, IReadOnlyCollection animations = null, - IReadOnlyDictionary>> lazy = null) + IReadOnlyDictionary>> lazy = null) : this( factory, animations?.Merge(source.animationProperties) ?? source.animationProperties, @@ -139,11 +139,11 @@ private PipelineBuilder( /// The collection of animation properties for the new effect /// The collection of instances that needs to be initialized for the new effect private PipelineBuilder( - Func> factory, + Func> factory, PipelineBuilder a, PipelineBuilder b, IReadOnlyCollection animations = null, - IReadOnlyDictionary>> lazy = null) + IReadOnlyDictionary>> lazy = null) : this( factory, animations?.Merge(a.animationProperties.Merge(b.animationProperties)) ?? a.animationProperties.Merge(b.animationProperties), From 83103b7fb96eedcaa83199ef4da7618cabf6b81a Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 23:46:41 +0100 Subject: [PATCH 49/92] Removed unnecessary APIs --- .../Pipelines/PipelineBuilder.Prebuilt.cs | 116 +----------------- 1 file changed, 2 insertions(+), 114 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index 5b51ed8f270..17814ee15fe 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -15,20 +15,6 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines /// 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 relative path for the noise texture to load (eg. "/Assets/noise.png") - /// 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, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) - { - return FromHostBackdropAcrylic(tint, mix, noiseRelativePath.ToAppxUri(), cacheMode); - } - /// /// Returns a new instance that implements the host backdrop acrylic effect /// @@ -42,28 +28,13 @@ public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, Uri { return FromHostBackdrop() - .Effect(source => new LuminanceToAlphaEffect { Source = source }) + .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) .Tint(tint, mix) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } - /// - /// 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 animation to apply on the tint color of the effect - /// The relative path for the noise texture to load (eg. "/Assets/noise.png") - /// 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, out EffectAnimation tintAnimation, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) - { - return FromHostBackdropAcrylic(tint, mix, out tintAnimation, noiseRelativePath.ToAppxUri(), cacheMode); - } - /// /// Returns a new instance that implements the host backdrop acrylic effect /// @@ -78,28 +49,13 @@ public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, out { return FromHostBackdrop() - .Effect(source => new LuminanceToAlphaEffect { Source = source }) + .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) .Tint(tint, mix, out tintAnimation) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } - /// - /// 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 relative path for the noise texture to load (eg. "/Assets/noise.png") - /// 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, string noiseRelativePath, CacheMode cacheMode = CacheMode.Default) - { - return FromBackdropAcrylic(tint, mix, blur, noiseRelativePath.ToAppxUri(), cacheMode); - } - /// /// Returns a new instance that implements the in-app backdrop acrylic effect /// @@ -119,28 +75,6 @@ public static PipelineBuilder FromBackdropAcrylic(Color tint, float mix, float b .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } - /// - /// 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 animation to apply on the tint color of the effect - /// The amount of blur to apply to the acrylic brush - /// The relative path for the noise texture to load (eg. "/Assets/noise.png") - /// 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, - out EffectAnimation tintAnimation, - float blur, - string noiseRelativePath, - CacheMode cacheMode = CacheMode.Default) - { - return FromBackdropAcrylic(tint, mix, out tintAnimation, blur, noiseRelativePath.ToAppxUri(), cacheMode); - } - /// /// Returns a new instance that implements the in-app backdrop acrylic effect /// @@ -167,28 +101,6 @@ public static PipelineBuilder FromBackdropAcrylic( .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } - /// - /// 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 animation to apply on the blur effect in the pipeline - /// The relative path for the noise texture to load (eg. "/Assets/noise.png") - /// 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, - out EffectAnimation blurAnimation, - string noiseRelativePath, - CacheMode cacheMode = CacheMode.Default) - { - return FromBackdropAcrylic(tint, mix, blur, out blurAnimation, noiseRelativePath.ToAppxUri(), cacheMode); - } - /// /// Returns a new instance that implements the in-app backdrop acrylic effect /// @@ -215,30 +127,6 @@ public static PipelineBuilder FromBackdropAcrylic( .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } - /// - /// 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 animation to apply on the tint color of the effect - /// The amount of blur to apply to the acrylic brush - /// The animation to apply on the blur effect in the pipeline - /// The relative path for the noise texture to load (eg. "/Assets/noise.png") - /// 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, - out EffectAnimation tintAnimation, - float blur, - out EffectAnimation blurAnimation, - string noiseRelativePath, - CacheMode cacheMode = CacheMode.Default) - { - return FromBackdropAcrylic(tint, mix, out tintAnimation, blur, out blurAnimation, noiseRelativePath.ToAppxUri(), cacheMode); - } - /// /// Returns a new instance that implements the in-app backdrop acrylic effect /// From b17e27f8b12e4f0c727d398c493cb7ae503f067b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 30 Jan 2020 23:58:51 +0100 Subject: [PATCH 50/92] Streamlined prebuilt acrylic pipelines --- .../Pipelines/PipelineBuilder.Effects.cs | 14 ++-- .../Pipelines/PipelineBuilder.Prebuilt.cs | 67 +++++++++++++------ 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index ab4ec5c116f..978840f5ccc 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -543,26 +543,28 @@ public PipelineBuilder Tint(Color color, float mix) /// Applies a tint color on the current pipeline /// /// The tint color to use + /// The optional tint color setter for the effect /// The initial amount of tint to apply over the current effect - /// The optional tint mix setter for the effect + /// The optional tint mix setter for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Tint(Color color, float mix, out EffectSetter setter) + public PipelineBuilder Tint(Color color, out EffectSetter colorSetter, float mix, out EffectSetter mixSetter) { - return FromColor(color).CrossFade(this, mix, out setter); + return FromColor(color, out colorSetter).CrossFade(this, mix, out mixSetter); } /// /// Applies a tint color on the current pipeline /// /// The tint color to use + /// The optional tint color animation for the effect /// The initial amount of tint to apply over the current effect - /// The optional tint mix animation for the effect + /// The optional tint mix animation for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Tint(Color color, float mix, out EffectAnimation animation) + public PipelineBuilder Tint(Color color, out EffectAnimation colorAnimation, float mix, out EffectAnimation mixAnimation) { - return FromColor(color).CrossFade(this, mix, out animation); + return FromColor(color, out colorAnimation).CrossFade(this, mix, out mixAnimation); } /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index 17814ee15fe..5a1ef272f70 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -5,7 +5,6 @@ using System; using System.Diagnostics.Contracts; using Microsoft.Graphics.Canvas.Effects; -using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Windows.UI; namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines @@ -24,7 +23,11 @@ public sealed partial class PipelineBuilder /// 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, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) + public static PipelineBuilder FromHostBackdropAcrylic( + Color tint, + float mix, + Uri noiseUri, + CacheMode cacheMode = CacheMode.Default) { return FromHostBackdrop() @@ -39,39 +42,55 @@ public static PipelineBuilder FromHostBackdropAcrylic(Color tint, float mix, Uri /// 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 animation to apply on the tint color of the 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, float mix, out EffectAnimation tintAnimation, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) + public static PipelineBuilder FromHostBackdropAcrylic( + Color tint, + out EffectSetter tintSetter, + float mix, + out EffectSetter mixSetter, + Uri noiseUri, + CacheMode cacheMode = CacheMode.Default) { return FromHostBackdrop() .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Tint(tint, mix, out tintAnimation) + .Tint(tint, out tintSetter, mix, out mixSetter) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } /// - /// Returns a new instance that implements the in-app backdrop acrylic effect + /// 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 amount of blur to apply to the acrylic brush + /// 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 FromBackdropAcrylic(Color tint, float mix, float blur, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) + public static PipelineBuilder FromHostBackdropAcrylic( + Color tint, + out EffectAnimation tintAnimation, + float mix, + out EffectAnimation mixAnimation, + Uri noiseUri, + CacheMode cacheMode = CacheMode.Default) { return - FromBackdrop() - .Tint(tint, mix) - .Blur(blur) + FromHostBackdrop() + .LuminanceToAlpha() + .Opacity(0.4f) + .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) + .Tint(tint, out tintAnimation, mix, out mixAnimation) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } @@ -80,7 +99,6 @@ public static PipelineBuilder FromBackdropAcrylic(Color tint, float mix, float b /// /// The tint color to use /// The amount of tint to apply over the current effect - /// The animation to apply on the tint color of the 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 @@ -89,14 +107,13 @@ public static PipelineBuilder FromBackdropAcrylic(Color tint, float mix, float b public static PipelineBuilder FromBackdropAcrylic( Color tint, float mix, - out EffectAnimation tintAnimation, float blur, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { return FromBackdrop() - .Tint(tint, mix, out tintAnimation) + .Tint(tint, mix) .Blur(blur) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } @@ -105,25 +122,29 @@ 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 animation to apply on the blur effect in the pipeline + /// 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 EffectAnimation blurAnimation, + out EffectSetter blurSetter, Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { return FromBackdrop() - .Tint(tint, mix) - .Blur(blur, out blurAnimation) + .Tint(tint, out tintSetter, mix, out mixSetter) + .Blur(blur, out blurSetter) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } @@ -131,18 +152,20 @@ 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 animation for the effect /// The amount of tint to apply over the current effect - /// The animation to apply on the tint color of the effect + /// The optional tint mix animation for the effect /// The amount of blur to apply to the acrylic brush - /// The animation to apply on the blur effect in the pipeline + /// 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, + out EffectAnimation tintAnimation, float mix, - out EffectAnimation tintAnimation, + out EffectAnimation mixAnimation, float blur, out EffectAnimation blurAnimation, Uri noiseUri, @@ -150,7 +173,7 @@ public static PipelineBuilder FromBackdropAcrylic( { return FromBackdrop() - .Tint(tint, mix, out tintAnimation) + .Tint(tint, out tintAnimation, mix, out mixAnimation) .Blur(blur, out blurAnimation) .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); } From fcc39d77774bca78cfcc3b1029531d2aaa8036da Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:02:42 +0100 Subject: [PATCH 51/92] Added support for live updates in the acrylic brush --- .../Brushes/AcrylicBrush.cs | 177 +++++++++++++++++- 1 file changed, 171 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index 4376fd71ed1..fad6fb87e4c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -6,6 +6,8 @@ using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; +using Windows.UI.Composition; +using Windows.UI.Xaml; using Windows.UI.Xaml.Media; namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes @@ -15,39 +17,202 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes /// public sealed class AcrylicBrush : XamlCompositionEffectBrushBase { + /// + /// The instance in use to set the blur amount + /// + /// This is only set when is + private EffectSetter blurAmountSetter; + + /// + /// The instance in use to set the tint color + /// + private EffectSetter tintSetter; + + /// + /// The instance in use to set the tint mix amount + /// + private EffectSetter tintMixSetter; + /// /// Gets or sets the source mode for the effect /// - public AcrylicBackgroundSource Source { get; set; } + public AcrylicBackgroundSource Source + { + get => (AcrylicBackgroundSource)GetValue(SourceProperty); + set => SetValue(SourceProperty, value); + } + + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty SourceProperty = DependencyProperty.Register( + nameof(Source), + typeof(AcrylicBackgroundSource), + typeof(AcrylicBrush), + new PropertyMetadata(AcrylicBackgroundSource.Backdrop, OnSourcePropertyChanged)); + + /// + /// Updates the UI when changes + /// + /// The current instance + /// The instance for + private static void OnSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is AcrylicBrush brush && + brush.CompositionBrush != null) + { + brush.OnDisconnected(); + brush.OnConnected(); + } + } /// /// Gets or sets the blur amount for the effect /// /// This property is ignored when the active mode is - public double BlurAmount { get; set; } + public double BlurAmount + { + get => (double)GetValue(BlurAmountProperty); + set => SetValue(BlurAmountProperty, value); + } + + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty BlurAmountProperty = DependencyProperty.Register( + nameof(BlurAmount), + typeof(double), + typeof(AcrylicBrush), + new PropertyMetadata(0.0, OnBlurAmountPropertyChanged)); + + /// + /// Updates the UI when changes + /// + /// The current instance + /// The instance for + private static void OnBlurAmountPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is AcrylicBrush brush && + brush.CompositionBrush is CompositionBrush target) + { + brush.blurAmountSetter?.Invoke(target, (float)(double)e.NewValue); + } + } /// /// Gets or sets the tint for the effect /// - public Color Tint { get; set; } + public Color Tint + { + get => (Color)GetValue(TintProperty); + set => SetValue(TintProperty, value); + } + + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty TintProperty = DependencyProperty.Register( + nameof(Tint), + typeof(Color), + typeof(AcrylicBrush), + new PropertyMetadata(default(Color), OnTintPropertyChanged)); + + /// + /// Updates the UI when changes + /// + /// The current instance + /// The instance for + private static void OnTintPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is AcrylicBrush brush && + brush.CompositionBrush is CompositionBrush target) + { + brush.tintSetter?.Invoke(target, (Color)e.NewValue); + } + } /// /// Gets or sets the color for the tint effect /// public double TintMix { get; set; } + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty TintMixProperty = DependencyProperty.Register( + nameof(TintMix), + typeof(double), + typeof(AcrylicBrush), + new PropertyMetadata(0.0, OnTintMixPropertyChanged)); + + /// + /// Updates the UI when changes + /// + /// The current instance + /// The instance for + private static void OnTintMixPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is AcrylicBrush brush && + brush.CompositionBrush is CompositionBrush target) + { + brush.tintMixSetter?.Invoke(target, (float)(double)e.NewValue); + } + } + /// /// Gets or sets the to the texture to use /// - public Uri TextureUri { get; set; } + public Uri TextureUri + { + get => (Uri)GetValue(TextureUriProperty); + set => SetValue(TextureUriProperty, value); + } + + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty TextureUriProperty = DependencyProperty.Register( + nameof(TextureUri), + typeof(Uri), + typeof(AcrylicBrush), + new PropertyMetadata(default, OnTextureUriPropertyChanged)); + + /// + /// Updates the UI when changes + /// + /// The current instance + /// The instance for + private static void OnTextureUriPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is AcrylicBrush brush && + brush.CompositionBrush != null) + { + brush.OnDisconnected(); + brush.OnConnected(); + } + } /// protected override PipelineBuilder OnBrushRequested() { switch (this.Source) { - case AcrylicBackgroundSource.Backdrop: return PipelineBuilder.FromBackdropAcrylic(this.Tint, (float)this.TintMix, (float)this.BlurAmount, this.TextureUri); - case AcrylicBackgroundSource.HostBackdrop: return PipelineBuilder.FromHostBackdropAcrylic(this.Tint, (float)this.TintMix, this.TextureUri); + case AcrylicBackgroundSource.Backdrop: + return PipelineBuilder.FromBackdropAcrylic( + Tint, + out tintSetter, + (float)TintMix, + out tintMixSetter, + (float)BlurAmount, + out this.blurAmountSetter, + TextureUri); + case AcrylicBackgroundSource.HostBackdrop: + return PipelineBuilder.FromHostBackdropAcrylic( + Tint, + out tintSetter, + (float)TintMix, + out tintMixSetter, + TextureUri); default: throw new ArgumentOutOfRangeException(nameof(this.Source), $"Invalid acrylic source: {this.Source}"); } } From a1baa2f30710de7b2ab0d1c30e161b023ea67839 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:12:14 +0100 Subject: [PATCH 52/92] Code refactoring to keep the style consistent --- .../Brushes/BackdropGammaTransferBrush.cs | 237 ++++++++++-------- 1 file changed, 137 insertions(+), 100 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropGammaTransferBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropGammaTransferBrush.cs index 17cf761988f..d17acb9bf28 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropGammaTransferBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropGammaTransferBrush.cs @@ -14,279 +14,318 @@ namespace Microsoft.Toolkit.Uwp.UI.Media /// public class BackdropGammaTransferBrush : XamlCompositionBrushBase { - /// - /// Identifies the dependency property. - /// - public static readonly DependencyProperty AlphaAmplitudeProperty = - DependencyProperty.Register(nameof(AlphaAmplitude), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(AlphaAmplitude)))); - /// /// Gets or sets the amount of scale to apply to the alpha chennel. /// public double AlphaAmplitude { - get { return (double)GetValue(AlphaAmplitudeProperty); } - set { SetValue(AlphaAmplitudeProperty, value); } + get => (double)GetValue(AlphaAmplitudeProperty); + set => SetValue(AlphaAmplitudeProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty AlphaDisableProperty = - DependencyProperty.Register(nameof(AlphaDisable), typeof(bool), typeof(BackdropGammaTransferBrush), new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(AlphaDisable)))); + public static readonly DependencyProperty AlphaAmplitudeProperty = DependencyProperty.Register( + nameof(AlphaAmplitude), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(AlphaAmplitude)))); /// /// Gets or sets a value indicating whether to disable alpha transfer. /// public bool AlphaDisable { - get { return (bool)GetValue(AlphaDisableProperty); } - set { SetValue(AlphaDisableProperty, value); } + get => (bool)GetValue(AlphaDisableProperty); + set => SetValue(AlphaDisableProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty AlphaExponentProperty = - DependencyProperty.Register(nameof(AlphaExponent), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(AlphaExponent)))); + public static readonly DependencyProperty AlphaDisableProperty = DependencyProperty.Register( + nameof(AlphaDisable), + typeof(bool), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(AlphaDisable)))); /// /// Gets or sets the amount of scale to apply to the alpha chennel. /// public double AlphaExponent { - get { return (double)GetValue(AlphaExponentProperty); } - set { SetValue(AlphaExponentProperty, value); } + get => (double)GetValue(AlphaExponentProperty); + set => SetValue(AlphaExponentProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty AlphaOffsetProperty = - DependencyProperty.Register(nameof(AlphaOffset), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(AlphaOffset)))); + public static readonly DependencyProperty AlphaExponentProperty = DependencyProperty.Register( + nameof(AlphaExponent), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(AlphaExponent)))); /// /// Gets or sets the amount of scale to apply to the alpha chennel. /// public double AlphaOffset { - get { return (double)GetValue(AlphaOffsetProperty); } - set { SetValue(AlphaOffsetProperty, value); } + get => (double)GetValue(AlphaOffsetProperty); + set => SetValue(AlphaOffsetProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty BlueAmplitudeProperty = - DependencyProperty.Register(nameof(BlueAmplitude), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(BlueAmplitude)))); + public static readonly DependencyProperty AlphaOffsetProperty = DependencyProperty.Register( + nameof(AlphaOffset), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(AlphaOffset)))); /// /// Gets or sets the amount of scale to apply to the Blue chennel. /// public double BlueAmplitude { - get { return (double)GetValue(BlueAmplitudeProperty); } - set { SetValue(BlueAmplitudeProperty, value); } + get => (double)GetValue(BlueAmplitudeProperty); + set => SetValue(BlueAmplitudeProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty BlueDisableProperty = - DependencyProperty.Register(nameof(BlueDisable), typeof(bool), typeof(BackdropGammaTransferBrush), new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(BlueDisable)))); + public static readonly DependencyProperty BlueAmplitudeProperty = DependencyProperty.Register( + nameof(BlueAmplitude), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(BlueAmplitude)))); /// /// Gets or sets a value indicating whether to disable Blue transfer. /// public bool BlueDisable { - get { return (bool)GetValue(BlueDisableProperty); } - set { SetValue(BlueDisableProperty, value); } + get => (bool)GetValue(BlueDisableProperty); + set => SetValue(BlueDisableProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty BlueExponentProperty = - DependencyProperty.Register(nameof(BlueExponent), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(BlueExponent)))); + public static readonly DependencyProperty BlueDisableProperty = DependencyProperty.Register( + nameof(BlueDisable), + typeof(bool), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(BlueDisable)))); /// /// Gets or sets the amount of scale to apply to the Blue chennel. /// public double BlueExponent { - get { return (double)GetValue(BlueExponentProperty); } - set { SetValue(BlueExponentProperty, value); } + get => (double)GetValue(BlueExponentProperty); + set => SetValue(BlueExponentProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty BlueOffsetProperty = - DependencyProperty.Register(nameof(BlueOffset), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(BlueOffset)))); + public static readonly DependencyProperty BlueExponentProperty = DependencyProperty.Register( + nameof(BlueExponent), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(BlueExponent)))); /// /// Gets or sets the amount of scale to apply to the Blue chennel. /// public double BlueOffset { - get { return (double)GetValue(BlueOffsetProperty); } - set { SetValue(BlueOffsetProperty, value); } + get => (double)GetValue(BlueOffsetProperty); + set => SetValue(BlueOffsetProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty GreenAmplitudeProperty = - DependencyProperty.Register(nameof(GreenAmplitude), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(GreenAmplitude)))); + public static readonly DependencyProperty BlueOffsetProperty = DependencyProperty.Register( + nameof(BlueOffset), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(BlueOffset)))); /// /// Gets or sets the amount of scale to apply to the Green chennel. /// public double GreenAmplitude { - get { return (double)GetValue(GreenAmplitudeProperty); } - set { SetValue(GreenAmplitudeProperty, value); } + get => (double)GetValue(GreenAmplitudeProperty); + set => SetValue(GreenAmplitudeProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty GreenDisableProperty = - DependencyProperty.Register(nameof(GreenDisable), typeof(bool), typeof(BackdropGammaTransferBrush), new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(GreenDisable)))); + public static readonly DependencyProperty GreenAmplitudeProperty = DependencyProperty.Register( + nameof(GreenAmplitude), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(GreenAmplitude)))); /// /// Gets or sets a value indicating whether to disable Green transfer. /// public bool GreenDisable { - get { return (bool)GetValue(GreenDisableProperty); } - set { SetValue(GreenDisableProperty, value); } + get => (bool)GetValue(GreenDisableProperty); + set => SetValue(GreenDisableProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty GreenExponentProperty = - DependencyProperty.Register(nameof(GreenExponent), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(GreenExponent)))); + public static readonly DependencyProperty GreenDisableProperty = DependencyProperty.Register( + nameof(GreenDisable), + typeof(bool), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(GreenDisable)))); /// /// Gets or sets the amount of scale to apply to the Green chennel. /// public double GreenExponent { - get { return (double)GetValue(GreenExponentProperty); } - set { SetValue(GreenExponentProperty, value); } + get => (double)GetValue(GreenExponentProperty); + set => SetValue(GreenExponentProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty GreenOffsetProperty = - DependencyProperty.Register(nameof(GreenOffset), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(GreenOffset)))); + public static readonly DependencyProperty GreenExponentProperty = DependencyProperty.Register( + nameof(GreenExponent), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(GreenExponent)))); /// /// Gets or sets the amount of scale to apply to the Green chennel. /// public double GreenOffset { - get { return (double)GetValue(GreenOffsetProperty); } - set { SetValue(GreenOffsetProperty, value); } + get => (double)GetValue(GreenOffsetProperty); + set => SetValue(GreenOffsetProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty RedAmplitudeProperty = - DependencyProperty.Register(nameof(RedAmplitude), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(RedAmplitude)))); + public static readonly DependencyProperty GreenOffsetProperty = DependencyProperty.Register( + nameof(GreenOffset), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(GreenOffset)))); /// /// Gets or sets the amount of scale to apply to the Red chennel. /// public double RedAmplitude { - get { return (double)GetValue(RedAmplitudeProperty); } - set { SetValue(RedAmplitudeProperty, value); } + get => (double)GetValue(RedAmplitudeProperty); + set => SetValue(RedAmplitudeProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty RedDisableProperty = - DependencyProperty.Register(nameof(RedDisable), typeof(bool), typeof(BackdropGammaTransferBrush), new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(RedDisable)))); + public static readonly DependencyProperty RedAmplitudeProperty = DependencyProperty.Register( + nameof(RedAmplitude), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(RedAmplitude)))); /// /// Gets or sets a value indicating whether to disable Red transfer. /// public bool RedDisable { - get { return (bool)GetValue(RedDisableProperty); } - set { SetValue(RedDisableProperty, value); } + get => (bool)GetValue(RedDisableProperty); + set => SetValue(RedDisableProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty RedExponentProperty = - DependencyProperty.Register(nameof(RedExponent), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(RedExponent)))); + public static readonly DependencyProperty RedDisableProperty = DependencyProperty.Register( + nameof(RedDisable), + typeof(bool), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(false, OnBooleanPropertyChangedHelper(nameof(RedDisable)))); /// /// Gets or sets the amount of scale to apply to the Red chennel. /// public double RedExponent { - get { return (double)GetValue(RedExponentProperty); } - set { SetValue(RedExponentProperty, value); } + get => (double)GetValue(RedExponentProperty); + set => SetValue(RedExponentProperty, value); } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// - public static readonly DependencyProperty RedOffsetProperty = - DependencyProperty.Register(nameof(RedOffset), typeof(double), typeof(BackdropGammaTransferBrush), new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(RedOffset)))); + public static readonly DependencyProperty RedExponentProperty = DependencyProperty.Register( + nameof(RedExponent), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(1.0, OnScalarPropertyChangedHelper(nameof(RedExponent)))); /// /// Gets or sets the amount of scale to apply to the Red chennel. /// public double RedOffset { - get { return (double)GetValue(RedOffsetProperty); } - set { SetValue(RedOffsetProperty, value); } + get => (double)GetValue(RedOffsetProperty); + set => SetValue(RedOffsetProperty, value); } + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty RedOffsetProperty = DependencyProperty.Register( + nameof(RedOffset), + typeof(double), + typeof(BackdropGammaTransferBrush), + new PropertyMetadata(0.0, OnScalarPropertyChangedHelper(nameof(RedOffset)))); + private static PropertyChangedCallback OnScalarPropertyChangedHelper(string propertyname) { - return new PropertyChangedCallback((d, e) => + return (d, e) => { var brush = (BackdropGammaTransferBrush)d; // Unbox and set a new blur amount if the CompositionBrush exists. brush.CompositionBrush?.Properties.InsertScalar("GammaTransfer." + propertyname, (float)(double)e.NewValue); - }); + }; } private static PropertyChangedCallback OnBooleanPropertyChangedHelper(string propertyname) { - return new PropertyChangedCallback((d, e) => + return (d, e) => { var brush = (BackdropGammaTransferBrush)d; // We can't animate our boolean properties so recreate our internal brush. brush.OnDisconnected(); brush.OnConnected(); - }); + }; } - /// - /// Initializes a new instance of the class. - /// - public BackdropGammaTransferBrush() - { - } - - /// - /// Initializes the Composition Brush. - /// + /// protected override void OnConnected() { // Delay creating composition resources until they're required. @@ -346,9 +385,7 @@ protected override void OnConnected() } } - /// - /// Deconstructs the Composition Brush. - /// + /// protected override void OnDisconnected() { // Dispose of composition resources when no longer in use. From 9173a6397ebd1398d8e0a60050a7c0b7a5304da0 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:16:20 +0100 Subject: [PATCH 53/92] Added support for noiseless acrylic effects --- .../Pipelines/PipelineBuilder.Prebuilt.cs | 72 ++++++++++++++----- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index 5a1ef272f70..70622300311 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -29,13 +29,19 @@ public static PipelineBuilder FromHostBackdropAcrylic( Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { - return + var pipeline = FromHostBackdrop() .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Tint(tint, mix) - .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + .Tint(tint, mix); + + if (noiseUri != null) + { + return pipeline.Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + return pipeline; } /// @@ -57,13 +63,19 @@ public static PipelineBuilder FromHostBackdropAcrylic( Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { - return + var pipeline = FromHostBackdrop() .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Tint(tint, out tintSetter, mix, out mixSetter) - .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + .Tint(tint, out tintSetter, mix, out mixSetter); + + if (noiseUri != null) + { + return pipeline.Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + return pipeline; } /// @@ -85,13 +97,19 @@ public static PipelineBuilder FromHostBackdropAcrylic( Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { - return + var pipeline = FromHostBackdrop() .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Tint(tint, out tintAnimation, mix, out mixAnimation) - .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + .Tint(tint, out tintAnimation, mix, out mixAnimation); + + if (noiseUri != null) + { + return pipeline.Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + return pipeline; } /// @@ -111,11 +129,17 @@ public static PipelineBuilder FromBackdropAcrylic( Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { - return + var pipeline = FromBackdrop() .Tint(tint, mix) - .Blur(blur) - .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + .Blur(blur); + + if (noiseUri != null) + { + return pipeline.Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + return pipeline; } /// @@ -141,11 +165,17 @@ public static PipelineBuilder FromBackdropAcrylic( Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { - return + var pipeline = FromBackdrop() .Tint(tint, out tintSetter, mix, out mixSetter) - .Blur(blur, out blurSetter) - .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + .Blur(blur, out blurSetter); + + if (noiseUri != null) + { + return pipeline.Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + return pipeline; } /// @@ -171,11 +201,17 @@ public static PipelineBuilder FromBackdropAcrylic( Uri noiseUri, CacheMode cacheMode = CacheMode.Default) { - return + var pipeline = FromBackdrop() .Tint(tint, out tintAnimation, mix, out mixAnimation) - .Blur(blur, out blurAnimation) - .Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + .Blur(blur, out blurAnimation); + + if (noiseUri != null) + { + return pipeline.Blend(FromTiles(noiseUri, cacheMode: cacheMode), BlendEffectMode.Overlay, Placement.Background); + } + + return pipeline; } } } From c053590c4bc4bb6f1a8d5f1bb140cc83b3f3c7e0 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:28:42 +0100 Subject: [PATCH 54/92] Code refactoring --- .../Pipelines/PipelineBuilder.Effects.cs | 180 ----------------- .../Pipelines/PipelineBuilder.Merge.cs | 188 ++++++++++++++++++ 2 files changed, 188 insertions(+), 180 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 978840f5ccc..1f504ac85f2 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -20,186 +20,6 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines /// public sealed partial class PipelineBuilder { - /// - /// Blends two pipelines using a instance with the specified mode - /// - /// The second instance to blend - /// The desired to use to blend the input pipelines - /// The placemeht to use with the two input pipelines - /// A new instance to use to keep adding new effects - [Pure] - public PipelineBuilder Blend(PipelineBuilder pipeline, BlendEffectMode mode, Placement placement = Placement.Foreground) - { - PipelineBuilder foreground, background; - if (placement == Placement.Foreground) - { - foreground = this; - background = pipeline; - } - else - { - foreground = pipeline; - background = this; - } - - async ValueTask Factory() => new BlendEffect - { - Foreground = await foreground.sourceProducer(), - Background = await background.sourceProducer(), - Mode = mode - }; - - return new PipelineBuilder(Factory, foreground, background); - } - - /// - /// Cross fades two pipelines using an instance - /// - /// The second instance to cross fade - /// The cross fade factor to blend the input effects - /// The placement to use with the two input pipelines - /// A new instance to use to keep adding new effects - [Pure] - public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, Placement placement = Placement.Foreground) - { - PipelineBuilder foreground, background; - if (placement == Placement.Foreground) - { - foreground = this; - background = pipeline; - } - else - { - foreground = pipeline; - background = this; - } - - async ValueTask Factory() => new CrossFadeEffect - { - CrossFade = factor, - Source1 = await foreground.sourceProducer(), - Source2 = await background.sourceProducer() - }; - - return new PipelineBuilder(Factory, foreground, background); - } - - /// - /// Cross fades two pipelines using an instance - /// - /// The second instance to cross fade - /// The cross fade factor to blend the input effects - /// The optional blur setter for the effect - /// The placement to use with the two input pipelines - /// A new instance to use to keep adding new effects - [Pure] - public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectSetter setter, Placement placement = Placement.Foreground) - { - PipelineBuilder foreground, background; - if (placement == Placement.Foreground) - { - foreground = this; - background = pipeline; - } - else - { - foreground = pipeline; - background = this; - } - - string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - - async ValueTask Factory() => new CrossFadeEffect - { - CrossFade = factor, - Source1 = await foreground.sourceProducer(), - Source2 = await background.sourceProducer(), - Name = id - }; - - setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(CrossFadeEffect.CrossFade)}", value); - - return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.{nameof(CrossFadeEffect.CrossFade)}" }); - } - - /// - /// Cross fades two pipelines using an instance - /// - /// The second instance to cross fade - /// The cross fade factor to blend the input effects - /// The optional blur animation for the effect - /// The placement to use with the two input pipelines - /// A new instance to use to keep adding new effects - [Pure] - public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) - { - PipelineBuilder foreground, background; - if (placement == Placement.Foreground) - { - foreground = this; - background = pipeline; - } - else - { - foreground = pipeline; - background = this; - } - - string id = Guid.NewGuid().ToUppercaseAsciiLetters(); - - async ValueTask Factory() => new CrossFadeEffect - { - CrossFade = factor, - Source1 = await foreground.sourceProducer(), - Source2 = await background.sourceProducer(), - Name = id - }; - - animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(CrossFadeEffect.CrossFade)}", value, duration); - - return new PipelineBuilder(Factory, foreground, background, new[] { $"{id}.{nameof(CrossFadeEffect.CrossFade)}" }); - } - - /// - /// Blends two pipelines using the provided to do so - /// - /// The blend function to use - /// The background pipeline to blend with the current instance - /// The list of optional animatable properties in the returned effect - /// The list of source parameters that require deferred initialization (see for more info) - /// A new instance to use to keep adding new effects - [Pure] - public PipelineBuilder Merge( - Func factory, - PipelineBuilder background, - IEnumerable animations = null, - IEnumerable initializers = null) - { - async ValueTask Factory() => factory(await this.sourceProducer(), await background.sourceProducer()); - - return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); - } - - /// - /// Blends two pipelines using the provided asynchronous to do so - /// - /// The asynchronous blend function to use - /// The background pipeline to blend with the current instance - /// The list of optional animatable properties in the returned effect - /// The list of source parameters that require deferred initialization (see for more info) - /// A new instance to use to keep adding new effects - [Pure] - public PipelineBuilder Merge( - Func> factory, - PipelineBuilder background, - IEnumerable animations = null, - IEnumerable initializers = null) - { - async ValueTask Factory() => await factory(await this.sourceProducer(), await background.sourceProducer()); - - return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); - } - /// /// Adds a new to the current pipeline /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs new file mode 100644 index 00000000000..a9dcb621367 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Merge.cs @@ -0,0 +1,188 @@ +// 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 System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Graphics.Canvas.Effects; +using Microsoft.Toolkit.Uwp.UI.Media.Extensions; +using Windows.Graphics.Effects; +using Windows.UI.Composition; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Pipelines +{ + /// + /// A that allows to build custom effects pipelines and create instances from them + /// + public sealed partial class PipelineBuilder + { + /// + /// Gets the aligned pipelines to merge for a given operation + /// + /// The left pipeline to merge + /// The right pipeline to merge + /// The placemeht to use with the two input pipelines + /// A instance with the aligned pipelines + [Pure] + [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1008", Justification = "ValueTuple return type")] + private static (PipelineBuilder Foreground, PipelineBuilder Background) GetMergePipeline( + PipelineBuilder left, + PipelineBuilder right, + Placement placement) + { + switch (placement) + { + case Placement.Foreground: + return (left, right); + case Placement.Background: + return (right, left); + default: + throw new ArgumentException($"Invalid placement value: {placement}"); + } + } + + /// + /// Blends two pipelines using a instance with the specified mode + /// + /// The second instance to blend + /// The desired to use to blend the input pipelines + /// The placemeht to use with the two input pipelines + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Blend(PipelineBuilder pipeline, BlendEffectMode mode, Placement placement = Placement.Foreground) + { + var pipelines = GetMergePipeline(this, pipeline, placement); + + async ValueTask Factory() => new BlendEffect + { + Foreground = await pipelines.Foreground.sourceProducer(), + Background = await pipelines.Background.sourceProducer(), + Mode = mode + }; + + return new PipelineBuilder(Factory, pipelines.Foreground, pipelines.Background); + } + + /// + /// Cross fades two pipelines using an instance + /// + /// The second instance to cross fade + /// The cross fade factor to blend the input effects + /// The placement to use with the two input pipelines + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor = 0.5f, Placement placement = Placement.Foreground) + { + var pipelines = GetMergePipeline(this, pipeline, placement); + + async ValueTask Factory() => new CrossFadeEffect + { + CrossFade = factor, + Source1 = await pipelines.Foreground.sourceProducer(), + Source2 = await pipelines.Background.sourceProducer() + }; + + return new PipelineBuilder(Factory, pipelines.Foreground, pipelines.Background); + } + + /// + /// Cross fades two pipelines using an instance + /// + /// The second instance to cross fade + /// The cross fade factor to blend the input effects + /// The optional blur setter for the effect + /// The placement to use with the two input pipelines + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectSetter setter, Placement placement = Placement.Foreground) + { + var pipelines = GetMergePipeline(this, pipeline, placement); + + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new CrossFadeEffect + { + CrossFade = factor, + Source1 = await pipelines.Foreground.sourceProducer(), + Source2 = await pipelines.Background.sourceProducer(), + Name = id + }; + + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(CrossFadeEffect.CrossFade)}", value); + + return new PipelineBuilder(Factory, pipelines.Foreground, pipelines.Background, new[] { $"{id}.{nameof(CrossFadeEffect.CrossFade)}" }); + } + + /// + /// Cross fades two pipelines using an instance + /// + /// The second instance to cross fade + /// The cross fade factor to blend the input effects + /// The optional blur animation for the effect + /// The placement to use with the two input pipelines + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder CrossFade(PipelineBuilder pipeline, float factor, out EffectAnimation animation, Placement placement = Placement.Foreground) + { + var pipelines = GetMergePipeline(this, pipeline, placement); + + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new CrossFadeEffect + { + CrossFade = factor, + Source1 = await pipelines.Foreground.sourceProducer(), + Source2 = await pipelines.Background.sourceProducer(), + Name = id + }; + + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(CrossFadeEffect.CrossFade)}", value, duration); + + return new PipelineBuilder(Factory, pipelines.Foreground, pipelines.Background, new[] { $"{id}.{nameof(CrossFadeEffect.CrossFade)}" }); + } + + /// + /// Blends two pipelines using the provided to do so + /// + /// The blend function to use + /// The background pipeline to blend with the current instance + /// The list of optional animatable properties in the returned effect + /// The list of source parameters that require deferred initialization (see for more info) + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Merge( + Func factory, + PipelineBuilder background, + IEnumerable animations = null, + IEnumerable initializers = null) + { + async ValueTask Factory() => factory(await this.sourceProducer(), await background.sourceProducer()); + + return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); + } + + /// + /// Blends two pipelines using the provided asynchronous to do so + /// + /// The asynchronous blend function to use + /// The background pipeline to blend with the current instance + /// The list of optional animatable properties in the returned effect + /// The list of source parameters that require deferred initialization (see for more info) + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Merge( + Func> factory, + PipelineBuilder background, + IEnumerable animations = null, + IEnumerable initializers = null) + { + async ValueTask Factory() => await factory(await this.sourceProducer(), await background.sourceProducer()); + + return new PipelineBuilder(Factory, this, background, animations?.ToArray(), initializers?.ToDictionary(item => item.Name, item => item.Initializer)); + } + } +} From 2283071f5c197422e3c41e3c20d7859c1bae3e1b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:36:08 +0100 Subject: [PATCH 55/92] Added XML remarks with Win2D reference links --- Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs | 3 ++- .../Effects/LuminanceToAlphaEffect.cs | 3 ++- Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs | 3 ++- Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs | 1 + Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs | 1 + 13 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs index 715a839070e..13c6208518d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/AcrylicEffect.cs @@ -12,6 +12,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 { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 511e9eb54f2..7c19214ed40 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs @@ -11,6 +11,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A blend effect that merges the current pipeline with an input one /// + /// This effect maps to the Win2D effect public sealed class BlendEffect : IPipelineEffect { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs index 1814d3200be..3164f245e88 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlurEffect.cs @@ -9,6 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A gaussian blur effect /// + /// This effect maps to the Win2D effect public sealed class BlurEffect : ValueEffectBase { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs index 7a93a9f1a79..e038c63cd4c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ExposureEffect.cs @@ -9,6 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// An exposure effect /// + /// This effect maps to the Win2D effect public sealed class ExposureEffect : ValueEffectBase { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs index c88ec3f0862..2b1a246b6e5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/GrayscaleEffect.cs @@ -9,6 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A grayscale effect /// + /// This effect maps to the Win2D effect public sealed class GrayscaleEffect : IPipelineEffect { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs index 9eff91641f7..b5f5565c79f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/InvertEffect.cs @@ -7,8 +7,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// A luminance effect which directly replicates + /// An color inversion effect /// + /// This effect maps to the Win2D effect public sealed class InvertEffect : IPipelineEffect { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs index 8948ea46051..82f3547e816 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/LuminanceToAlphaEffect.cs @@ -7,8 +7,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// A luminance effect which directly replicates + /// A luminance to alpha effect /// + /// This effect maps to the Win2D effect public sealed class LuminanceToAlphaEffect : IPipelineEffect { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs index 95aabcbb97b..7b86916f90d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/OpacityEffect.cs @@ -7,8 +7,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// A simple opacity effect + /// An opacity effect /// + /// This effect maps to the Win2D effect public sealed class OpacityEffect : ValueEffectBase { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs index 139f40eb129..9b30e0a4041 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SaturationEffect.cs @@ -9,6 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A saturation effect /// + /// This effect maps to the Win2D effect public sealed class SaturationEffect : ValueEffectBase { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs index 95931cb848d..baf9e816d25 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SepiaEffect.cs @@ -9,6 +9,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A sepia effect /// + /// This effect maps to the Win2D effect public sealed class SepiaEffect : ValueEffectBase { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs index b5723f2f14f..b0f90ae2989 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/SolidColorEffect.cs @@ -8,7 +8,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// A simple effect that renders a solid color on the available surface + /// An effect that renders a standard 8bit SDR color on the available surface /// public sealed class SolidColorEffect : IPipelineEffect { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs index 115b7cc7a3a..b2a340b5dc2 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TileEffect.cs @@ -9,6 +9,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 { } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs index f9ee1b5f459..b9ab217ee30 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -10,6 +10,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects /// /// A tint effect with a customizable opacity /// + /// This effect maps to the Win2D effect public sealed class TintEffect : IPipelineEffect { /// From 667b932143386c8032db9c10310a6adc4dfc7c37 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:42:20 +0100 Subject: [PATCH 56/92] Renamed the TintEffect type --- .../PipelineBrush/PipelineBrushCode.bind | 2 +- .../PipelineBrush/PipelineBrushXaml.bind | 2 +- .../Brushes/PipelineBrush.cs | 5 ++- .../Effects/{TintEffect.cs => ShadeEffect.cs} | 11 +++---- .../Pipelines/PipelineBuilder.Effects.cs | 32 +++++++++---------- .../Pipelines/PipelineBuilder.Prebuilt.cs | 12 +++---- 6 files changed, 31 insertions(+), 33 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Effects/{TintEffect.cs => ShadeEffect.cs} (58%) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind index 6514342d0c4..ff7333d3018 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind @@ -12,7 +12,7 @@ Brush brush = PipelineBuilder.FromBackdrop(), BlendEffectMode.Multiply) .Blur(16) - .Tint("#FF222222".ToColor(), 0.4f) + .Shade("#FF222222".ToColor(), 0.4f) .Blend( PipelineBuilder.FromTiles("/Assets/BrushAssets/NoiseTexture.png"), BlendEffectMode.Overlay, diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 6eb1c790259..25501b17162 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -31,7 +31,7 @@ - + diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index b38691f7108..bd068e9ae03 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -16,7 +16,6 @@ using OpacityEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.OpacityEffect; using SaturationEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.SaturationEffect; using TileEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TileEffect; -using TintEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TintEffect; namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes { @@ -92,8 +91,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu return builder.Exposure((float)exposure.Value); case SepiaEffect sepia: return builder.Sepia((float)sepia.Value); - case TintEffect tint: - return builder.Tint(tint.Color, (float)tint.Opacity); + case ShadeEffect tint: + return builder.Shade(tint.Color, (float)tint.Intensity); case BlurEffect blur: return builder.Blur((float)blur.Value); case SaturationEffect saturation: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs similarity index 58% rename from Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs index b9ab217ee30..b2659b27719 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/ShadeEffect.cs @@ -8,19 +8,18 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Effects { /// - /// A tint effect with a customizable opacity + /// An effect that overlays a color layer over the current pipeline, with a specified intensity /// - /// This effect maps to the Win2D effect - public sealed class TintEffect : IPipelineEffect + public sealed class ShadeEffect : IPipelineEffect { /// - /// Gets or sets the tint color to use + /// Gets or sets the color to use /// public Color Color { get; set; } /// - /// Gets or sets the opacity of the tint effect + /// Gets or sets the intensity of the color layer /// - public double Opacity { get; set; } + public double Intensity { get; set; } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 1f504ac85f2..d159c2d834b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -348,41 +348,41 @@ public PipelineBuilder Exposure(float amount, out EffectAnimation animati } /// - /// Applies a tint color on the current pipeline + /// Applies a shade effect on the current pipeline /// - /// The tint color to use - /// The amount of tint to apply over the current effect + /// The color to use + /// The amount of mix to apply over the current effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Tint(Color color, float mix) + public PipelineBuilder Shade(Color color, float mix) { return FromColor(color).CrossFade(this, mix); } /// - /// Applies a tint color on the current pipeline + /// Applies a shade effect on the current pipeline /// - /// The tint color to use - /// The optional tint color setter for the effect - /// The initial amount of tint to apply over the current effect - /// The optional tint mix setter for the effect + /// The color to use + /// The optional color setter for the effect + /// The initial amount of mix to apply over the current effect + /// The optional mix setter for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Tint(Color color, out EffectSetter colorSetter, float mix, out EffectSetter mixSetter) + public PipelineBuilder Shade(Color color, out EffectSetter colorSetter, float mix, out EffectSetter mixSetter) { return FromColor(color, out colorSetter).CrossFade(this, mix, out mixSetter); } /// - /// Applies a tint color on the current pipeline + /// Applies a shade effect on the current pipeline /// - /// The tint color to use - /// The optional tint color animation for the effect - /// The initial amount of tint to apply over the current effect - /// The optional tint mix animation for the effect + /// The color to use + /// The optional color animation for the effect + /// The initial amount of mix to apply over the current effect + /// The optional mix animation for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Tint(Color color, out EffectAnimation colorAnimation, float mix, out EffectAnimation mixAnimation) + public PipelineBuilder Shade(Color color, out EffectAnimation colorAnimation, float mix, out EffectAnimation mixAnimation) { return FromColor(color, out colorAnimation).CrossFade(this, mix, out mixAnimation); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs index 70622300311..c5782b19ff5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Prebuilt.cs @@ -34,7 +34,7 @@ public static PipelineBuilder FromHostBackdropAcrylic( .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Tint(tint, mix); + .Shade(tint, mix); if (noiseUri != null) { @@ -68,7 +68,7 @@ public static PipelineBuilder FromHostBackdropAcrylic( .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Tint(tint, out tintSetter, mix, out mixSetter); + .Shade(tint, out tintSetter, mix, out mixSetter); if (noiseUri != null) { @@ -102,7 +102,7 @@ public static PipelineBuilder FromHostBackdropAcrylic( .LuminanceToAlpha() .Opacity(0.4f) .Blend(FromHostBackdrop(), BlendEffectMode.Multiply) - .Tint(tint, out tintAnimation, mix, out mixAnimation); + .Shade(tint, out tintAnimation, mix, out mixAnimation); if (noiseUri != null) { @@ -131,7 +131,7 @@ public static PipelineBuilder FromBackdropAcrylic( { var pipeline = FromBackdrop() - .Tint(tint, mix) + .Shade(tint, mix) .Blur(blur); if (noiseUri != null) @@ -167,7 +167,7 @@ public static PipelineBuilder FromBackdropAcrylic( { var pipeline = FromBackdrop() - .Tint(tint, out tintSetter, mix, out mixSetter) + .Shade(tint, out tintSetter, mix, out mixSetter) .Blur(blur, out blurSetter); if (noiseUri != null) @@ -203,7 +203,7 @@ public static PipelineBuilder FromBackdropAcrylic( { var pipeline = FromBackdrop() - .Tint(tint, out tintAnimation, mix, out mixAnimation) + .Shade(tint, out tintAnimation, mix, out mixAnimation) .Blur(blur, out blurAnimation); if (noiseUri != null) From abb0b5bd10e558ea6ec0b8085f9c8f6196023220 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:48:50 +0100 Subject: [PATCH 57/92] Added TintEffect --- .../Brushes/PipelineBrush.cs | 6 +- .../Effects/TintEffect.cs | 21 +++++++ .../Pipelines/PipelineBuilder.Effects.cs | 63 +++++++++++++++++++ 3 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index bd068e9ae03..cf123ab19eb 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -91,8 +91,10 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu return builder.Exposure((float)exposure.Value); case SepiaEffect sepia: return builder.Sepia((float)sepia.Value); - case ShadeEffect tint: - return builder.Shade(tint.Color, (float)tint.Intensity); + case ShadeEffect shade: + return builder.Shade(shade.Color, (float)shade.Intensity); + case TintEffect tint: + return builder.Tint(tint.Color); case BlurEffect blur: return builder.Blur((float)blur.Value); case SaturationEffect saturation: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs new file mode 100644 index 00000000000..bc248f82890 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TintEffect.cs @@ -0,0 +1,21 @@ +// 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.Effects.Interfaces; +using Windows.UI; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A tint effect + /// + /// This effect maps to the Win2D effect + public sealed class TintEffect : IPipelineEffect + { + /// + /// Gets or sets the int color to use + /// + public Color Color { get; set; } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index d159c2d834b..c997443ea14 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -347,6 +347,69 @@ public PipelineBuilder Exposure(float amount, out EffectAnimation animati return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(ExposureEffect.Exposure)}" }); } + /// + /// Applies a tint effect on the current pipeline + /// + /// The color to use + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Tint(Color color) + { + async ValueTask Factory() => new TintEffect + { + Color = color, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Applies a tint effect on the current pipeline + /// + /// The color to use + /// The optional color setter for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Tint(Color color, out EffectSetter setter) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new TintEffect + { + Color = color, + Source = await this.sourceProducer(), + Name = id + }; + + setter = (brush, value) => brush.Properties.InsertColor($"{id}.{nameof(TintEffect.Color)}", value); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(TintEffect.Color)}" }); + } + + /// + /// Applies a tint effect on the current pipeline + /// + /// The color to use + /// The optional color animation for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder Tint(Color color, out EffectAnimation animation) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new TintEffect + { + Color = color, + Source = await this.sourceProducer(), + Name = id + }; + + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(TintEffect.Color)}", value, duration); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(TintEffect.Color)}" }); + } + /// /// Applies a shade effect on the current pipeline /// From 295f4eeed6806276d0c9c87978893c279c70de3c Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 00:59:09 +0100 Subject: [PATCH 58/92] Added TemperatureAndTintEffect --- .../Brushes/PipelineBrush.cs | 2 + .../Effects/TemperatureAndTintEffect.cs | 25 ++++++ .../Pipelines/PipelineBuilder.Effects.cs | 83 +++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index cf123ab19eb..2c1a65aa482 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -95,6 +95,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu return builder.Shade(shade.Color, (float)shade.Intensity); 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: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs new file mode 100644 index 00000000000..058e1019e70 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/TemperatureAndTintEffect.cs @@ -0,0 +1,25 @@ +// 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.Effects.Abstract; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A temperature and tint effect + /// + /// This effect maps to the Win2D effect + public sealed class TemperatureAndTintEffect : ValueEffectBase + { + /// + /// Gets or sets the value of the temperature for the current effect + /// + public double Temperature { get; set; } + + /// + /// Gets or sets the value of the tint for the current effect + /// + public double Tint { get; set; } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index c997443ea14..0c6a578f00d 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -410,6 +410,89 @@ public PipelineBuilder Tint(Color color, out EffectAnimation animation) return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(TintEffect.Color)}" }); } + /// + /// Applies a temperature and tint effect on the current pipeline + /// + /// The temperature value to use + /// The tint value to use + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder TemperatureAndTint(float temperature, float tint) + { + async ValueTask Factory() => new TemperatureAndTintEffect + { + Temperature = temperature, + Tint = tint, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Applies a temperature and tint effect on the current pipeline + /// + /// The temperature value to use + /// The optional temperature setter for the effect + /// The tint value to use + /// The optional tint setter for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder TemperatureAndTint( + float temperature, + out EffectSetter temperatureSetter, + float tint, + out EffectSetter tintSetter) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new TemperatureAndTintEffect + { + Temperature = temperature, + Tint = tint, + Source = await this.sourceProducer(), + Name = id + }; + + temperatureSetter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(TemperatureAndTintEffect.Temperature)}", value); + + tintSetter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(TemperatureAndTintEffect.Tint)}", value); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(TemperatureAndTintEffect.Temperature)}", $"{id}.{nameof(TemperatureAndTintEffect.Tint)}" }); + } + + /// + /// Applies a temperature and tint effect on the current pipeline + /// + /// The temperature value to use + /// The optional temperature animation for the effect + /// The tint value to use + /// The optional tint animation for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder TemperatureAndTint( + float temperature, + out EffectAnimation temperatureAnimation, + float tint, + out EffectAnimation tintAnimation) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new TemperatureAndTintEffect + { + Temperature = temperature, + Tint = tint, + Source = await this.sourceProducer(), + Name = id + }; + + temperatureAnimation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(TemperatureAndTintEffect.Temperature)}", value, duration); + + tintAnimation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(TemperatureAndTintEffect.Tint)}", value, duration); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(TemperatureAndTintEffect.Temperature)}", $"{id}.{nameof(TemperatureAndTintEffect.Tint)}" }); + } + /// /// Applies a shade effect on the current pipeline /// From 92a60dbad4e4438072b9bdbe1da90f83c6da1abf Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 01:04:07 +0100 Subject: [PATCH 59/92] Added HueRotationEffect --- .../Brushes/PipelineBrush.cs | 2 + .../Effects/HueRotationEffect.cs | 20 +++++ .../Pipelines/PipelineBuilder.Effects.cs | 75 ++++++++++++++++++- 3 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 2c1a65aa482..4c05e42a086 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -93,6 +93,8 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu 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: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.cs new file mode 100644 index 00000000000..ed90a0b87b8 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/HueRotationEffect.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.Effects.Interfaces; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Effects +{ + /// + /// A hue rotation effect + /// + /// This effect maps to the Win2D effect + public sealed class HueRotationEffect : IPipelineEffect + { + /// + /// Gets or sets the angle to rotate the hue, in radians + /// + public double Angle { get; set; } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs index 0c6a578f00d..4011fb7d691 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Effects.cs @@ -347,6 +347,69 @@ public PipelineBuilder Exposure(float amount, out EffectAnimation animati return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(ExposureEffect.Exposure)}" }); } + /// + /// Applies a hue rotation effect on the current pipeline + /// + /// The angle to rotate the hue, in radians + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder HueRotation(float angle) + { + async ValueTask Factory() => new HueRotationEffect + { + Angle = angle, + Source = await this.sourceProducer() + }; + + return new PipelineBuilder(this, Factory); + } + + /// + /// Applies a hue rotation effect on the current pipeline + /// + /// The angle to rotate the hue, in radians + /// The optional rotation angle setter for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder HueRotation(float angle, out EffectSetter setter) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new HueRotationEffect + { + Angle = angle, + Source = await this.sourceProducer(), + Name = id + }; + + setter = (brush, value) => brush.Properties.InsertScalar($"{id}.{nameof(HueRotationEffect.Angle)}", value); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(HueRotationEffect.Angle)}" }); + } + + /// + /// Applies a hue rotation effect on the current pipeline + /// + /// The angle to rotate the hue, in radians + /// The optional rotation angle animation for the effect + /// A new instance to use to keep adding new effects + [Pure] + public PipelineBuilder HueRotation(float angle, out EffectAnimation animation) + { + string id = Guid.NewGuid().ToUppercaseAsciiLetters(); + + async ValueTask Factory() => new HueRotationEffect + { + Angle = angle, + Source = await this.sourceProducer(), + Name = id + }; + + animation = (brush, value, duration) => brush.StartAnimationAsync($"{id}.{nameof(HueRotationEffect.Angle)}", value, duration); + + return new PipelineBuilder(this, Factory, new[] { $"{id}.{nameof(HueRotationEffect.Angle)}" }); + } + /// /// Applies a tint effect on the current pipeline /// @@ -514,7 +577,11 @@ public PipelineBuilder Shade(Color color, float mix) /// The optional mix setter for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Shade(Color color, out EffectSetter colorSetter, float mix, out EffectSetter mixSetter) + public PipelineBuilder Shade( + Color color, + out EffectSetter colorSetter, + float mix, + out EffectSetter mixSetter) { return FromColor(color, out colorSetter).CrossFade(this, mix, out mixSetter); } @@ -528,7 +595,11 @@ public PipelineBuilder Shade(Color color, out EffectSetter colorSetter, f /// The optional mix animation for the effect /// A new instance to use to keep adding new effects [Pure] - public PipelineBuilder Shade(Color color, out EffectAnimation colorAnimation, float mix, out EffectAnimation mixAnimation) + public PipelineBuilder Shade( + Color color, + out EffectAnimation colorAnimation, + float mix, + out EffectAnimation mixAnimation) { return FromColor(color, out colorAnimation).CrossFade(this, mix, out mixAnimation); } From 02158fb47481f14b4693f8886f46b0f2831ddb95 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 01:08:18 +0100 Subject: [PATCH 60/92] Aadded missing capability check --- .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index f1a059675b7..4b2f95d7bc1 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs @@ -96,6 +96,12 @@ protected async void OnEnabledToggled(bool value) if (this.CompositionBrush != null) { + // Abort if effects aren't supported + if (!CompositionCapabilities.GetForCurrentView().AreEffectsSupported()) + { + return; + } + if (this._isEnabled) { this.CompositionBrush = await this.OnBrushRequested().BuildAsync(); From e86b0f782d25f12cb945d56cadecdc9d000f0847 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 14:45:50 +0100 Subject: [PATCH 61/92] Removed unnecessary APIs, code refactoring --- .../Helpers/Win2DImageHelper.cs | 270 +++++------------- .../PipelineBuilder.Initialization.cs | 2 +- 2 files changed, 67 insertions(+), 205 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs index fbec05a9f2f..2e6072282b0 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs @@ -4,12 +4,9 @@ using System; using System.Numerics; -using System.Runtime.InteropServices; using System.Threading.Tasks; using Microsoft.Graphics.Canvas; -using Microsoft.Graphics.Canvas.UI; using Microsoft.Graphics.Canvas.UI.Composition; -using Microsoft.Graphics.Canvas.UI.Xaml; using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Microsoft.Toolkit.Uwp.UI.Media.Helpers.Cache; using Windows.Foundation; @@ -27,11 +24,6 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers /// public static class Win2DImageHelper { - /// - /// Gets the maximum time to wait for the Win2D device to be restored in case of initial failure - /// - private const int DeviceLostRecoveryThreshold = 1000; - /// /// Synchronization mutex to access the cache and load Win2D images concurrently /// @@ -47,162 +39,17 @@ public static class Win2DImageHelper /// /// 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 Task LoadImageAsync(Uri uri, DpiMode dpiMode, CacheMode cache = CacheMode.Default) - { - return LoadImageAsync(Window.Current.Compositor, uri, dpiMode, cache); - } - - /// - /// Loads a instance with the target image - /// - /// The to use to load the target image - /// 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 Task LoadImageAsync(this CanvasControl canvas, Uri uri, DpiMode dpiMode, CacheMode cacheMode = CacheMode.Default) + public static async Task LoadImageAsync(Uri uri, DpiMode dpiMode, CacheMode cacheMode = CacheMode.Default) { - return LoadImageAsync(Window.Current.Compositor, canvas, uri, dpiMode, cacheMode); - } - - /// - /// Loads a from the input , and prepares it to be used in a tile effect - /// - /// The resource creator to use to load the image bitmap (it can be the same used later) - /// The compositor instance to use to create the final brush - /// The device to use to process the Win2D image - /// 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( - ICanvasResourceCreator creator, - Compositor compositor, - CanvasDevice canvasDevice, - Uri uri, - DpiMode dpiMode) - { - var displayInformation = DisplayInformation.GetForCurrentView(); - float dpi = displayInformation.LogicalDpi; - - // Explicit try/finally block to emulate the using block from C# 8 on switch assignment - CanvasBitmap bitmap = null; - try - { - // Load the bitmap with the appropriate settings - switch (dpiMode) - { - case DpiMode.UseSourceDpi: bitmap = await CanvasBitmap.LoadAsync(creator, uri); break; - case DpiMode.Default96Dpi: bitmap = await CanvasBitmap.LoadAsync(creator, uri, 96); break; - case DpiMode.DisplayDpi: bitmap = await CanvasBitmap.LoadAsync(creator, uri, dpi); break; - case DpiMode.DisplayDpiWith96AsLowerBound: bitmap = await CanvasBitmap.LoadAsync(creator, uri, dpi >= 96 ? dpi : 96); break; - default: throw new ArgumentOutOfRangeException(nameof(dpiMode), dpiMode, $"Invalid DPI mode: {dpiMode}"); - } - - // Get the device and the target surface - var device = CanvasComposition.CreateCompositionGraphicsDevice(compositor, canvasDevice); - var surface = device.CreateDrawingSurface(default, DirectXPixelFormat.B8G8R8A8UIntNormalized, DirectXAlphaMode.Premultiplied); - - // Calculate the surface size - Size - size = bitmap.Size, - sizeInPixels = new Size(bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height); - CanvasComposition.Resize(surface, sizeInPixels); - - // Create a drawing session for the target surface - using (var session = CanvasComposition.CreateDrawingSession(surface, new Rect(0, 0, sizeInPixels.Width, sizeInPixels.Height), dpi)) - { - // Fill the target surface - session.Clear(Color.FromArgb(0, 0, 0, 0)); - session.DrawImage(bitmap, new Rect(0, 0, size.Width, size.Height), new Rect(0, 0, size.Width, size.Height)); - session.EffectTileSize = new BitmapSize { Width = (uint)size.Width, Height = (uint)size.Height }; - } - - // Setup the effect brush to use - var brush = surface.Compositor.CreateSurfaceBrush(surface); - brush.Stretch = CompositionStretch.None; - - double pixels = displayInformation.RawPixelsPerViewPixel; - - // Adjust the scale if the DPI scaling is greater than 100% - if (pixels > 1) - { - brush.Scale = new Vector2((float)(1 / pixels)); - brush.BitmapInterpolationMode = CompositionBitmapInterpolationMode.NearestNeighbor; - } - - return brush; - } - finally - { - bitmap?.Dispose(); - } - } - - /// - /// Loads a instance with the target image - /// - /// The compositor to use to render the Win2D image - /// The to use to load the target image - /// 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 - internal static async Task LoadImageAsync( - Compositor compositor, - CanvasControl canvas, - Uri uri, - DpiMode dpiMode, - CacheMode cacheMode) - { - var tcs = new TaskCompletionSource(); - - // Loads an image using the input CanvasDevice instance - async Task LoadImageAsync(bool shouldThrow) - { - // Load the image - this will only succeed when there's an available Win2D device - try - { - return await LoadSurfaceBrushAsync(canvas, compositor, canvas.Device, uri, dpiMode); - } - catch when (!shouldThrow) - { - // Win2D error, just ignore and continue - return null; - } - } - - // Handler to create the Win2D image from the input CanvasControl - async void Canvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args) - { - // Cancel previous actions - args.GetTrackedAction()?.Cancel(); - - // Load the image and notify the canvas - var task = LoadImageAsync(false); - var action = task.AsAsyncAction(); - - try - { - args.TrackAsyncAction(action); - - var brush = await task; - - action.Cancel(); - - tcs.TrySetResult(brush); - } - catch (COMException) - { - // Somehow another action was still being tracked - tcs.TrySetResult(null); - } - } + var compositor = Window.Current.Compositor; - // Lock the semaphore and check the cache first + // Lock and check the cache first using (await Win2DMutex.LockAsync()) { + uri = uri.ToAppxUri(); + if (cacheMode == CacheMode.Default && Cache.TryGetValue(compositor, uri, out var cached)) { @@ -210,28 +57,19 @@ async void Canvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEve } // Load the image - canvas.CreateResources += Canvas_CreateResources; + CompositionSurfaceBrush brush; try { // This will throw and the canvas will re-initialize the Win2D device if needed - await LoadImageAsync(true); - } - catch (ArgumentException) - { - // Just ignore here + var sharedDevice = CanvasDevice.GetSharedDevice(); + brush = await LoadSurfaceBrushAsync(sharedDevice, compositor, uri, dpiMode); } catch { - // Win2D messed up big time (this should never happen) - tcs.TrySetResult(null); + // Device error + brush = null; } - await Task.WhenAny(tcs.Task, Task.Delay(DeviceLostRecoveryThreshold).ContinueWith(t => tcs.TrySetResult(null))); - - canvas.CreateResources -= Canvas_CreateResources; - - var brush = tcs.Task.Result; - // Cache when needed and return the result if (brush != null && cacheMode != CacheMode.Disabled) @@ -244,52 +82,76 @@ async void Canvas_CreateResources(CanvasControl sender, CanvasCreateResourcesEve } /// - /// Loads a instance with the target image from the shared instance + /// Loads a from the input , and prepares it to be used in a tile effect /// - /// The compositor to use to render the Win2D image + /// 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 - /// Indicates the cache option to use to load the image /// A that returns the loaded instance - internal static async Task LoadImageAsync( + private static async Task LoadSurfaceBrushAsync( + CanvasDevice canvasDevice, Compositor compositor, Uri uri, - DpiMode dpiMode, - CacheMode cacheMode) + DpiMode dpiMode) { - // Lock and check the cache first - using (await Win2DMutex.LockAsync()) - { - uri = uri.ToAppxUri(); + var displayInformation = DisplayInformation.GetForCurrentView(); + float dpi = displayInformation.LogicalDpi; - if (cacheMode == CacheMode.Default && - Cache.TryGetValue(compositor, uri, out var cached)) + // Explicit try/finally block to emulate the using block from C# 8 on switch assignment + CanvasBitmap bitmap = null; + try + { + // Load the bitmap with the appropriate settings + switch (dpiMode) { - return cached; + case DpiMode.UseSourceDpi: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri); break; + case DpiMode.Default96Dpi: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri, 96); break; + case DpiMode.DisplayDpi: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri, dpi); break; + case DpiMode.DisplayDpiWith96AsLowerBound: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri, dpi >= 96 ? dpi : 96); break; + default: throw new ArgumentOutOfRangeException(nameof(dpiMode), dpiMode, $"Invalid DPI mode: {dpiMode}"); } - // Load the image - CompositionSurfaceBrush brush; - try - { - // This will throw and the canvas will re-initialize the Win2D device if needed - var sharedDevice = CanvasDevice.GetSharedDevice(); - brush = await LoadSurfaceBrushAsync(sharedDevice, compositor, sharedDevice, uri, dpiMode); - } - catch + // Get the device and the target surface + using (var graphicsDevice = CanvasComposition.CreateCompositionGraphicsDevice(compositor, canvasDevice)) { - // Device error - brush = null; - } + var drawingSurface = graphicsDevice.CreateDrawingSurface(default, DirectXPixelFormat.B8G8R8A8UIntNormalized, DirectXAlphaMode.Premultiplied); - // Cache when needed and return the result - if (brush != null && - cacheMode != CacheMode.Disabled) - { - Cache.AddOrUpdate(compositor, uri, brush); - } + // Calculate the surface size + Size + size = bitmap.Size, + sizeInPixels = new Size(bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height); - return brush; + CanvasComposition.Resize(drawingSurface, sizeInPixels); + + // Create a drawing session for the target surface + using (var drawingSession = CanvasComposition.CreateDrawingSession(drawingSurface, new Rect(0, 0, sizeInPixels.Width, sizeInPixels.Height), dpi)) + { + // Fill the target surface + drawingSession.Clear(Color.FromArgb(0, 0, 0, 0)); + drawingSession.DrawImage(bitmap, new Rect(0, 0, size.Width, size.Height), new Rect(0, 0, size.Width, size.Height)); + drawingSession.EffectTileSize = new BitmapSize { Width = (uint)size.Width, Height = (uint)size.Height }; + } + + // Setup the effect brush to use + var surfaceBrush = compositor.CreateSurfaceBrush(drawingSurface); + surfaceBrush.Stretch = CompositionStretch.None; + + double pixels = displayInformation.RawPixelsPerViewPixel; + + // Adjust the scale if the DPI scaling is greater than 100% + if (pixels > 1) + { + surfaceBrush.Scale = new Vector2((float)(1 / pixels)); + surfaceBrush.BitmapInterpolationMode = CompositionBitmapInterpolationMode.NearestNeighbor; + } + + return surfaceBrush; + } + } + finally + { + bitmap?.Dispose(); } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index a394736683f..75c010e2915 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 Win2DImageHelper.LoadImageAsync(Window.Current.Compositor, uri, dpiMode, cacheMode)); + return new PipelineBuilder(async () => await Win2DImageHelper.LoadImageAsync(uri, dpiMode, cacheMode)); } /// From 33c1153d3639728dc0ae2bfe3ec07c443580968d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 14:53:28 +0100 Subject: [PATCH 62/92] Removed an unnecessary resize step --- .../Helpers/Win2DImageHelper.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs index 2e6072282b0..f2c92bf06c7 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs @@ -115,14 +115,16 @@ private static async Task LoadSurfaceBrushAsync( // Get the device and the target surface using (var graphicsDevice = CanvasComposition.CreateCompositionGraphicsDevice(compositor, canvasDevice)) { - var drawingSurface = graphicsDevice.CreateDrawingSurface(default, DirectXPixelFormat.B8G8R8A8UIntNormalized, DirectXAlphaMode.Premultiplied); - // Calculate the surface size Size size = bitmap.Size, sizeInPixels = new Size(bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height); - CanvasComposition.Resize(drawingSurface, sizeInPixels); + // Create the drawing surface + var drawingSurface = graphicsDevice.CreateDrawingSurface( + sizeInPixels, + DirectXPixelFormat.B8G8R8A8UIntNormalized, + DirectXAlphaMode.Premultiplied); // Create a drawing session for the target surface using (var drawingSession = CanvasComposition.CreateDrawingSession(drawingSurface, new Rect(0, 0, sizeInPixels.Width, sizeInPixels.Height), dpi)) From 762cb1647f9dddaa00361680a83d2c5f9ee8342b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 15:19:10 +0100 Subject: [PATCH 63/92] Win2DImageHelper class renamed to SurfaceLoader --- .../Helpers/{Win2DImageHelper.cs => SurfaceLoader.cs} | 4 ++-- .../Pipelines/PipelineBuilder.Initialization.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename Microsoft.Toolkit.Uwp.UI.Media/Helpers/{Win2DImageHelper.cs => SurfaceLoader.cs} (97%) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs similarity index 97% rename from Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs rename to Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs index f2c92bf06c7..d0bbb99d1d8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/Win2DImageHelper.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs @@ -20,9 +20,9 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers { /// - /// A helper that loads Win2D images and manages an internal cache of instances with the loaded images + /// A that can load and draw images and other objects to Win2D surfaces and brushes /// - public static class Win2DImageHelper + public static class SurfaceLoader { /// /// Synchronization mutex to access the cache and load Win2D images concurrently diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.Initialization.cs index 75c010e2915..02439a5f37a 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 Win2DImageHelper.LoadImageAsync(uri, dpiMode, cacheMode)); + return new PipelineBuilder(async () => await SurfaceLoader.LoadImageAsync(uri, dpiMode, cacheMode)); } /// From e7d8b36206538e37fbf5303b5e7e4c738845e6c5 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 15:43:53 +0100 Subject: [PATCH 64/92] Unified SurfaceLoader APIs in the .Media package --- .../SurfaceLoader.cs | 2 + .../Helpers/SurfaceLoader.Instance.cs | 172 ++++++++++++++++++ .../Helpers/SurfaceLoader.cs | 2 +- 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs diff --git a/Microsoft.Toolkit.Uwp.UI.Animations/SurfaceLoader.cs b/Microsoft.Toolkit.Uwp.UI.Animations/SurfaceLoader.cs index 53216f50c84..8de05e2055f 100644 --- a/Microsoft.Toolkit.Uwp.UI.Animations/SurfaceLoader.cs +++ b/Microsoft.Toolkit.Uwp.UI.Animations/SurfaceLoader.cs @@ -8,6 +8,7 @@ using Microsoft.Graphics.Canvas.Text; using Microsoft.Graphics.Canvas.UI.Composition; using Windows.Foundation; +using Windows.Foundation.Metadata; using Windows.Graphics.DirectX; using Windows.UI; using Windows.UI.Composition; @@ -26,6 +27,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Animations /// /// The SurfaceLoader is responsible to loading images into Composition Objects. /// + [Deprecated("This class is deprecated, please use the SurfaceLoader class from the Microsoft.Toolkit.Uwp.UI.Media package.", DeprecationType.Deprecate, 6)] public class SurfaceLoader { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs new file mode 100644 index 00000000000..745a56e9ad0 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs @@ -0,0 +1,172 @@ +// 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 System; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using Microsoft.Graphics.Canvas; +using Microsoft.Graphics.Canvas.Text; +using Microsoft.Graphics.Canvas.UI.Composition; +using Windows.Foundation; +using Windows.Graphics.DirectX; +using Windows.UI; +using Windows.UI.Composition; +using Windows.UI.Xaml; + +namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers +{ + /// + /// A delegate for load time effects. + /// + /// The bitmap. + /// The device. + /// The size target. + /// A CompositeDrawingSurface + public delegate CompositionDrawingSurface LoadTimeEffectHandler(CanvasBitmap bitmap, CompositionGraphicsDevice device, Size sizeTarget); + + /// + /// A that can load and draw images and other objects to Win2D surfaces and brushes + /// + public sealed partial class SurfaceLoader + { + /// + /// The cache of instances currently available + /// + private static readonly ConditionalWeakTable Instances = new ConditionalWeakTable(); + + /// + /// Gets a instance for the of the current window + /// + /// A instance to use in the current window + public static SurfaceLoader GetInstance() + { + return GetInstance(Window.Current.Compositor); + } + + /// + /// Gets a instance for a given + /// + /// The input object to use + /// A instance associated with + public static SurfaceLoader GetInstance(Compositor compositor) + { + lock (Instances) + { + if (Instances.TryGetValue(compositor, out var instance)) + { + return instance; + } + + instance = new SurfaceLoader(compositor); + + Instances.Add(compositor, instance); + + return instance; + } + } + + /// + /// The instance in use + /// + private readonly CanvasDevice canvasDevice; + + /// + /// The instance to determinde which GPU is handling the request + /// + private readonly CompositionGraphicsDevice compositionDevice; + + /// + /// Initializes a new instance of the class. + /// + /// The instance to use + private SurfaceLoader(Compositor compositor) + { + this.canvasDevice = new CanvasDevice(); + this.compositionDevice = CanvasComposition.CreateCompositionGraphicsDevice(compositor, this.canvasDevice); + } + + /// + /// Loads an image from the URI. + /// + /// The URI. + /// + public async Task LoadFromUri(Uri uri) + { + return await LoadFromUri(uri, Size.Empty); + } + + /// + /// Loads an image from URI with a specified size. + /// + /// The URI. + /// The size target. + /// + public async Task LoadFromUri(Uri uri, Size sizeTarget) + { + var bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri); + var sizeSource = bitmap.Size; + + if (sizeTarget.IsEmpty) + { + sizeTarget = sizeSource; + } + + var surface = compositionDevice.CreateDrawingSurface( + sizeTarget, + DirectXPixelFormat.B8G8R8A8UIntNormalized, + DirectXAlphaMode.Premultiplied); + + using (var ds = CanvasComposition.CreateDrawingSession(surface)) + { + ds.Clear(Color.FromArgb(0, 0, 0, 0)); + ds.DrawImage(bitmap, new Rect(0, 0, sizeTarget.Width, sizeTarget.Height), new Rect(0, 0, sizeSource.Width, sizeSource.Height)); + } + + return surface; + } + + /// + /// Loads the text on to a . + /// + /// The text. + /// The size target. + /// The text format. + /// Color of the text. + /// Color of the bg. + /// + public CompositionDrawingSurface LoadText(string text, Size sizeTarget, CanvasTextFormat textFormat, Color textColor, Color bgColor) + { + var surface = compositionDevice.CreateDrawingSurface( + sizeTarget, + DirectXPixelFormat.B8G8R8A8UIntNormalized, + DirectXAlphaMode.Premultiplied); + + using (var ds = CanvasComposition.CreateDrawingSession(surface)) + { + ds.Clear(bgColor); + ds.DrawText(text, new Rect(0, 0, sizeTarget.Width, sizeTarget.Height), textColor, textFormat); + } + + return surface; + } + + /// + /// Loads an image from URI, with a specified size. + /// + /// The URI. + /// The size target. + /// The load effect handler callback. + /// + public async Task LoadFromUri(Uri uri, Size sizeTarget, LoadTimeEffectHandler loadEffectHandler) + { + if (loadEffectHandler != null) + { + var bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri); + return loadEffectHandler(bitmap, compositionDevice, sizeTarget); + } + + return await LoadFromUri(uri, sizeTarget); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs index d0bbb99d1d8..208c6b389b2 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs @@ -22,7 +22,7 @@ namespace Microsoft.Toolkit.Uwp.UI.Media.Helpers /// /// A that can load and draw images and other objects to Win2D surfaces and brushes /// - public static class SurfaceLoader + public sealed partial class SurfaceLoader { /// /// Synchronization mutex to access the cache and load Win2D images concurrently From 36f4bbe72e46b938dab34794e079ad90b7e83092 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 18:34:01 +0100 Subject: [PATCH 65/92] Added sample page for the AcrylicBrush --- .../Microsoft.Toolkit.Uwp.SampleApp.csproj | 9 +++++ .../SamplePages/AcrylicBrush/AcrylicBrush.png | Bin 0 -> 24376 bytes .../AcrylicBrush/AcrylicBrushPage.xaml | 18 ++++++++++ .../AcrylicBrush/AcrylicBrushPage.xaml.cs | 22 ++++++++++++ .../AcrylicBrush/AcrylicBrushXaml.bind | 32 ++++++++++++++++++ .../SamplePages/samples.json | 11 ++++++ 6 files changed, 92 insertions(+) create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrush.png create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj index 0c2666a788f..4c16ff7d804 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj +++ b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj @@ -285,6 +285,7 @@ + @@ -533,6 +534,9 @@ OnDevicePage.xaml + + AcrylicBrushPage.xaml + PipelineBrushPage.xaml @@ -559,6 +563,7 @@ + @@ -953,6 +958,10 @@ MSBuild:Compile Designer + + MSBuild:Compile + Designer + Designer MSBuild:Compile diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrush.png b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrush.png new file mode 100644 index 0000000000000000000000000000000000000000..c344005ac5a0c5af3606a465f4970e5c12a49008 GIT binary patch literal 24376 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 V^8>Nzi?;hqCJ)RFEA^j8{vZFTusZ+% literal 0 HcmV?d00001 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml new file mode 100644 index 00000000000..52280d9ab23 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs new file mode 100644 index 00000000000..409f610b7eb --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs @@ -0,0 +1,22 @@ +// 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 Windows.UI.Xaml.Controls; + +namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages +{ + /// + /// A page that shows how to use the pipeline brushes. + /// + public sealed partial class AcrylicBrushPage : Page + { + /// + /// Initializes a new instance of the class. + /// + public AcrylicBrushPage() + { + this.InitializeComponent(); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind new file mode 100644 index 00000000000..2fa03cc8f07 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json index 507c54d5a77..75f920b2d4b 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json @@ -1000,6 +1000,17 @@ "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" + }, + { + "Name": "AcrylicBrush", + "Type": "AcrylicBrushPage", + "About": "A composition brush that provides a custom implementation of the official acrylic brush.", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "XamlCodeFile": "AcrylicBrushXaml.bind", + "Icon": "/SamplePages/AcrylicBrush/AcrylicBrush.png", + "BadgeUpdateVersionRequired": "Creators Update required", + "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", + "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" } ] }, From 5a8d4f4fa7a20dd7aedf20c19c7778e9bfa74427 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 18:35:00 +0100 Subject: [PATCH 66/92] Updated AcrylicBrush icon --- .../SamplePages/AcrylicBrush/AcrylicBrush.png | Bin 24376 -> 25311 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrush.png b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrush.png index c344005ac5a0c5af3606a465f4970e5c12a49008..a40e933b1339e7fec0ce2e517d3c237eaa2d9e42 100644 GIT binary patch literal 25311 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ˁZBfb8em7x_GcGb<;(G--@viBoP)}4 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 V^8>Nzi?;hqCJ)RFEA^j8{vZFTusZ+% From 6254e6fdef8e9c15e3421f599e16d27571d8271d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 19:11:59 +0100 Subject: [PATCH 67/92] Added bindings for the AcrylicBrush sample --- .../SamplePages/AcrylicBrush/AcrylicBrushXaml.bind | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind index 2fa03cc8f07..c0b122d90fb 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind @@ -20,10 +20,10 @@ Grid.Column="2" Height="400"> - From d2d13c6efc0110bfb021952f5057995cee8d78fd Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 19:21:28 +0100 Subject: [PATCH 68/92] Added dependency property to the TilesBrush --- .../Brushes/AcrylicBrush.cs | 2 +- .../Brushes/TilesBrush.cs | 34 +++++++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index fad6fb87e4c..037d055908a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -169,7 +169,7 @@ public Uri TextureUri } /// - /// Identifies the dependency property. + /// Identifies the dependency property. /// public static readonly DependencyProperty TextureUriProperty = DependencyProperty.Register( nameof(TextureUri), diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs index d6e893cf97e..0b022fc9a9a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs @@ -5,19 +5,47 @@ using System; using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; +using Windows.UI.Xaml; namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes { /// - /// A that displays a tiled noise texture + /// A that displays a tiled image /// public sealed class TilesBrush : XamlCompositionEffectBrushBase { /// /// Gets or sets the to the texture to use /// - /// This property must be initialized before using the brush - public Uri TextureUri { get; set; } + public Uri TextureUri + { + get => (Uri)GetValue(TextureUriProperty); + set => SetValue(TextureUriProperty, value); + } + + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty TextureUriProperty = DependencyProperty.Register( + nameof(TextureUri), + typeof(Uri), + typeof(TilesBrush), + new PropertyMetadata(default, OnTextureUriPropertyChanged)); + + /// + /// Updates the UI when changes + /// + /// The current instance + /// The instance for + private static void OnTextureUriPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is TilesBrush brush && + brush.CompositionBrush != null) + { + brush.OnDisconnected(); + brush.OnConnected(); + } + } /// protected override PipelineBuilder OnBrushRequested() => PipelineBuilder.FromTiles(this.TextureUri); From 452ba69c3d48d90f15ae8ccfb16dac48303620f2 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 19:44:39 +0100 Subject: [PATCH 69/92] Added sample page for the TilesBrush --- .../BrushAssets/MicrosoftSquareLogo.png | Bin 0 -> 476 bytes .../Microsoft.Toolkit.Uwp.SampleApp.csproj | 10 +++++++ .../AcrylicBrush/AcrylicBrushPage.xaml.cs | 2 +- .../AcrylicBrush/AcrylicBrushXaml.bind | 2 +- .../SamplePages/TilesBrush/TilesBrush.png | Bin 0 -> 1062 bytes .../TilesBrush/TilesBrushPage.xaml | 18 +++++++++++ .../TilesBrush/TilesBrushPage.xaml.cs | 22 ++++++++++++++ .../TilesBrush/TilesBrushXaml.bind | 28 ++++++++++++++++++ .../SamplePages/samples.json | 11 +++++++ .../Brushes/TilesBrush.cs | 10 ++++++- 10 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/MicrosoftSquareLogo.png create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrush.png create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml.cs create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/MicrosoftSquareLogo.png b/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/MicrosoftSquareLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4de5538d609204de16c65c09c0e38d410c7487 GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!hC)vl$B>G+w|DpYHXDjK1X|k)SsQr2SQ)8y zddaf($W6>b%n~0rJN@wte{P}|U-5r<~Kf6Cw->;6f vm=`Nvq)xtbpYJjN8cV)sAz?Mg?3j66wA@`~)|+y`7-8^q^>bP0l+XkKwEDD9 literal 0 HcmV?d00001 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj index 4c16ff7d804..5911c57e808 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj +++ b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj @@ -148,6 +148,7 @@ + @@ -283,6 +284,7 @@ + @@ -525,6 +527,9 @@ + + TilesBrushPage.xaml + EyedropperPage.xaml @@ -564,6 +569,7 @@ + @@ -946,6 +952,10 @@ Designer MSBuild:Compile + + MSBuild:Compile + Designer + Designer MSBuild:Compile diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs index 409f610b7eb..742287ddd81 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml.cs @@ -7,7 +7,7 @@ namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages { /// - /// A page that shows how to use the pipeline brushes. + /// A page that shows how to use the acrylic brushe. /// public sealed partial class AcrylicBrushPage : Page { diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind index c0b122d90fb..edb562ef52b 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind @@ -29,4 +29,4 @@ - \ No newline at end of file + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrush.png b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrush.png new file mode 100644 index 0000000000000000000000000000000000000000..77ecfaf93aa684c06e1d5bfd3ca192c81a6f97f6 GIT binary patch literal 1062 zcmeAS@N?(olHy`uVBq!ia0y~yU{nCI4{)#n$t4^1Z39w_#X;^)4C~IxyaaMs(j9#r z85lP9bN@+X1@buyJR*x382Ao?FyoGi*>4#bn0I@+IEGZjy}i59SH)Yz;o{2o%7V;C zn9Odd7$0ot<=-g4%)zwcDv$hr2n-^eZclKfinR&fJ2Jf6VyK z|9x%ov;P0Be`#{}tIu8k`*qcGqkh%T5x0KX@NF}h{QqA)(;B~qh8_k+Nk%3kCYBTy zjuRXL69g3$lpP%08XC^bD83qflVN|3gG1UIx%>X>96mq%^xHj8|MkBedF8*$?bk{B z%dehy+Gg6B+$-MqZhg4z^h%wX$1h!bUbtcD%p25p9w_XR&xP6x^L{wZ#*%XE z-N(OAxJ=~rj(_Z*zVY3v66^izJH^}V?>$`n-zsdc(cb+tkAI){xwL-otDR?(Pufh|X4l`W zd-e#>FKFoj-7I)QAzDJRc-^m=84dAf3JS(${qNPo7yK-+?5p3?QyRYX_RqifjE`MD zj*>`)@%e>x`yo2g&g^`rzJ{?5Us5>pW6y4@O3`1Be&))|`+a@mtEn&lp0(Ncea`yd zuS3tL%6UKAxaDi5Oird6&@Yhe0t|(Tci-_JDHbeSWn1$Jn70``UHx3vIVCg!09Ac- AM*si- literal 0 HcmV?d00001 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml new file mode 100644 index 00000000000..cd45626a3bc --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml.cs b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml.cs new file mode 100644 index 00000000000..11a0fe79e82 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml.cs @@ -0,0 +1,22 @@ +// 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 Windows.UI.Xaml.Controls; + +namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages +{ + /// + /// A page that shows how to use the tiles brushe. + /// + public sealed partial class TilesBrushPage : Page + { + /// + /// Initializes a new instance of the class. + /// + public TilesBrushPage() + { + this.InitializeComponent(); + } + } +} diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind new file mode 100644 index 00000000000..54a23acb352 --- /dev/null +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json index 75f920b2d4b..d2157f8f92d 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json @@ -1011,6 +1011,17 @@ "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" + }, + { + "Name": "TilesBrush", + "Type": "TilesBrushPage", + "About": "A composition brush that provides the ability to display a repeated image on its render surface.", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "XamlCodeFile": "TilesBrushXaml.bind", + "Icon": "/SamplePages/TilesBrush/TilesBrush.png", + "BadgeUpdateVersionRequired": "Creators Update required", + "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", + "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" } ] }, diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs index 0b022fc9a9a..16c08e486ff 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs @@ -48,6 +48,14 @@ private static void OnTextureUriPropertyChanged(DependencyObject d, DependencyPr } /// - protected override PipelineBuilder OnBrushRequested() => PipelineBuilder.FromTiles(this.TextureUri); + protected override PipelineBuilder OnBrushRequested() + { + if (TextureUri is Uri uri) + { + return PipelineBuilder.FromTiles(uri); + } + + return PipelineBuilder.FromColor(default); + } } } From c8fcd9d14a8d411f4681722dccc1466640be17bb Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 22:38:35 +0100 Subject: [PATCH 70/92] Fixed two XML comments --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index 037d055908a..904ef999438 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -132,7 +132,7 @@ private static void OnTintPropertyChanged(DependencyObject d, DependencyProperty } /// - /// Gets or sets the color for the tint effect + /// Gets or sets the tint mix factor for the effect /// public double TintMix { get; set; } @@ -160,7 +160,7 @@ private static void OnTintMixPropertyChanged(DependencyObject d, DependencyPrope } /// - /// Gets or sets the to the texture to use + /// Gets or sets the for the texture to use /// public Uri TextureUri { From 5af6d0b83048df00c5c6c5526797329c4997f8d8 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 31 Jan 2020 22:48:13 +0100 Subject: [PATCH 71/92] Updated tile texture --- .../BrushAssets/MicrosoftSquareLogo.png | Bin 476 -> 0 bytes .../Assets/BrushAssets/TileTexture.png | Bin 0 -> 111184 bytes .../Microsoft.Toolkit.Uwp.SampleApp.csproj | 2 +- .../SamplePages/TilesBrush/TilesBrush.png | Bin 1062 -> 53507 bytes .../TilesBrush/TilesBrushXaml.bind | 2 +- 5 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/MicrosoftSquareLogo.png create mode 100644 Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/TileTexture.png diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/MicrosoftSquareLogo.png b/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/MicrosoftSquareLogo.png deleted file mode 100644 index 8f4de5538d609204de16c65c09c0e38d410c7487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!hC)vl$B>G+w|DpYHXDjK1X|k)SsQr2SQ)8y zddaf($W6>b%n~0rJN@wte{P}|U-5r<~Kf6Cw->;6f vm=`Nvq)xtbpYJjN8cV)sAz?Mg?3j66wA@`~)|+y`7-8^q^>bP0l+XkKwEDD9 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/TileTexture.png b/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/TileTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..c96a85ac6d6363f1a3af1359a672f86878fbc355 GIT binary patch literal 111184 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 literal 0 HcmV?d00001 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj index 5911c57e808..9dc4f9541b4 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj +++ b/Microsoft.Toolkit.Uwp.SampleApp/Microsoft.Toolkit.Uwp.SampleApp.csproj @@ -148,7 +148,7 @@ - + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrush.png b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrush.png index 77ecfaf93aa684c06e1d5bfd3ca192c81a6f97f6..e3bf24f447775c8d170a7234836c8ca886aeb48a 100644 GIT binary patch literal 53507 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 Y15kjcMWB>pF literal 1062 zcmeAS@N?(olHy`uVBq!ia0y~yU{nCI4{)#n$t4^1Z39w_#X;^)4C~IxyaaMs(j9#r z85lP9bN@+X1@buyJR*x382Ao?FyoGi*>4#bn0I@+IEGZjy}i59SH)Yz;o{2o%7V;C zn9Odd7$0ot<=-g4%)zwcDv$hr2n-^eZclKfinR&fJ2Jf6VyK z|9x%ov;P0Be`#{}tIu8k`*qcGqkh%T5x0KX@NF}h{QqA)(;B~qh8_k+Nk%3kCYBTy zjuRXL69g3$lpP%08XC^bD83qflVN|3gG1UIx%>X>96mq%^xHj8|MkBedF8*$?bk{B z%dehy+Gg6B+$-MqZhg4z^h%wX$1h!bUbtcD%p25p9w_XR&xP6x^L{wZ#*%XE z-N(OAxJ=~rj(_Z*zVY3v66^izJH^}V?>$`n-zsdc(cb+tkAI){xwL-otDR?(Pufh|X4l`W zd-e#>FKFoj-7I)QAzDJRc-^m=84dAf3JS(${qNPo7yK-+?5p3?QyRYX_RqifjE`MD zj*>`)@%e>x`yo2g&g^`rzJ{?5Us5>pW6y4@O3`1Be&))|`+a@mtEn&lp0(Ncea`yd zuS3tL%6UKAxaDi5Oird6&@Yhe0t|(Tci-_JDHbeSWn1$Jn70``UHx3vIVCg!09Ac- AM*si- diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind index 54a23acb352..55bf878f1aa 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind @@ -20,7 +20,7 @@ Grid.Column="2" Height="400"> - + From e322de8a44f3356dc97cb9729995033101899d22 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 1 Feb 2020 18:01:28 +0100 Subject: [PATCH 72/92] Added new brushes to the readme --- readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readme.md b/readme.md index 7b1c2226d6b..ab100d814b1 100644 --- a/readme.md +++ b/readme.md @@ -73,13 +73,16 @@ Once you do a search, you should see a list similar to the one below (versions m * [Scale](https://docs.microsoft.com/windows/uwpcommunitytoolkit/animations/Scale) ### Brushes +* [AcrylicBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/AcrylicBrush) * [BackdropBlurBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/BackdropBlurBrush) * [BackdropGammaTransferBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/BackdropGammaTransferBrush) * [BackdropInvertBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/BackdropInvertBrush) * [BackdropSaturationBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/BackdropSaturationBrush) * [BackdropSepiaBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/BackdropSepiaBrush) * [ImageBlendBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/ImageBlendBrush) +* [PipelineBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/PipelineBrush) * [RadialGradientBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/RadialGradientBrush) +* [TilesBrush](https://docs.microsoft.com/windows/uwpcommunitytoolkit/brushes/TilesBrush) ### Controls * [AdaptiveGridView](https://docs.microsoft.com/windows/uwpcommunitytoolkit/controls/AdaptiveGridView) From 019a1edeaff8c9e03988420d815e57798a200c79 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 14 May 2020 12:12:43 +0200 Subject: [PATCH 73/92] Minor code refactoring --- .../Helpers/SurfaceLoader.cs | 96 +++++++++---------- .../Microsoft.Toolkit.Uwp.UI.Media.csproj | 1 + 2 files changed, 44 insertions(+), 53 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs index 208c6b389b2..ebcb7104243 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.cs @@ -98,63 +98,53 @@ private static async Task LoadSurfaceBrushAsync( var displayInformation = DisplayInformation.GetForCurrentView(); float dpi = displayInformation.LogicalDpi; - // Explicit try/finally block to emulate the using block from C# 8 on switch assignment - CanvasBitmap bitmap = null; - try + // Load the bitmap with the appropriate settings + using CanvasBitmap bitmap = dpiMode switch { - // Load the bitmap with the appropriate settings - switch (dpiMode) - { - case DpiMode.UseSourceDpi: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri); break; - case DpiMode.Default96Dpi: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri, 96); break; - case DpiMode.DisplayDpi: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri, dpi); break; - case DpiMode.DisplayDpiWith96AsLowerBound: bitmap = await CanvasBitmap.LoadAsync(canvasDevice, uri, dpi >= 96 ? dpi : 96); break; - default: throw new ArgumentOutOfRangeException(nameof(dpiMode), dpiMode, $"Invalid DPI mode: {dpiMode}"); - } - - // Get the device and the target surface - using (var graphicsDevice = CanvasComposition.CreateCompositionGraphicsDevice(compositor, canvasDevice)) - { - // Calculate the surface size - Size - size = bitmap.Size, - sizeInPixels = new Size(bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height); - - // Create the drawing surface - var drawingSurface = graphicsDevice.CreateDrawingSurface( - sizeInPixels, - DirectXPixelFormat.B8G8R8A8UIntNormalized, - DirectXAlphaMode.Premultiplied); - - // Create a drawing session for the target surface - using (var drawingSession = CanvasComposition.CreateDrawingSession(drawingSurface, new Rect(0, 0, sizeInPixels.Width, sizeInPixels.Height), dpi)) - { - // Fill the target surface - drawingSession.Clear(Color.FromArgb(0, 0, 0, 0)); - drawingSession.DrawImage(bitmap, new Rect(0, 0, size.Width, size.Height), new Rect(0, 0, size.Width, size.Height)); - drawingSession.EffectTileSize = new BitmapSize { Width = (uint)size.Width, Height = (uint)size.Height }; - } - - // Setup the effect brush to use - var surfaceBrush = compositor.CreateSurfaceBrush(drawingSurface); - surfaceBrush.Stretch = CompositionStretch.None; - - double pixels = displayInformation.RawPixelsPerViewPixel; - - // Adjust the scale if the DPI scaling is greater than 100% - if (pixels > 1) - { - surfaceBrush.Scale = new Vector2((float)(1 / pixels)); - surfaceBrush.BitmapInterpolationMode = CompositionBitmapInterpolationMode.NearestNeighbor; - } - - return surfaceBrush; - } + DpiMode.UseSourceDpi => await CanvasBitmap.LoadAsync(canvasDevice, uri), + DpiMode.Default96Dpi => await CanvasBitmap.LoadAsync(canvasDevice, uri, 96), + DpiMode.DisplayDpi => await CanvasBitmap.LoadAsync(canvasDevice, uri, dpi), + DpiMode.DisplayDpiWith96AsLowerBound => await CanvasBitmap.LoadAsync(canvasDevice, uri, dpi >= 96 ? dpi : 96), + _ => throw new ArgumentOutOfRangeException(nameof(dpiMode), dpiMode, $"Invalid DPI mode: {dpiMode}") + }; + + // Calculate the surface size + Size + size = bitmap.Size, + sizeInPixels = new Size(bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height); + + // Get the device and the target surface + using CompositionGraphicsDevice graphicsDevice = CanvasComposition.CreateCompositionGraphicsDevice(compositor, canvasDevice); + + // Create the drawing surface + var drawingSurface = graphicsDevice.CreateDrawingSurface( + sizeInPixels, + DirectXPixelFormat.B8G8R8A8UIntNormalized, + DirectXAlphaMode.Premultiplied); + + // Create a drawing session for the target surface + using (var drawingSession = CanvasComposition.CreateDrawingSession(drawingSurface, new Rect(0, 0, sizeInPixels.Width, sizeInPixels.Height), dpi)) + { + // Fill the target surface + drawingSession.Clear(Color.FromArgb(0, 0, 0, 0)); + drawingSession.DrawImage(bitmap, new Rect(0, 0, size.Width, size.Height), new Rect(0, 0, size.Width, size.Height)); + drawingSession.EffectTileSize = new BitmapSize { Width = (uint)size.Width, Height = (uint)size.Height }; } - finally + + // Setup the effect brush to use + var surfaceBrush = compositor.CreateSurfaceBrush(drawingSurface); + surfaceBrush.Stretch = CompositionStretch.None; + + double pixels = displayInformation.RawPixelsPerViewPixel; + + // Adjust the scale if the DPI scaling is greater than 100% + if (pixels > 1) { - bitmap?.Dispose(); + surfaceBrush.Scale = new Vector2((float)(1 / pixels)); + surfaceBrush.BitmapInterpolationMode = CompositionBitmapInterpolationMode.NearestNeighbor; } + + return surfaceBrush; } } } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj b/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj index f1f8dbc71a4..ca5aec12224 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj +++ b/Microsoft.Toolkit.Uwp.UI.Media/Microsoft.Toolkit.Uwp.UI.Media.csproj @@ -2,6 +2,7 @@ uap10.0.16299 + 8.0 Windows Community Toolkit UI Media This library provides UI brushes. It is part of the Windows Community Toolkit. From f887872063024657107d972bba1314137c78548d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 14 May 2020 13:24:30 +0200 Subject: [PATCH 74/92] Added support for device lost in SurfaceLoader.Instance --- .../Helpers/SurfaceLoader.Instance.cs | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs index 745a56e9ad0..213a714e588 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Helpers/SurfaceLoader.Instance.cs @@ -67,14 +67,19 @@ public static SurfaceLoader GetInstance(Compositor compositor) } ///

- /// The instance in use + /// The instance in use. /// - private readonly CanvasDevice canvasDevice; + private readonly Compositor compositor; /// - /// The instance to determinde which GPU is handling the request + /// The instance in use. /// - private readonly CompositionGraphicsDevice compositionDevice; + private CanvasDevice canvasDevice; + + /// + /// The instance to determinde which GPU is handling the request. + /// + private CompositionGraphicsDevice compositionDevice; ///
/// Initializes a new instance of the class. @@ -82,8 +87,47 @@ public static SurfaceLoader GetInstance(Compositor compositor) /// The instance to use private SurfaceLoader(Compositor compositor) { + this.compositor = compositor; + + this.InitializeDevices(); + } + + /// + /// Reloads the and fields. + /// + private void InitializeDevices() + { + if (!(this.canvasDevice is null)) + { + this.canvasDevice.DeviceLost -= CanvasDevice_DeviceLost; + } + + if (!(this.compositionDevice is null)) + { + this.compositionDevice.RenderingDeviceReplaced -= CompositionDevice_RenderingDeviceReplaced; + } + this.canvasDevice = new CanvasDevice(); - this.compositionDevice = CanvasComposition.CreateCompositionGraphicsDevice(compositor, this.canvasDevice); + this.compositionDevice = CanvasComposition.CreateCompositionGraphicsDevice(this.compositor, this.canvasDevice); + + this.canvasDevice.DeviceLost += CanvasDevice_DeviceLost; + this.compositionDevice.RenderingDeviceReplaced += CompositionDevice_RenderingDeviceReplaced; + } + + /// + /// Invokes when the current is lost. + /// + private void CanvasDevice_DeviceLost(CanvasDevice sender, object args) + { + InitializeDevices(); + } + + /// + /// Invokes when the current changes rendering device. + /// + private void CompositionDevice_RenderingDeviceReplaced(CompositionGraphicsDevice sender, RenderingDeviceReplacedEventArgs args) + { + InitializeDevices(); } /// From d6d0e037cd5542379979aa545f98a827ad55989b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 15 May 2020 23:17:24 +0200 Subject: [PATCH 75/92] Updated tile brush texture --- .../Assets/BrushAssets/TileTexture.png | Bin 111184 -> 367156 bytes .../SamplePages/TilesBrush/TilesBrush.png | Bin 53507 -> 25960 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/TileTexture.png b/Microsoft.Toolkit.Uwp.SampleApp/Assets/BrushAssets/TileTexture.png index c96a85ac6d6363f1a3af1359a672f86878fbc355..8df8ddc2c2155cdad7a0747be390ce49c7928b1f 100644 GIT binary patch literal 367156 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 rbwKOa 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 z zi+y!xOVjobVvOu=I~r%QaTS5GOvB8Cxp7OuHsxoya&@{u?%AP`0I4*POMCK)o+fL} zla%>57p2WcQEz2JrSLz8v8r)zq|GP2bo$D6O5CCUfaMqX^uNQyZ{g;DLjMP7&p;<* zC9|db&%EdiQdCAkMJ8cM*7P8XnLtvqYi&hsCG|&Vb8Tw€_ec15Nd4|Ky+1n58 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 diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrush.png b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrush.png index e3bf24f447775c8d170a7234836c8ca886aeb48a..b3e61ce0651a5aabc3e44e39f418cd0b605ad4b8 100644 GIT binary patch literal 25960 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 literal 53507 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 Y15kjcMWB>pF From 0a95001b666dae78b2e82ca782aea2ca4ee65dd8 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Fri, 15 May 2020 23:17:31 +0200 Subject: [PATCH 76/92] Added opacity to tile brush sample --- .../SamplePages/TilesBrush/TilesBrushXaml.bind | 1 + 1 file changed, 1 insertion(+) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind index 55bf878f1aa..aab1fca3781 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind @@ -18,6 +18,7 @@ VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red" Width="200" Height="200"/> From 900bd8797e1cf5df6974391fbca3d6a735415cca Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 00:26:25 +0200 Subject: [PATCH 77/92] Updated the PipelineBrush sample page icon --- .../PipelineBrush/PipelineBrush.png | Bin 24376 -> 23557 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrush.png b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrush.png index c344005ac5a0c5af3606a465f4970e5c12a49008..eb779d49781632c91643388489c6b723ad7b931d 100644 GIT binary patch literal 23557 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 P-GALOL>he7dlLRXC4xdB literal 24376 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 V^8>Nzi?;hqCJ)RFEA^j8{vZFTusZ+% From b0623d05c86117def8e835a88145ed855dbd338d Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 01:29:56 +0200 Subject: [PATCH 78/92] Fixed PipelineBrush sample page shallow copy --- .../PipelineBrush/PipelineBrushPage.xaml | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index a3da3ebe687..e9936c66c7d 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -5,14 +5,45 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:media="using:Microsoft.Toolkit.Uwp.UI.Media" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:effects="using:Microsoft.Toolkit.Uwp.UI.Media.Effects" mc:Ignorable="d"> - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d4e74d89839baab3579dbab8f70ad34e54f38822 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 01:32:24 +0200 Subject: [PATCH 79/92] Update Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind Co-authored-by: Michael Hawker MSFT (XAML Llama) <24302614+michael-hawker@users.noreply.github.com> --- .../TilesBrush/TilesBrushXaml.bind | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind index aab1fca3781..91354cf01e3 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind @@ -8,22 +8,25 @@ mc:Ignorable="d"> - - - - - - - - - - - - - + + + + + + + + + + + + + + + From a7b3b133099404b037b29c0c2440a44cd0bd0ead Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 01:34:11 +0200 Subject: [PATCH 80/92] Removed unnecessary CU badges --- .../SamplePages/samples.json | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json index cf862638cc0..b2147edee82 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json @@ -1040,7 +1040,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropBlurBrush.cs", "XamlCodeFile": "BackdropBlurBrushXaml.bind", "Icon": "/SamplePages/BackdropBlurBrush/BackdropBlurBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropBlurBrush.md" }, @@ -1051,7 +1050,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropInvertBrush.cs", "XamlCodeFile": "BackdropInvertBrushXaml.bind", "Icon": "/SamplePages/BackdropInvertBrush/BackdropInvertBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropInvertBrush.md" }, @@ -1062,7 +1060,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropGammaTransferBrush.cs", "XamlCodeFile": "BackdropGammaTransferBrushXaml.bind", "Icon": "/SamplePages/BackdropGammaTransferBrush/BackdropGammaTransferBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropGammaTransferBrush.md" }, @@ -1073,7 +1070,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSaturationBrush.cs", "XamlCodeFile": "BackdropSaturationBrushXaml.bind", "Icon": "/SamplePages/BackdropSaturationBrush/BackdropSaturationBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSaturationBrush.md" }, @@ -1084,7 +1080,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", "XamlCodeFile": "BackdropSepiaBrushXaml.bind", "Icon": "/SamplePages/BackdropSepiaBrush/BackdropSepiaBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" }, @@ -1095,7 +1090,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/ImageBlendBrush.cs", "XamlCodeFile": "ImageBlendBrushXaml.bind", "Icon": "/SamplePages/ImageBlendBrush/ImageBlendBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/ImageBlendBrush.md" }, @@ -1106,7 +1100,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/RadialGradientBrush.cs", "XamlCodeFile": "RadialGradientBrushXaml.bind", "Icon": "/SamplePages/RadialGradientBrush/RadialGradientBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/RadialGradientBrush.md" }, @@ -1118,7 +1111,6 @@ "CodeFile": "PipelineBrushCode.bind", "XamlCodeFile": "PipelineBrushXaml.bind", "Icon": "/SamplePages/PipelineBrush/PipelineBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" }, @@ -1129,7 +1121,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", "XamlCodeFile": "AcrylicBrushXaml.bind", "Icon": "/SamplePages/AcrylicBrush/AcrylicBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" }, @@ -1140,7 +1131,6 @@ "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", "XamlCodeFile": "TilesBrushXaml.bind", "Icon": "/SamplePages/TilesBrush/TilesBrush.png", - "BadgeUpdateVersionRequired": "Creators Update required", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" } From 390229423fb6a1c1664cc4e01546b527af0e5af8 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 01:34:41 +0200 Subject: [PATCH 81/92] Update Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs Co-authored-by: Michael Hawker MSFT (XAML Llama) <24302614+michael-hawker@users.noreply.github.com> --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index 904ef999438..a0fe333a046 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -93,6 +93,7 @@ public double BlurAmount 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.CompositionBrush is CompositionBrush target) { brush.blurAmountSetter?.Invoke(target, (float)(double)e.NewValue); From dd7af19683f211849f994b1b94eed393f4f60764 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 01:37:24 +0200 Subject: [PATCH 82/92] Added missing effects to shallow copy --- .../PipelineBrush/PipelineBrushPage.xaml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index e9936c66c7d..44fba4252c7 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -25,21 +25,28 @@ + + + + + + + + - - - - - - + + + + + From 59c101e87c9db11c33e2addd246a625f2272af46 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 01:53:50 +0200 Subject: [PATCH 83/92] Moved brushes to .Media namespace --- .../SamplePages/AcrylicBrush/AcrylicBrushPage.xaml | 2 +- .../SamplePages/AcrylicBrush/AcrylicBrushXaml.bind | 2 +- .../SamplePages/PipelineBrush/PipelineBrushCode.bind | 2 +- .../SamplePages/PipelineBrush/PipelineBrushPage.xaml | 11 +++++------ .../SamplePages/PipelineBrush/PipelineBrushXaml.bind | 2 +- .../SamplePages/TilesBrush/TilesBrushPage.xaml | 2 +- .../SamplePages/TilesBrush/TilesBrushXaml.bind | 2 +- .../Brushes/AcrylicBrush.cs | 4 ++-- .../Brushes/BackdropBlurBrush.cs | 2 +- .../Brushes/BackdropInvertBrush.cs | 2 +- .../Brushes/BackdropSaturationBrush.cs | 2 +- .../Brushes/BackdropSepiaBrush.cs | 2 +- .../Brushes/Base/XamlCompositionEffectBrushBase.cs | 2 +- .../Brushes/PipelineBrush.cs | 4 ++-- Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs | 4 ++-- .../Brushes/XamlCompositionBrush.cs | 4 ++-- .../Effects/Interfaces/IPipelineEffect.cs | 2 -- .../Pipelines/PipelineBuilder.cs | 1 - 18 files changed, 24 insertions(+), 28 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml index 52280d9ab23..d13797dabca 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushPage.xaml @@ -4,7 +4,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media" mc:Ignorable="d"> diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind index edb562ef52b..40ffce65d83 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/AcrylicBrush/AcrylicBrushXaml.bind @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media" xmlns:effects="using:Microsoft.Toolkit.Uwp.UI.Media.Effects" mc:Ignorable="d"> diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind index ff7333d3018..9b31cb8e4e3 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushCode.bind @@ -1,5 +1,5 @@ // Defines a brush like the one shown in the XAML code, but via C# code. -using Microsoft.Toolkit.Uwp.UI.Media.Brushes; +using Microsoft.Toolkit.Uwp.UI.Media; using Microsoft.Toolkit.Uwp.UI.Media.Effects; using Windows.UI.Xaml.Media; diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index 44fba4252c7..a514c2bdda3 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -3,9 +3,8 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:media="using:Microsoft.Toolkit.Uwp.UI.Media" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:media="using:Microsoft.Toolkit.Uwp.UI.Media" xmlns:effects="using:Microsoft.Toolkit.Uwp.UI.Media.Effects" mc:Ignorable="d"> @@ -23,8 +22,8 @@ Grid.Column="2" Height="400"> - - + + @@ -47,8 +46,8 @@ - - + + diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index 25501b17162..d5f0dd8679d 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media" xmlns:effects="using:Microsoft.Toolkit.Uwp.UI.Media.Effects" mc:Ignorable="d"> diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml index cd45626a3bc..923e1cfaa40 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushPage.xaml @@ -4,7 +4,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media" mc:Ignorable="d"> diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind index 91354cf01e3..3d7fa0e5e4a 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/TilesBrush/TilesBrushXaml.bind @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media.Brushes" + xmlns:brushes="using:Microsoft.Toolkit.Uwp.UI.Media" xmlns:effects="using:Microsoft.Toolkit.Uwp.UI.Media.Effects" mc:Ignorable="d"> diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index a0fe333a046..367f3d93723 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -3,14 +3,14 @@ // See the LICENSE file in the project root for more information. using System; -using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI; using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Media; +using Microsoft.Toolkit.Uwp.UI.Media.Base; -namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +namespace Microsoft.Toolkit.Uwp.UI.Media { ///

/// A that implements an acrylic effect with customizable parameters diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs index 117ee3bf76d..707a0ce2aff 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs @@ -4,11 +4,11 @@ //// Example brush from https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.xamlcompositionbrushbase -using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; using Windows.UI.Xaml.Media; +using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs index 09e0a1c1a3e..f7805e7f5b1 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs @@ -4,9 +4,9 @@ //// 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.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; +using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs index 3f9083a87a5..aa70577da86 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs @@ -2,10 +2,10 @@ // 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.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs index 56e71660a4b..536890a0c75 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs @@ -2,10 +2,10 @@ // 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.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Composition; using Windows.UI.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/Base/XamlCompositionEffectBrushBase.cs index 4b2f95d7bc1..fe075953d9d 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.Brushes.Base +namespace Microsoft.Toolkit.Uwp.UI.Media.Base { /// /// 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 4c05e42a086..9f28cc01812 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -6,18 +6,18 @@ using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; -using Microsoft.Toolkit.Uwp.UI.Media.Brushes.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 Microsoft.Toolkit.Uwp.UI.Media.Base; using BlendEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.BlendEffect; 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 TileEffect = Microsoft.Toolkit.Uwp.UI.Media.Effects.TileEffect; -namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +namespace Microsoft.Toolkit.Uwp.UI.Media { /// /// A that renders a customizable Composition/Win2D effects pipeline diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs index 16c08e486ff..b3765409004 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs @@ -3,11 +3,11 @@ // See the LICENSE file in the project root for more information. using System; -using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml; +using Microsoft.Toolkit.Uwp.UI.Media.Base; -namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +namespace Microsoft.Toolkit.Uwp.UI.Media { /// /// A that displays a tiled image diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs index 2e036a1d54b..7a2ccaa3e0a 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/XamlCompositionBrush.cs @@ -5,10 +5,10 @@ using System; using System.Diagnostics.Contracts; using System.Threading.Tasks; -using Microsoft.Toolkit.Uwp.UI.Media.Brushes.Base; +using Microsoft.Toolkit.Uwp.UI.Media.Base; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; -namespace Microsoft.Toolkit.Uwp.UI.Media.Brushes +namespace Microsoft.Toolkit.Uwp.UI.Media { /// /// A that represents a custom effect setter that can be applied to a instance diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs index b8166293da3..015355a22b8 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Interfaces/IPipelineEffect.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.Brushes; - namespace Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces { /// diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs index 9894569481c..e6568aeee26 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Pipelines/PipelineBuilder.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Threading.Tasks; -using Microsoft.Toolkit.Uwp.UI.Media.Brushes; using Microsoft.Toolkit.Uwp.UI.Media.Extensions; using Windows.Graphics.Effects; using Windows.UI.Composition; From ab21bafe8e4417e837be5d33f412a294b9f7d0d4 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 02:06:57 +0200 Subject: [PATCH 84/92] Fixed crash in pipeline sample page --- .../PipelineBrush/PipelineBrushPage.xaml | 49 +++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml index a514c2bdda3..7584815b8cc 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushPage.xaml @@ -18,29 +18,58 @@ - + - - + + + + + - + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + - + From 5a8f83b22f14913cca88e5b3fcf6cd6373c29a44 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 02:28:16 +0200 Subject: [PATCH 85/92] Switched BlendEffect.Mode to use proxy enum --- .../Brushes/PipelineBrush.cs | 12 ++++++++++-- .../Effects/BlendEffect.cs | 7 +++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs index 9f28cc01812..d2c00462b07 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -6,16 +6,24 @@ 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.Effects.Interfaces; using Microsoft.Toolkit.Uwp.UI.Media.Pipelines; using Windows.UI.Xaml.Media; -using Microsoft.Toolkit.Uwp.UI.Media.Base; 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 { @@ -104,7 +112,7 @@ private static PipelineBuilder Append(IPipelineEffect effect, PipelineBuilder bu case SaturationEffect saturation: return builder.Saturation((float)saturation.Value); case BlendEffect blend: - return builder.Blend(Build(blend.Input), blend.Mode, blend.Placement); + return builder.Blend(Build(blend.Input), (BlendEffectMode)blend.Mode, blend.Placement); default: throw new ArgumentException($"Invalid pipeline effect: {effect.GetType()}"); } diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/BlendEffect.cs index 7c19214ed40..611aae4a5e5 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.Graphics.Canvas.Effects; using Microsoft.Toolkit.Uwp.UI.Media.Effects.Interfaces; namespace Microsoft.Toolkit.Uwp.UI.Media.Effects @@ -20,12 +19,12 @@ public sealed class BlendEffect : IPipelineEffect public IList Input { get; set; } = new List(); /// - /// Gets or sets the blending mode to use (the default mode is ) + /// Gets or sets the blending mode to use (the default mode is ) /// - public BlendEffectMode Mode { get; set; } + 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 pipeline with respect to the current one (the default is ) /// public Placement Placement { get; set; } = Placement.Foreground; } From 65a2b14ba8b4fd2bbd602ec900eaf6842b08f92b Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 02:28:24 +0200 Subject: [PATCH 86/92] Minor code refactoring --- .../Enums/ImageBlendMode.cs | 65 ++++++++++--------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Enums/ImageBlendMode.cs b/Microsoft.Toolkit.Uwp.UI.Media/Enums/ImageBlendMode.cs index 91580a7e661..6a95de35d6c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Enums/ImageBlendMode.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Enums/ImageBlendMode.cs @@ -4,58 +4,59 @@ //// Composition supported version of http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_BlendEffectMode.htm. +using Microsoft.Graphics.Canvas.Effects; + #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - see http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_BlendEffectMode.htm. namespace Microsoft.Toolkit.Uwp.UI.Media { /// - /// Blend mode to use when compositing effects. See http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_BlendEffectMode.htm for details. + /// Blend mode to use when compositing effects. + /// See http://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_Effects_BlendEffectMode.htm for details. /// Dissolve is not supported. /// public enum ImageBlendMode { - Multiply = 0, - Screen = 1, - Darken = 2, - Lighten = 3, - - // Dissolve = 4, // Not Supported - ColorBurn = 5, - LinearBurn = 6, - DarkerColor = 7, - LighterColor = 8, - ColorDodge = 9, - LinearDodge = 10, - Overlay = 11, - SoftLight = 12, - HardLight = 13, - VividLight = 14, - LinearLight = 15, - PinLight = 16, - HardMix = 17, - Difference = 18, - Exclusion = 19, + Multiply = BlendEffectMode.Multiply, + Screen = BlendEffectMode.Screen, + Darken = BlendEffectMode.Darken, + Lighten = BlendEffectMode.Lighten, + ColorBurn = BlendEffectMode.ColorBurn, + LinearBurn = BlendEffectMode.LinearBurn, + DarkerColor = BlendEffectMode.DarkerColor, + LighterColor = BlendEffectMode.LighterColor, + ColorDodge = BlendEffectMode.ColorDodge, + LinearDodge = BlendEffectMode.LinearDodge, + Overlay = BlendEffectMode.Overlay, + SoftLight = BlendEffectMode.SoftLight, + HardLight = BlendEffectMode.HardLight, + VividLight = BlendEffectMode.VividLight, + LinearLight = BlendEffectMode.LinearLight, + PinLight = BlendEffectMode.PinLight, + HardMix = BlendEffectMode.HardMix, + Difference = BlendEffectMode.Difference, + Exclusion = BlendEffectMode.Exclusion, /// - /// Hue blend mode. Requires 16299 or higher. + /// Hue blend mode. /// - Hue = 20, + Hue = BlendEffectMode.Hue, /// - /// Saturation blend mode. Requires 16299 or higher. + /// Saturation blend mode. /// - Saturation = 21, + Saturation = BlendEffectMode.Saturation, /// - /// Color blend mode. Requires 16299 or higher. + /// Color blend mode. /// - Color = 22, + Color = BlendEffectMode.Color, /// - /// Luminosity blend mode. Requires 16299 or higher. + /// Luminosity blend mode. /// - Luminosity = 23, - Subtract = 24, - Division = 25, + Luminosity = BlendEffectMode.Luminosity, + Subtract = BlendEffectMode.Subtract, + Division = BlendEffectMode.Division, } } From 245e5ac0ee9e185b19faafc9d21d07104dad48bc Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 02:34:42 +0200 Subject: [PATCH 87/92] Added unicorn to PipelineBrush sample --- .../SamplePages/PipelineBrush/PipelineBrushXaml.bind | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind index d5f0dd8679d..6b3083b4698 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/PipelineBrush/PipelineBrushXaml.bind @@ -37,6 +37,11 @@ + + + + + From 8eb07e95ffa24d1ca1b8fddab6e18ec670f8023f Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 02:45:11 +0200 Subject: [PATCH 88/92] Fixed code URLs for brushes --- .../SamplePages/samples.json | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json index b2147edee82..90b06810153 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json @@ -1037,7 +1037,7 @@ "Name": "BackdropBlurBrush", "Type": "BackdropBlurBrushPage", "About": "Brush which fills the contents with a blurred version of whatever's behind it.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropBlurBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs", "XamlCodeFile": "BackdropBlurBrushXaml.bind", "Icon": "/SamplePages/BackdropBlurBrush/BackdropBlurBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1047,7 +1047,7 @@ "Name": "BackdropInvertBrush", "Type": "BackdropInvertBrushPage", "About": "Brush which fills the contents with an inverted version of whatever's behind it.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropInvertBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs", "XamlCodeFile": "BackdropInvertBrushXaml.bind", "Icon": "/SamplePages/BackdropInvertBrush/BackdropInvertBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1057,7 +1057,7 @@ "Name": "BackdropGammaTransferBrush", "Type": "BackdropGammaTransferBrushPage", "About": "Brush which fills the contents with a gamma modified version of whatever's behind it.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropGammaTransferBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropGammaTransferBrush.cs", "XamlCodeFile": "BackdropGammaTransferBrushXaml.bind", "Icon": "/SamplePages/BackdropGammaTransferBrush/BackdropGammaTransferBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1067,7 +1067,7 @@ "Name": "BackdropSaturationBrush", "Type": "BackdropSaturationBrushPage", "About": "Brush which applies a Saturation effect to whatever's behind it.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSaturationBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs", "XamlCodeFile": "BackdropSaturationBrushXaml.bind", "Icon": "/SamplePages/BackdropSaturationBrush/BackdropSaturationBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1077,7 +1077,7 @@ "Name": "BackdropSepiaBrush", "Type": "BackdropSepiaBrushPage", "About": "Brush which applies a Sepia effect to whatever's behind it.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs", "XamlCodeFile": "BackdropSepiaBrushXaml.bind", "Icon": "/SamplePages/BackdropSepiaBrush/BackdropSepiaBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1087,7 +1087,7 @@ "Name": "ImageBlendBrush", "Type": "ImageBlendBrushPage", "About": "Brush which applies a blending effect a given image from whatever's behind it.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/ImageBlendBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/ImageBlendBrush.cs", "XamlCodeFile": "ImageBlendBrushXaml.bind", "Icon": "/SamplePages/ImageBlendBrush/ImageBlendBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1097,7 +1097,7 @@ "Name": "RadialGradientBrush", "Type": "RadialGradientBrushPage", "About": "A composition brush which creates a radial gradient effect.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/RadialGradientBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/RadialGradientBrush.cs", "XamlCodeFile": "RadialGradientBrushXaml.bind", "Icon": "/SamplePages/RadialGradientBrush/RadialGradientBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1107,7 +1107,7 @@ "Name": "PipelineBrush", "Type": "PipelineBrushPage", "About": "A composition brush which can render any custom Win2D/Composition effects chain.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs", "CodeFile": "PipelineBrushCode.bind", "XamlCodeFile": "PipelineBrushXaml.bind", "Icon": "/SamplePages/PipelineBrush/PipelineBrush.png", @@ -1118,7 +1118,7 @@ "Name": "AcrylicBrush", "Type": "AcrylicBrushPage", "About": "A composition brush that provides a custom implementation of the official acrylic brush.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs", "XamlCodeFile": "AcrylicBrushXaml.bind", "Icon": "/SamplePages/AcrylicBrush/AcrylicBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", @@ -1128,7 +1128,7 @@ "Name": "TilesBrush", "Type": "TilesBrushPage", "About": "A composition brush that provides the ability to display a repeated image on its render surface.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI/Media/BackdropSepiaBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs", "XamlCodeFile": "TilesBrushXaml.bind", "Icon": "/SamplePages/TilesBrush/TilesBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", From 8e7bd0565a7fce9f360a374eef48b77aadc45711 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 02:45:58 +0200 Subject: [PATCH 89/92] Fixed documentation URLs to brushes --- .../SamplePages/samples.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json index 90b06810153..cdbadfb6bbb 100644 --- a/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json +++ b/Microsoft.Toolkit.Uwp.SampleApp/SamplePages/samples.json @@ -1107,32 +1107,32 @@ "Name": "PipelineBrush", "Type": "PipelineBrushPage", "About": "A composition brush which can render any custom Win2D/Composition effects chain.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs", "CodeFile": "PipelineBrushCode.bind", "XamlCodeFile": "PipelineBrushXaml.bind", "Icon": "/SamplePages/PipelineBrush/PipelineBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", - "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" + "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/PipelineBrush.md" }, { "Name": "AcrylicBrush", "Type": "AcrylicBrushPage", "About": "A composition brush that provides a custom implementation of the official acrylic brush.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs", "XamlCodeFile": "AcrylicBrushXaml.bind", "Icon": "/SamplePages/AcrylicBrush/AcrylicBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", - "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" + "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/AcrylicBrush.md" }, { "Name": "TilesBrush", "Type": "TilesBrushPage", "About": "A composition brush that provides the ability to display a repeated image on its render surface.", - "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs", + "CodeUrl": "https://github.com/windows-toolkit/WindowsCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs", "XamlCodeFile": "TilesBrushXaml.bind", "Icon": "/SamplePages/TilesBrush/TilesBrush.png", "ApiCheck": "Windows.UI.Xaml.Media.XamlCompositionBrushBase", - "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/BackdropSepiaBrush.md" + "DocumentationUrl": "https://raw.githubusercontent.com/MicrosoftDocs/WindowsCommunityToolkitDocs/master/docs/brushes/TilesBrush.md" } ] }, From cd4af986c1ae22d1dd09a0ea657acf3a208b96f9 Mon Sep 17 00:00:00 2001 From: michael-hawker <24302614+michael-hawker@users.noreply.github.com> Date: Sat, 16 May 2020 02:35:40 -0700 Subject: [PATCH 90/92] Fix StyleCop Issues with namespaces in Brushes --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs | 2 +- .../Brushes/BackdropSaturationBrush.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs | 2 +- Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs index 367f3d93723..3ee477d605c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/AcrylicBrush.cs @@ -3,12 +3,12 @@ // 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; using Windows.UI.Xaml; using Windows.UI.Xaml.Media; -using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs index 707a0ce2aff..69959a844c4 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropBlurBrush.cs @@ -4,11 +4,11 @@ //// 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; using Windows.UI.Xaml.Media; -using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs index f7805e7f5b1..156a27bd7a7 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropInvertBrush.cs @@ -4,9 +4,9 @@ //// 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; -using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs index aa70577da86..f358cfeab77 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSaturationBrush.cs @@ -2,10 +2,10 @@ // 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; -using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs index 536890a0c75..487e6897fa1 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/BackdropSepiaBrush.cs @@ -2,10 +2,10 @@ // 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; -using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs index b3765409004..8fedb87ec00 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs @@ -3,9 +3,9 @@ // 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; -using Microsoft.Toolkit.Uwp.UI.Media.Base; namespace Microsoft.Toolkit.Uwp.UI.Media { From fdfa755e718734051c493fd780a4ae6d58139eb3 Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 13:59:08 +0200 Subject: [PATCH 91/92] Fixed uppercase acronym in public property --- Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs | 4 ++-- .../Effects/Abstract/ImageEffectBase.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 d2c00462b07..d9a0b6d8846 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/PipelineBrush.cs @@ -65,9 +65,9 @@ private static PipelineBuilder Start(IPipelineEffect effect) case SolidColorEffect color: return PipelineBuilder.FromColor(color.Color); case ImageEffect image: - return PipelineBuilder.FromImage(image.Uri, image.DPIMode, image.CacheMode); + return PipelineBuilder.FromImage(image.Uri, image.DpiMode, image.CacheMode); case TileEffect tile: - return PipelineBuilder.FromTiles(tile.Uri, tile.DPIMode, tile.CacheMode); + 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: diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs index e388189a3cd..2934d4e23a5 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Effects/Abstract/ImageEffectBase.cs @@ -18,9 +18,9 @@ public abstract class ImageEffectBase : IPipelineEffect public Uri Uri { get; set; } /// - /// Gets or sets the DPI mode used to render the image (the default is ) + /// Gets or sets the DPI mode used to render the image (the default is ) /// - public DpiMode DPIMode { get; set; } = DpiMode.DisplayDpiWith96AsLowerBound; + public DpiMode DpiMode { get; set; } = DpiMode.DisplayDpiWith96AsLowerBound; /// /// Gets or sets the cache mode to use when loading the image (the default is ) From ade1e04a1d5696c37f2da8d6b68398376d2a92fc Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Sat, 16 May 2020 14:05:43 +0200 Subject: [PATCH 92/92] Added DpiMode property to TilesBrush --- .../Brushes/TilesBrush.cs | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs index 8fedb87ec00..be1950c9bd3 100644 --- a/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs +++ b/Microsoft.Toolkit.Uwp.UI.Media/Brushes/TilesBrush.cs @@ -30,14 +30,32 @@ public Uri TextureUri nameof(TextureUri), typeof(Uri), typeof(TilesBrush), - new PropertyMetadata(default, OnTextureUriPropertyChanged)); + new PropertyMetadata(default, OnDependencyPropertyChanged)); /// - /// Updates the UI when changes + /// Gets or sets the DPI mode used to render the texture (the default is ) /// - /// The current instance - /// The instance for - private static void OnTextureUriPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + public DpiMode DpiMode + { + get => (DpiMode)GetValue(DpiModeProperty); + set => SetValue(DpiModeProperty, value); + } + + /// + /// Identifies the dependency property. + /// + public static readonly DependencyProperty DpiModeProperty = DependencyProperty.Register( + nameof(DpiMode), + typeof(DpiMode), + typeof(TilesBrush), + new PropertyMetadata(DpiMode.DisplayDpiWith96AsLowerBound, OnDependencyPropertyChanged)); + + /// + /// Updates the UI when either or changes + /// + /// The current instance + /// The instance for or + private static void OnDependencyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is TilesBrush brush && brush.CompositionBrush != null) @@ -52,7 +70,7 @@ protected override PipelineBuilder OnBrushRequested() { if (TextureUri is Uri uri) { - return PipelineBuilder.FromTiles(uri); + return PipelineBuilder.FromTiles(uri, DpiMode); } return PipelineBuilder.FromColor(default);

_!u#z%B3pC!-G-eK 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 *n2~431{w_~I^nnu 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 AcK`qY literal 111184 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