From 3f306b48abd1dd35ee892d34d9bb375290c6486a Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Tue, 7 Mar 2023 17:06:40 +0100 Subject: [PATCH 01/34] fix(DrawingContext): CS0618 PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' ```bash Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Direct2D1.RenderTests, Avalonia.Skia.RenderTests .\tests\Avalonia.RenderTests\Media\ConicGradientBrushTests.cs 203 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Direct2D1.RenderTests, Avalonia.Skia.RenderTests .\tests\Avalonia.RenderTests\Media\LinearGradientBrushTests.cs 98 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Direct2D1.RenderTests, Avalonia.Skia.RenderTests .\tests\Avalonia.RenderTests\Media\RadialGradientBrushTests.cs 188 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Direct2D1.RenderTests, Avalonia.Skia.RenderTests .\tests\Avalonia.RenderTests\Media\TextFormatting\TextLayoutTests.cs 315 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Skia.UnitTests .\tests\Avalonia.Skia.UnitTests\Media\TextFormatting\TextFormatterTests.cs 795 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' ControlCatalog (netstandard2.0) .\samples\ControlCatalog\Pages\CustomDrawingExampleControl.cs 136 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' ControlCatalog (netstandard2.0) .\samples\ControlCatalog\Pages\CustomDrawingExampleControl.cs 140 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' ControlCatalog (netstandard2.0) .\samples\ControlCatalog\Pages\CustomDrawingExampleControl.cs 144 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' ControlCatalog (netstandard2.0) .\samples\ControlCatalog\Pages\CustomDrawingExampleControl.cs 146 Active Warning CS0618 'DrawingContext.PushPostTransform(Matrix)' is obsolete: 'Use PushTransform' RenderDemo .\samples\RenderDemo\Pages\RenderTargetBitmapPage.cs 32 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Base (net6.0), Avalonia.Base (netstandard2.0) .\src\Avalonia.Base\Media\DrawingGroup.cs 76 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Direct2D1.RenderTests, Avalonia.Skia.RenderTests .\tests\Avalonia.RenderTests\Controls\CustomRenderTests.cs 91 Active Warning CS0618 'DrawingContext.PushPreTransform(Matrix)' is obsolete: 'Use PushTransform' Avalonia.Direct2D1.RenderTests, Avalonia.Skia.RenderTests .\tests\Avalonia.RenderTests\Controls\CustomRenderTests.cs 115 Active ``` --- .../ControlCatalog/Pages/CustomDrawingExampleControl.cs | 8 ++++---- samples/RenderDemo/Pages/RenderTargetBitmapPage.cs | 2 +- src/Avalonia.Base/Media/DrawingGroup.cs | 2 +- src/Avalonia.Base/Rendering/ImmediateRenderer.cs | 4 ++-- src/Avalonia.Controls/SelectableTextBlock.cs | 2 +- src/Avalonia.Controls/TopLevel.cs | 1 - tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs | 4 ++-- .../Avalonia.RenderTests/Media/ConicGradientBrushTests.cs | 2 +- .../Media/LinearGradientBrushTests.cs | 2 +- .../Media/RadialGradientBrushTests.cs | 2 +- .../Media/TextFormatting/TextLayoutTests.cs | 2 +- .../Media/TextFormatting/TextFormatterTests.cs | 2 +- 12 files changed, 16 insertions(+), 17 deletions(-) diff --git a/samples/ControlCatalog/Pages/CustomDrawingExampleControl.cs b/samples/ControlCatalog/Pages/CustomDrawingExampleControl.cs index db74be7c08..549cf3d740 100644 --- a/samples/ControlCatalog/Pages/CustomDrawingExampleControl.cs +++ b/samples/ControlCatalog/Pages/CustomDrawingExampleControl.cs @@ -133,17 +133,17 @@ namespace ControlCatalog.Pages // 0,0 refers to the top-left of the control now. It is not prime time to draw gui stuff because it'll be under the world - var translateModifier = context.PushPreTransform(Avalonia.Matrix.CreateTranslation(new Avalonia.Vector(halfWidth, halfHeight))); + var translateModifier = context.PushTransform(Avalonia.Matrix.CreateTranslation(new Avalonia.Vector(halfWidth, halfHeight))); // now 0,0 refers to the ViewportCenter(X,Y). var rotationMatrix = Avalonia.Matrix.CreateRotation(Rotation); - var rotationModifier = context.PushPreTransform(rotationMatrix); + var rotationModifier = context.PushTransform(rotationMatrix); // everything is rotated but not scaled - var scaleModifier = context.PushPreTransform(Avalonia.Matrix.CreateScale(Scale, -Scale)); + var scaleModifier = context.PushTransform(Avalonia.Matrix.CreateScale(Scale, -Scale)); - var mapPositionModifier = context.PushPreTransform(Matrix.CreateTranslation(new Vector(-ViewportCenterX, -ViewportCenterY))); + var mapPositionModifier = context.PushTransform(Matrix.CreateTranslation(new Vector(-ViewportCenterX, -ViewportCenterY))); // now everything is rotated and scaled, and at the right position, now we're drawing strictly in world coordinates diff --git a/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs b/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs index b88dded39b..8d6fb15a32 100644 --- a/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs +++ b/samples/RenderDemo/Pages/RenderTargetBitmapPage.cs @@ -29,7 +29,7 @@ namespace RenderDemo.Pages public override void Render(DrawingContext context) { using (var ctx = _bitmap.CreateDrawingContext()) - using (ctx.PushPostTransform(Matrix.CreateTranslation(-100, -100) + using (ctx.PushTransform(Matrix.CreateTranslation(-100, -100) * Matrix.CreateRotation(_st.Elapsed.TotalSeconds) * Matrix.CreateTranslation(100, 100))) { diff --git a/src/Avalonia.Base/Media/DrawingGroup.cs b/src/Avalonia.Base/Media/DrawingGroup.cs index a41054202e..a0ed29250b 100644 --- a/src/Avalonia.Base/Media/DrawingGroup.cs +++ b/src/Avalonia.Base/Media/DrawingGroup.cs @@ -73,7 +73,7 @@ namespace Avalonia.Media { var bounds = GetBounds(); - using (context.PushPreTransform(Transform?.Value ?? Matrix.Identity)) + using (context.PushTransform(Transform?.Value ?? Matrix.Identity)) using (context.PushOpacity(Opacity, bounds)) using (ClipGeometry != null ? context.PushGeometryClip(ClipGeometry) : default) using (OpacityMask != null ? context.PushOpacityMask(OpacityMask, bounds) : default) diff --git a/src/Avalonia.Base/Rendering/ImmediateRenderer.cs b/src/Avalonia.Base/Rendering/ImmediateRenderer.cs index 4a12e78817..9b7d358b1d 100644 --- a/src/Avalonia.Base/Rendering/ImmediateRenderer.cs +++ b/src/Avalonia.Base/Rendering/ImmediateRenderer.cs @@ -83,7 +83,7 @@ namespace Avalonia.Rendering } } - using (context.PushPostTransform(m)) + using (context.PushTransform(m)) using (context.PushOpacity(opacity, bounds)) using (clipToBounds #pragma warning disable CS0618 // Type or member is obsolete @@ -95,7 +95,7 @@ namespace Avalonia.Rendering using (visual.Clip != null ? context.PushGeometryClip(visual.Clip) : default) using (visual.OpacityMask != null ? context.PushOpacityMask(visual.OpacityMask, bounds) : default) - using (context.PushTransformContainer()) + using (context.PushTransform(Matrix.Identity)) { visual.Render(context); diff --git a/src/Avalonia.Controls/SelectableTextBlock.cs b/src/Avalonia.Controls/SelectableTextBlock.cs index 6603e20a2a..a737c94719 100644 --- a/src/Avalonia.Controls/SelectableTextBlock.cs +++ b/src/Avalonia.Controls/SelectableTextBlock.cs @@ -204,7 +204,7 @@ namespace Avalonia.Controls var rects = TextLayout.HitTestTextRange(start, length); - using (context.PushPostTransform(Matrix.CreateTranslation(origin))) + using (context.PushTransform(Matrix.CreateTranslation(origin))) { foreach (var rect in rects) { diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs index 5c2a8c8a13..dcf387afab 100644 --- a/src/Avalonia.Controls/TopLevel.cs +++ b/src/Avalonia.Controls/TopLevel.cs @@ -15,7 +15,6 @@ using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Platform; using Avalonia.Platform.Storage; -using Avalonia.Reactive; using Avalonia.Rendering; using Avalonia.Styling; using Avalonia.Utilities; diff --git a/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs b/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs index 1199184d14..7a2c60baf4 100644 --- a/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs +++ b/tests/Avalonia.RenderTests/Controls/CustomRenderTests.cs @@ -88,7 +88,7 @@ namespace Avalonia.Direct2D1.RenderTests.Controls Height = 200, Child = new CustomRenderer((control, context) => { - using (var transform = context.PushPreTransform(Matrix.CreateTranslation(100, 100))) + using (var transform = context.PushTransform(Matrix.CreateTranslation(100, 100))) using (var clip = context.PushClip(new Rect(0, 0, 100, 100))) { context.FillRectangle(Brushes.Blue, new Rect(0, 0, 200, 200)); @@ -112,7 +112,7 @@ namespace Avalonia.Direct2D1.RenderTests.Controls Height = 200, Child = new CustomRenderer((control, context) => { - using (var transform = context.PushPreTransform(Matrix.CreateTranslation(100, 100))) + using (var transform = context.PushTransform(Matrix.CreateTranslation(100, 100))) using (var clip = context.PushClip(new Rect(0, 0, 100, 100))) { context.FillRectangle(Brushes.Blue, new Rect(0, 0, 200, 200)); diff --git a/tests/Avalonia.RenderTests/Media/ConicGradientBrushTests.cs b/tests/Avalonia.RenderTests/Media/ConicGradientBrushTests.cs index ef400410a4..a6170f9e94 100644 --- a/tests/Avalonia.RenderTests/Media/ConicGradientBrushTests.cs +++ b/tests/Avalonia.RenderTests/Media/ConicGradientBrushTests.cs @@ -200,7 +200,7 @@ namespace Avalonia.Direct2D1.RenderTests.Media Child = new DrawnControl(c => { c.DrawRectangle(brush, null, new Rect(0, 0, 100, 100)); - using (c.PushPreTransform(Matrix.CreateTranslation(100, 100))) + using (c.PushTransform(Matrix.CreateTranslation(100, 100))) c.DrawRectangle(brush, null, new Rect(0, 0, 100, 100)); }), }; diff --git a/tests/Avalonia.RenderTests/Media/LinearGradientBrushTests.cs b/tests/Avalonia.RenderTests/Media/LinearGradientBrushTests.cs index dd9d2f9b39..ac49b6d078 100644 --- a/tests/Avalonia.RenderTests/Media/LinearGradientBrushTests.cs +++ b/tests/Avalonia.RenderTests/Media/LinearGradientBrushTests.cs @@ -95,7 +95,7 @@ namespace Avalonia.Direct2D1.RenderTests.Media { c.DrawRectangle(brush, null, new Rect(0, 0, 100, 100)); - using (c.PushPreTransform(Matrix.CreateTranslation(100, 100))) + using (c.PushTransform(Matrix.CreateTranslation(100, 100))) c.DrawRectangle(brush, null, new Rect(0, 0, 100, 100)); }), }; diff --git a/tests/Avalonia.RenderTests/Media/RadialGradientBrushTests.cs b/tests/Avalonia.RenderTests/Media/RadialGradientBrushTests.cs index e52f844359..78f1b5c23f 100644 --- a/tests/Avalonia.RenderTests/Media/RadialGradientBrushTests.cs +++ b/tests/Avalonia.RenderTests/Media/RadialGradientBrushTests.cs @@ -185,7 +185,7 @@ namespace Avalonia.Direct2D1.RenderTests.Media Child = new DrawnControl(c => { c.DrawRectangle(brush, null, new Rect(0, 0, 100, 100)); - using (c.PushPreTransform(Matrix.CreateTranslation(100, 100))) + using (c.PushTransform(Matrix.CreateTranslation(100, 100))) c.DrawRectangle(brush, null, new Rect(0, 0, 100, 100)); }), }; diff --git a/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs b/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs index 7b128076cd..65fd670415 100644 --- a/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs +++ b/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs @@ -312,7 +312,7 @@ namespace Avalonia.Direct2D1.RenderTests.Media var rotate = Matrix.CreateTranslation(-100, -100) * Matrix.CreateRotation(MathUtilities.Deg2Rad(90)) * Matrix.CreateTranslation(100, 100); - using var transform = c.PushPreTransform(rotate); + using var transform = c.PushTransform(rotate); c.DrawRectangle(Brushes.Yellow, null, rect); t.Draw(c, rect.Position); }), diff --git a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs index dc8744b292..540c05f0da 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs @@ -792,7 +792,7 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting public override double Baseline => 0; public override void Draw(DrawingContext drawingContext, Point origin) { - using (drawingContext.PushPreTransform(Matrix.CreateTranslation(new Vector(origin.X, 0)))) + using (drawingContext.PushTransform(Matrix.CreateTranslation(new Vector(origin.X, 0)))) { drawingContext.FillRectangle(_fill, _rect); } From ad220a6af67f5498ec312bcf9ce152889fe3c7f1 Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Tue, 7 Mar 2023 17:14:38 +0100 Subject: [PATCH 02/34] fix: CS0618 'DataFormats.FileNames' is obsolete: 'Use DataFormats.Files Warning CS0618 'DataFormats.FileNames' is obsolete: 'Use DataFormats.Files, this format is supported only on desktop platforms.' ControlCatalog (net6.0), ControlCatalog (netstandard2.0) .\samples\ControlCatalog\Pages\ClipboardPage.xaml.cs 69 Active Warning CS0618 'DataFormats.FileNames' is obsolete: 'Use DataFormats.Files, this format is supported only on desktop platforms.' ControlCatalog (net6.0), ControlCatalog (netstandard2.0) .\samples\ControlCatalog\Pages\ClipboardPage.xaml.cs 78 Active --- .../Pages/ClipboardPage.xaml.cs | 59 +++++++++++++++---- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs b/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs index ef3d2bbafa..f3890aa49a 100644 --- a/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs +++ b/samples/ControlCatalog/Pages/ClipboardPage.xaml.cs @@ -1,16 +1,22 @@ using System; using System.Collections.Generic; - +using System.Linq; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Notifications; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; +using Avalonia.Platform; +using Avalonia.Platform.Storage; namespace ControlCatalog.Pages { public partial class ClipboardPage : UserControl { + private INotificationManager? _notificationManager; + private INotificationManager NotificationManager => _notificationManager + ??= new WindowNotificationManager(TopLevel.GetTopLevel(this)!); public ClipboardPage() { InitializeComponent(); @@ -31,7 +37,7 @@ namespace ControlCatalog.Pages private async void PasteText(object? sender, RoutedEventArgs args) { - if(Application.Current!.Clipboard is { } clipboard) + if (Application.Current!.Clipboard is { } clipboard) { ClipboardContent.Text = await clipboard.GetTextAsync(); } @@ -59,15 +65,45 @@ namespace ControlCatalog.Pages { if (Application.Current!.Clipboard is { } clipboard) { - var files = (ClipboardContent.Text ?? String.Empty) - .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - if (files.Length == 0) + var storageProvider = TopLevel.GetTopLevel(this)!.StorageProvider; + var filesPath = (ClipboardContent.Text ?? string.Empty) + .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + if (filesPath.Length == 0) { return; } - var dataObject = new DataObject(); - dataObject.Set(DataFormats.FileNames, files); - await clipboard.SetDataObjectAsync(dataObject); + List invalidFile = new(filesPath.Length); + List files = new(filesPath.Length); + + for (int i = 0; i < filesPath.Length; i++) + { + var file = await storageProvider.TryGetFileFromPathAsync(filesPath[i]); + if (file is null) + { + invalidFile.Add(filesPath[i]); + } + else + { + files.Add(file); + } + } + + if (invalidFile.Count > 0) + { + NotificationManager.Show(new Notification("Warning", "There is one o more invalid path.", NotificationType.Warning)); + } + + if (files.Count > 0) + { + var dataObject = new DataObject(); + dataObject.Set(DataFormats.Files, files); + await clipboard.SetDataObjectAsync(dataObject); + NotificationManager.Show(new Notification("Success", "Copy completated.", NotificationType.Success)); + } + else + { + NotificationManager.Show(new Notification("Warning", "Any files to copy in Clipboard.", NotificationType.Warning)); + } } } @@ -75,8 +111,9 @@ namespace ControlCatalog.Pages { if (Application.Current!.Clipboard is { } clipboard) { - var fiels = await clipboard.GetDataAsync(DataFormats.FileNames) as IEnumerable; - ClipboardContent.Text = fiels != null ? string.Join(Environment.NewLine, fiels) : string.Empty; + var files = await clipboard.GetDataAsync(DataFormats.Files) as IEnumerable; + + ClipboardContent.Text = files != null ? string.Join(Environment.NewLine, files.Select(f => f.Path)) : string.Empty; } } @@ -95,7 +132,7 @@ namespace ControlCatalog.Pages { await clipboard.ClearAsync(); } - + } } } From 9845dfadefa10bbe55a1fb80946dcecd256b56e5 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 13 Mar 2023 21:30:51 +0100 Subject: [PATCH 03/34] Add system decorations and extend client area opts --- samples/IntegrationTestApp/MainWindow.axaml | 6 +++++ .../IntegrationTestApp/MainWindow.axaml.cs | 4 ++++ .../IntegrationTestApp/ShowWindowTest.axaml | 24 ++++++++++++++----- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/samples/IntegrationTestApp/MainWindow.axaml b/samples/IntegrationTestApp/MainWindow.axaml index d4a96c5f17..bd840c03a7 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml +++ b/samples/IntegrationTestApp/MainWindow.axaml @@ -151,6 +151,12 @@ Maximized FullScreen + + None + BorderOnly + Full + + ExtendClientAreaToDecorationsHint Can Resize diff --git a/samples/IntegrationTestApp/MainWindow.axaml.cs b/samples/IntegrationTestApp/MainWindow.axaml.cs index 19eb1d64b0..e9b86b3bdd 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml.cs +++ b/samples/IntegrationTestApp/MainWindow.axaml.cs @@ -68,6 +68,8 @@ namespace IntegrationTestApp var locationComboBox = this.GetControl("ShowWindowLocation"); var stateComboBox = this.GetControl("ShowWindowState"); var size = !string.IsNullOrWhiteSpace(sizeTextBox.Text) ? Size.Parse(sizeTextBox.Text) : (Size?)null; + var systemDecorations = this.GetControl("ShowWindowSystemDecorations"); + var extendClientArea = this.GetControl("ShowWindowExtendClientAreaToDecorationsHint"); var canResizeCheckBox = this.GetControl("ShowWindowCanResize"); var owner = (Window)this.GetVisualRoot()!; @@ -95,6 +97,8 @@ namespace IntegrationTestApp } sizeTextBox.Text = string.Empty; + window.ExtendClientAreaToDecorationsHint = extendClientArea.IsChecked ?? false; + window.SystemDecorations = (SystemDecorations)systemDecorations.SelectedIndex; window.WindowState = (WindowState)stateComboBox.SelectedIndex; switch (modeComboBox.SelectedIndex) diff --git a/samples/IntegrationTestApp/ShowWindowTest.axaml b/samples/IntegrationTestApp/ShowWindowTest.axaml index bd6910dd4d..720ff6c344 100644 --- a/samples/IntegrationTestApp/ShowWindowTest.axaml +++ b/samples/IntegrationTestApp/ShowWindowTest.axaml @@ -6,7 +6,7 @@ x:DataType="Window" Title="Show Window Test"> - + @@ -35,13 +35,25 @@ FullScreen - - + + + None + BorderOnly + Full + + + + ExtendClientAreaToDecorationsHint + + + + -