From ff4ec166900a4552a8e07955d5122654be74026b Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 1 Feb 2022 21:02:44 +0100 Subject: [PATCH] Layer properties - Added string input Profile editor - Run render loop on a DispatcherTimer when playing --- .gitattributes | 3 + .../Artemis.UI.Linux/Artemis.UI.Linux.csproj | 10 +- .../Artemis.UI.Linux/packages.lock.json | 204 ++++++++--------- .../Artemis.UI.MacOS/Artemis.UI.MacOS.csproj | 10 +- .../Artemis.UI.MacOS/packages.lock.json | 204 ++++++++--------- .../Artemis.UI.Shared.csproj | 14 +- .../Extensions/SKMatrixExtensions.cs | 19 ++ .../Extensions/SKRectExtensions.cs | 17 ++ .../Commands/ToggleLayerPropertyKeyframes.cs | 11 +- .../ProfileEditor/ProfileEditorService.cs | 154 +++++++------ .../PropertyInput/PropertyInputViewModel.cs | 37 ++-- .../Artemis.UI.Shared/Styles/NumberBox.axaml | 15 +- .../Artemis.UI.Shared/packages.lock.json | 120 +++++----- .../Artemis.UI.Windows.csproj | 12 +- .../Artemis.UI.Windows/packages.lock.json | 206 +++++++++--------- src/Avalonia/Artemis.UI/Artemis.UI.csproj | 22 +- .../FloatPropertyInputView.axaml | 9 +- .../FloatPropertyInputViewModel.cs | 2 +- .../PropertyInput/PropertyInputStyles.axaml | 52 +++++ .../StringPropertyInputView.axaml | 19 ++ .../StringPropertyInputView.axaml.cs | 25 +++ .../StringPropertyInputViewModel.cs | 13 ++ .../Ninject/Factories/IVMFactory.cs | 2 + .../Panels/Playback/PlaybackViewModel.cs | 70 +++--- .../Properties/Tree/TreePropertyView.axaml | 3 +- .../Properties/Tree/TreePropertyViewModel.cs | 12 +- .../VisualEditor/Tools/IToolViewModel.cs | 6 + .../VisualEditor/VisualEditorView.axaml | 20 ++ .../VisualEditor/VisualEditorViewModel.cs | 50 +++-- .../Visualizers/IVisualizerViewModel.cs | 5 + .../Visualizers/LayerVisualizerView.axaml | 23 ++ .../Visualizers/LayerVisualizerView.axaml.cs | 18 ++ .../Visualizers/LayerVisualizerViewModel.cs | 67 ++++++ src/Avalonia/Artemis.UI/packages.lock.json | 194 ++++++++--------- 34 files changed, 1003 insertions(+), 645 deletions(-) create mode 100644 src/Avalonia/Artemis.UI.Shared/Extensions/SKMatrixExtensions.cs create mode 100644 src/Avalonia/Artemis.UI.Shared/Extensions/SKRectExtensions.cs create mode 100644 src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/PropertyInputStyles.axaml create mode 100644 src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml create mode 100644 src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml.cs create mode 100644 src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputViewModel.cs create mode 100644 src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/VisualEditor/Tools/IToolViewModel.cs create mode 100644 src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/VisualEditor/Visualizers/IVisualizerViewModel.cs create mode 100644 src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/VisualEditor/Visualizers/LayerVisualizerView.axaml create mode 100644 src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/VisualEditor/Visualizers/LayerVisualizerView.axaml.cs create mode 100644 src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/VisualEditor/Visualizers/LayerVisualizerViewModel.cs diff --git a/.gitattributes b/.gitattributes index 1ff0c4230..0753195f4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -61,3 +61,6 @@ #*.PDF diff=astextplain #*.rtf diff=astextplain #*.RTF diff=astextplain + +# Display axaml files with XML highlighting +*.axaml linguist-language=xml \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI.Linux/Artemis.UI.Linux.csproj b/src/Avalonia/Artemis.UI.Linux/Artemis.UI.Linux.csproj index b6ed8df49..522d3d795 100644 --- a/src/Avalonia/Artemis.UI.Linux/Artemis.UI.Linux.csproj +++ b/src/Avalonia/Artemis.UI.Linux/Artemis.UI.Linux.csproj @@ -10,12 +10,12 @@ - - + + - - - + + + diff --git a/src/Avalonia/Artemis.UI.Linux/packages.lock.json b/src/Avalonia/Artemis.UI.Linux/packages.lock.json index 684d112e1..024c40a50 100644 --- a/src/Avalonia/Artemis.UI.Linux/packages.lock.json +++ b/src/Avalonia/Artemis.UI.Linux/packages.lock.json @@ -4,11 +4,11 @@ "net6.0": { "Avalonia": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "2PSE+dB4vGJfG+1M+y+Hwaxiqze5mbBTTG9hjwc2Z3U/9yJE/GThBEst2WwI0yBt13hsfAfbABzt1PA3mtbFdw==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "ftI5uGBFvWJpizGc6PT6lOb6FiO8AWcSYS9N4FWvXgOvuqWuTgmjwURPUkvajpeaQLKOOea6AbgotSyhV8NNoQ==", "dependencies": { - "Avalonia.Remote.Protocol": "0.10.11", + "Avalonia.Remote.Protocol": "0.10.12", "JetBrains.Annotations": "10.3.0", "System.ComponentModel.Annotations": "4.5.0", "System.Memory": "4.5.3", @@ -19,48 +19,48 @@ }, "Avalonia.Desktop": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "PQTl4lm7IZidzltMwC7RSNaoz7TYNznU8SKa/WaAI6ycMzC0On2DsqiL1dXr6WhYzMazyMJj6kBhiQzHIc1lIQ==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "wy4k1uarrmZJSJENCe1hjNpdCJWhup0gt6KA2TtZILfGG7imj+an5IuQZUSXtA7cl7A+6tF6lPQLo82gESUlXQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Native": "0.10.11", - "Avalonia.Skia": "0.10.11", - "Avalonia.Win32": "0.10.11", - "Avalonia.X11": "0.10.11" + "Avalonia": "0.10.12", + "Avalonia.Native": "0.10.12", + "Avalonia.Skia": "0.10.12", + "Avalonia.Win32": "0.10.12", + "Avalonia.X11": "0.10.12" } }, "Avalonia.Diagnostics": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "xBvBkF2DBKjddAfQbExd660zQ5RaDEXH1JgAdMyYOdu3qFL6d+QHyZdVHVeQFilNYE03F6C8AbMWrmj6dBUNlg==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "Pf9DGiSwl3+gPrRSHKFzDG20I9QJ5P1g6BexLKfHQH9+Cmax+a/UEVYQq4hGn0xhrmpuLYOeGHb8wasjAT4EfQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Controls.DataGrid": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Controls.DataGrid": "0.10.12", "Microsoft.CodeAnalysis.CSharp.Scripting": "3.4.0", "System.Reactive": "5.0.0" } }, "Avalonia.ReactiveUI": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "I/++/4Halsx9HIp99nBwB2nIMrI9zw2M8wDcK1HaYVMKU+m3KFA9w+DfV7g/wEceWSMeX7yAvUjRnaUYtBO08Q==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "dOszpMtBKEACAFWtjwNibXMF2SBolJ3cV8ffDEOy2uuwjKBJqbSmHH+WSnui9KfbSF2igVpam4TqO6drJuEvjw==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "ReactiveUI": "13.2.10", "System.Reactive": "5.0.0" } }, "ReactiveUI": { "type": "Direct", - "requested": "[16.3.10, )", - "resolved": "16.3.10", - "contentHash": "NH9bg8BROqRrTp6YLpPDsJrfNDzRWNmP63fQ68CBAM+i7YHi6wcPeOkxyKpoemUxKEY4QECuicaTblJnxgbWmA==", + "requested": "[17.1.17, )", + "resolved": "17.1.17", + "contentHash": "0DLq44k4CVvfXcWHE4uigQa/wySOzxOTnWg50j2qZDpWzl9OP7QfIDJo39X3ffEjaVcCUFcbF9xAmm7fRX/q2g==", "dependencies": { - "DynamicData": "7.4.3", - "Splat": "13.1.42" + "DynamicData": "7.4.9", + "Splat": "14.1.17" } }, "Avalonia.Angle.Windows.Natives": { @@ -70,51 +70,51 @@ }, "Avalonia.Controls.DataGrid": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "zvt6QA2uwe18gJ/XdnSMTHG6L/2usvjoaAdPC+Lgg+DmUPNTjqN+Hm1l0AjUtNNId6G+4iIkysiZ2WiHPqGsEA==", + "resolved": "0.10.12", + "contentHash": "i3zM3P8PUY4FNhATZoFWkto3H66FcIrnJNMyOsl1fN0FPS6meysAwCKQwuou/oapyzZEODeAmCVdqB0AgjNHVw==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Remote.Protocol": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Remote.Protocol": "0.10.12", "JetBrains.Annotations": "10.3.0", "System.Reactive": "5.0.0" } }, "Avalonia.Controls.PanAndZoom": { "type": "Transitive", - "resolved": "10.11.1", - "contentHash": "XIjA3iGHMfokPXw/ov5CqKKPR8HdVrTBOMYJVOGpDQyec6RwI/w7lq530wfIMebIe9xUj5RY2Jx5heQtCuAFmg==", + "resolved": "10.12.0", + "contentHash": "ns+2tJTXTpNzNA9YV2mjR4EJOZl2vBFWnGUTSIl/vyOQMrrU5CbsXQxy2MFBvW0vGrRTlw80nUtBnsT759kwKQ==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Avalonia.FreeDesktop": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "cj8T11WQ5/opR2IPttb1Bo89aHclkuvHYsCB7HzZU/F7l/cKXbKUOhyo60p44BdFzrCqjNXDnKQbxeRv+OSF7A==", + "resolved": "0.10.12", + "contentHash": "j42uWCWkAfZchYPrdRccr4mjB0kppSby3TEMCuNrp9GcQi+JhEPEbBAohU7FpR4bkv5FF2KAlDX5WiG2T+04kg==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "Tmds.DBus": "0.9.0" } }, "Avalonia.Native": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "9fBC9UArVXEmsxL2Nd0KHGoZUCqcTo06NTlOTAeM3qdEWzE8a0qRVYiR2WeYfADXpKR1D/fQz5zWUZcebFYFIA==", + "resolved": "0.10.12", + "contentHash": "JnZc0zF7DcLcSX+SdnKQGzFa9mcKxawhTN8S3aiN8Eh3MZAKxa45LRrHFVTcHcy2jU4kOw+yPfONUmHpRcC0gw==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Avalonia.Remote.Protocol": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "kID2N/cXg7KCGFYFTOWCvSLt+oMFRApLfLcbLU35keC/jwDi9tFk33CEdo81hBEg15lAtTtCfvHhNPyVyIYijQ==" + "resolved": "0.10.12", + "contentHash": "ArrxniR8iShzMvXCS3vt5FXg9Fv3qK1UKzJwsSsY9iCuC8wKo2eevRj42qOhMCS98POTH5v8aUZBeoLlENa0vA==" }, "Avalonia.Skia": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "4bP5V3BpnZ+If2/ZrZofeRsINeZ6gemLjfNyElt7vNF4HZaRfot03anO3Y+Z7mTELjuol6n/5lAL4+kQUN/O/w==", + "resolved": "0.10.12", + "contentHash": "3TGo8RLHaLqmU3chlyAqLkpw6vImfDMC30T18abpeYf1PIsNckRB+UFp12GDil9t/J9YB17zn4H6N+2plF4gZA==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "HarfBuzzSharp": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.Linux": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.WebAssembly": "2.8.2-preview.178", @@ -125,21 +125,21 @@ }, "Avalonia.Svg.Skia": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "Zw1kfOWN7ZaMqnoJsKqvU/8GxGbrv4KrkAbbLVHvhZl4sA0VZEjqdtxUAqSHlJrYtjPfaUzzDP9K3l0KCqnx/Q==", + "resolved": "0.10.12", + "contentHash": "qsXKdm5eWpfoVPe0xgtxhbOYlhG8QdbYNJZTTihg/c4iPFYuh1G7DldiNskuVFuGiGxLVZ0g6ebql7ZkwbO1pA==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Skia": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Skia": "0.10.12", "SkiaSharp": "2.88.0-preview.178", - "Svg.Skia": "0.5.11" + "Svg.Skia": "0.5.12" } }, "Avalonia.Win32": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "bckqh8rnQ4+l2kdU4njO3cBKaT4l1HQkxdVYJLAgl44uMtoCpaN7EidrBTnuM40DXa0cpvOh97A+G8jpZgte6Q==", + "resolved": "0.10.12", + "contentHash": "CnC65T8ScMK23BB+qJuiMicWQ5QIEiinnRzPqvAGUGyQbjIGpA5uOCKwzsOjUmzkhGqt31iDR0/Y3ZFbi5Mjog==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "Avalonia.Angle.Windows.Natives": "2.1.0.2020091801", "System.Drawing.Common": "4.5.0", "System.Numerics.Vectors": "4.5.0" @@ -147,39 +147,39 @@ }, "Avalonia.X11": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "joPVaMmPy4bC1STSk5+fAn5zZOT3gz4m/YSv6io3p2q68kEbc+d5KaYk/KcqA/WGiBBQx4a0ViPW/IRomI94kw==", + "resolved": "0.10.12", + "contentHash": "mUY1cF1p86/UgLl1cbSmY3nVIatKQsSCDOH4avssL07xmKlRfB2G7Gi8jlhWNkLJTLL7iQp/u3X6bv7bs+0zNQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.FreeDesktop": "0.10.11", - "Avalonia.Skia": "0.10.11" + "Avalonia": "0.10.12", + "Avalonia.FreeDesktop": "0.10.12", + "Avalonia.Skia": "0.10.12" } }, "Avalonia.Xaml.Behaviors": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "XHU7/hRYWEdaJOs+weT9ml9/GYqroPrAtePjGzUzUrMoHESbqmkLXmW+fHkaAeXRMJAOAFD1LQUHQu+B6ThF3w==", + "resolved": "0.10.12", + "contentHash": "upv7v1gZ31tCukw/KA1bB5+z29QuEWiZJ4KnW10daHlia1ru7q4lUJ/vCYKOy5L+zyi1MQg98SNYjRp5C64ZhQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactions": "0.10.11.5", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactions": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactions": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "MpqS1t1zypDNEW2Pyg113W4AwmfaWai5LfA/K22sDbygXII+KuACaHt2ZPHJWnvKGHgasLEEFhEOGfF5cB9NPA==", + "resolved": "0.10.12", + "contentHash": "PSohbY4aQGiJVWfvLKkuUE71ZxvZ0/FuTc3Y5GJgTC41kCgeaiJTczkC2FjW5sZ8exPDabSp+ZukSsnm/z6y7A==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactivity": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "MOM6lcPenJZu9LPhai3n67GssBUx3MjoCVLyR2GEJ6lywKQgk4MKOIAC0gLWgy7x1e540oy4lCpeX8jMsqe7mA==", + "resolved": "0.10.12", + "contentHash": "uey4LjyIds78igMe7AZ072RI6GpO16sd6+6XF6LG0oE07De7ei0So14oOs4wLS4WJyaKDRSUK6PuhLaY1zIZdQ==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Castle.Core": { @@ -436,10 +436,10 @@ }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", + "resolved": "4.5.0", + "contentHash": "LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==", "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0" } }, "NETStandard.Library": { @@ -699,8 +699,8 @@ }, "ShimSkiaSharp": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "a04YHHKRK1xY8ccSgpa6HOmOw9Kuivo2b2qejp9CK00ykdCBK3Mmc+ekBx954+zPQBksN6aLhvn1SEL7QG2s8Q==" + "resolved": "0.5.12", + "contentHash": "oUGM7gQHRzbGPRs3E1pe5e8VwML21YyEz9xdo+r2ov1mAqSDPyXErVQP6pN4gnfYMVf5ADR7BVkVzt4R9Iz3gQ==" }, "SkiaSharp": { "type": "Transitive", @@ -760,11 +760,10 @@ }, "Svg.Custom": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "8OEW3UKx07JfEyqzzvF5+ycydusZjg6jsBjDSBrAoq62c5gNZrs6brlOKm2ywEj9hObK3sLcat5BHnE2OUHXsg==", + "resolved": "0.5.12", + "contentHash": "kmjLQf5U5WC7tRGBedUhtrOUCR0NaNL2auzOA2a/oMwEA0Bjrpd6qvMTpJUS3HITxi8vJazGl270K+i0JvdJog==", "dependencies": { "Fizzler": "1.2.0", - "System.Drawing.Common": "5.0.0", "System.Memory": "4.5.3", "System.ObjectModel": "4.3.0", "System.ValueTuple": "4.5.0" @@ -772,22 +771,22 @@ }, "Svg.Model": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "5/Y+BGjgTwobA9aDfcpTGF/bm83MYrEYM8J1LpPohRR+c+B/1N+rbSXfpDZq2omBJ1O0Sa5VjAXw1oAdm1lYLg==", + "resolved": "0.5.12", + "contentHash": "/CPiXIugg4oVyYlQr26fB1X9iQfICALF8AJXbTWnXGoP2WZa1t6aZbAXPk3HoPApA0w5waf3XXkBiYYnWwawaQ==", "dependencies": { - "ShimSkiaSharp": "0.5.11", - "Svg.Custom": "0.5.11" + "ShimSkiaSharp": "0.5.12", + "Svg.Custom": "0.5.12" } }, "Svg.Skia": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "AiN5rSsYBzBUkoh8YK5HoNxRxHtUekp2/6ZAol8qV8oDr6vu8hmPuWjUDwvqCFMi9Dlllc6YsFfvJ1PZCJvYew==", + "resolved": "0.5.12", + "contentHash": "KjKpjz0FKge+WpRzjD1bqywAW3vZhXwpR5c7Ej5OuP4xDrQjBwtFeB0iZ+yEJMzwXf/Rs4ImuN8m3bmBDJvMHg==", "dependencies": { "SkiaSharp": "2.88.0-preview.178", "SkiaSharp.HarfBuzz": "2.88.0-preview.178", - "Svg.Custom": "0.5.11", - "Svg.Model": "0.5.11" + "Svg.Custom": "0.5.12", + "Svg.Model": "0.5.12" } }, "System.AppContext": { @@ -979,10 +978,11 @@ }, "System.Drawing.Common": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "resolved": "4.5.0", + "contentHash": "AiJFxxVPdeITstiRS5aAu8+8Dpf5NawTMoapZ53Gfirml24p7HIfhjmCRxdXnmmf3IUA3AX3CcW7G73CjWxW/Q==", "dependencies": { - "Microsoft.Win32.SystemEvents": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.Win32.SystemEvents": "4.5.0" } }, "System.Dynamic.Runtime": { @@ -1746,12 +1746,12 @@ "dependencies": { "Artemis.Core": "1.0.0", "Artemis.UI.Shared": "1.0.0", - "Avalonia": "0.10.11", - "Avalonia.Controls.PanAndZoom": "10.11.1", - "Avalonia.Desktop": "0.10.11", - "Avalonia.Diagnostics": "0.10.11", - "Avalonia.ReactiveUI": "0.10.11", - "Avalonia.Svg.Skia": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Controls.PanAndZoom": "10.12.0", + "Avalonia.Desktop": "0.10.12", + "Avalonia.Diagnostics": "0.10.12", + "Avalonia.ReactiveUI": "0.10.12", + "Avalonia.Svg.Skia": "0.10.12", "DynamicData": "7.4.9", "FluentAvaloniaUI": "1.1.8", "Flurl.Http": "3.2.0", @@ -1759,7 +1759,7 @@ "Material.Icons.Avalonia": "1.0.2", "RGB.NET.Core": "1.0.0-prerelease7", "RGB.NET.Layout": "1.0.0-prerelease7", - "ReactiveUI": "16.3.10", + "ReactiveUI": "17.1.17", "ReactiveUI.Validation": "2.2.1", "SkiaSharp": "2.88.0-preview.178", "Splat.Ninject": "14.1.17" @@ -1769,17 +1769,17 @@ "type": "Project", "dependencies": { "Artemis.Core": "1.0.0", - "Avalonia": "0.10.11", - "Avalonia.ReactiveUI": "0.10.11", - "Avalonia.Svg.Skia": "0.10.11", - "Avalonia.Xaml.Behaviors": "0.10.11.5", - "Avalonia.Xaml.Interactions": "0.10.11.5", - "Avalonia.Xaml.Interactivity": "0.10.11.5", + "Avalonia": "0.10.12", + "Avalonia.ReactiveUI": "0.10.12", + "Avalonia.Svg.Skia": "0.10.12", + "Avalonia.Xaml.Behaviors": "0.10.12", + "Avalonia.Xaml.Interactions": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12", "DynamicData": "7.4.9", "FluentAvaloniaUI": "1.1.8", "Material.Icons.Avalonia": "1.0.2", "RGB.NET.Core": "1.0.0-prerelease7", - "ReactiveUI": "16.3.10", + "ReactiveUI": "17.1.17", "ReactiveUI.Validation": "2.2.1", "SkiaSharp": "2.88.0-preview.178" } diff --git a/src/Avalonia/Artemis.UI.MacOS/Artemis.UI.MacOS.csproj b/src/Avalonia/Artemis.UI.MacOS/Artemis.UI.MacOS.csproj index b6ed8df49..522d3d795 100644 --- a/src/Avalonia/Artemis.UI.MacOS/Artemis.UI.MacOS.csproj +++ b/src/Avalonia/Artemis.UI.MacOS/Artemis.UI.MacOS.csproj @@ -10,12 +10,12 @@ - - + + - - - + + + diff --git a/src/Avalonia/Artemis.UI.MacOS/packages.lock.json b/src/Avalonia/Artemis.UI.MacOS/packages.lock.json index 684d112e1..024c40a50 100644 --- a/src/Avalonia/Artemis.UI.MacOS/packages.lock.json +++ b/src/Avalonia/Artemis.UI.MacOS/packages.lock.json @@ -4,11 +4,11 @@ "net6.0": { "Avalonia": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "2PSE+dB4vGJfG+1M+y+Hwaxiqze5mbBTTG9hjwc2Z3U/9yJE/GThBEst2WwI0yBt13hsfAfbABzt1PA3mtbFdw==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "ftI5uGBFvWJpizGc6PT6lOb6FiO8AWcSYS9N4FWvXgOvuqWuTgmjwURPUkvajpeaQLKOOea6AbgotSyhV8NNoQ==", "dependencies": { - "Avalonia.Remote.Protocol": "0.10.11", + "Avalonia.Remote.Protocol": "0.10.12", "JetBrains.Annotations": "10.3.0", "System.ComponentModel.Annotations": "4.5.0", "System.Memory": "4.5.3", @@ -19,48 +19,48 @@ }, "Avalonia.Desktop": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "PQTl4lm7IZidzltMwC7RSNaoz7TYNznU8SKa/WaAI6ycMzC0On2DsqiL1dXr6WhYzMazyMJj6kBhiQzHIc1lIQ==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "wy4k1uarrmZJSJENCe1hjNpdCJWhup0gt6KA2TtZILfGG7imj+an5IuQZUSXtA7cl7A+6tF6lPQLo82gESUlXQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Native": "0.10.11", - "Avalonia.Skia": "0.10.11", - "Avalonia.Win32": "0.10.11", - "Avalonia.X11": "0.10.11" + "Avalonia": "0.10.12", + "Avalonia.Native": "0.10.12", + "Avalonia.Skia": "0.10.12", + "Avalonia.Win32": "0.10.12", + "Avalonia.X11": "0.10.12" } }, "Avalonia.Diagnostics": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "xBvBkF2DBKjddAfQbExd660zQ5RaDEXH1JgAdMyYOdu3qFL6d+QHyZdVHVeQFilNYE03F6C8AbMWrmj6dBUNlg==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "Pf9DGiSwl3+gPrRSHKFzDG20I9QJ5P1g6BexLKfHQH9+Cmax+a/UEVYQq4hGn0xhrmpuLYOeGHb8wasjAT4EfQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Controls.DataGrid": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Controls.DataGrid": "0.10.12", "Microsoft.CodeAnalysis.CSharp.Scripting": "3.4.0", "System.Reactive": "5.0.0" } }, "Avalonia.ReactiveUI": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "I/++/4Halsx9HIp99nBwB2nIMrI9zw2M8wDcK1HaYVMKU+m3KFA9w+DfV7g/wEceWSMeX7yAvUjRnaUYtBO08Q==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "dOszpMtBKEACAFWtjwNibXMF2SBolJ3cV8ffDEOy2uuwjKBJqbSmHH+WSnui9KfbSF2igVpam4TqO6drJuEvjw==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "ReactiveUI": "13.2.10", "System.Reactive": "5.0.0" } }, "ReactiveUI": { "type": "Direct", - "requested": "[16.3.10, )", - "resolved": "16.3.10", - "contentHash": "NH9bg8BROqRrTp6YLpPDsJrfNDzRWNmP63fQ68CBAM+i7YHi6wcPeOkxyKpoemUxKEY4QECuicaTblJnxgbWmA==", + "requested": "[17.1.17, )", + "resolved": "17.1.17", + "contentHash": "0DLq44k4CVvfXcWHE4uigQa/wySOzxOTnWg50j2qZDpWzl9OP7QfIDJo39X3ffEjaVcCUFcbF9xAmm7fRX/q2g==", "dependencies": { - "DynamicData": "7.4.3", - "Splat": "13.1.42" + "DynamicData": "7.4.9", + "Splat": "14.1.17" } }, "Avalonia.Angle.Windows.Natives": { @@ -70,51 +70,51 @@ }, "Avalonia.Controls.DataGrid": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "zvt6QA2uwe18gJ/XdnSMTHG6L/2usvjoaAdPC+Lgg+DmUPNTjqN+Hm1l0AjUtNNId6G+4iIkysiZ2WiHPqGsEA==", + "resolved": "0.10.12", + "contentHash": "i3zM3P8PUY4FNhATZoFWkto3H66FcIrnJNMyOsl1fN0FPS6meysAwCKQwuou/oapyzZEODeAmCVdqB0AgjNHVw==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Remote.Protocol": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Remote.Protocol": "0.10.12", "JetBrains.Annotations": "10.3.0", "System.Reactive": "5.0.0" } }, "Avalonia.Controls.PanAndZoom": { "type": "Transitive", - "resolved": "10.11.1", - "contentHash": "XIjA3iGHMfokPXw/ov5CqKKPR8HdVrTBOMYJVOGpDQyec6RwI/w7lq530wfIMebIe9xUj5RY2Jx5heQtCuAFmg==", + "resolved": "10.12.0", + "contentHash": "ns+2tJTXTpNzNA9YV2mjR4EJOZl2vBFWnGUTSIl/vyOQMrrU5CbsXQxy2MFBvW0vGrRTlw80nUtBnsT759kwKQ==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Avalonia.FreeDesktop": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "cj8T11WQ5/opR2IPttb1Bo89aHclkuvHYsCB7HzZU/F7l/cKXbKUOhyo60p44BdFzrCqjNXDnKQbxeRv+OSF7A==", + "resolved": "0.10.12", + "contentHash": "j42uWCWkAfZchYPrdRccr4mjB0kppSby3TEMCuNrp9GcQi+JhEPEbBAohU7FpR4bkv5FF2KAlDX5WiG2T+04kg==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "Tmds.DBus": "0.9.0" } }, "Avalonia.Native": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "9fBC9UArVXEmsxL2Nd0KHGoZUCqcTo06NTlOTAeM3qdEWzE8a0qRVYiR2WeYfADXpKR1D/fQz5zWUZcebFYFIA==", + "resolved": "0.10.12", + "contentHash": "JnZc0zF7DcLcSX+SdnKQGzFa9mcKxawhTN8S3aiN8Eh3MZAKxa45LRrHFVTcHcy2jU4kOw+yPfONUmHpRcC0gw==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Avalonia.Remote.Protocol": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "kID2N/cXg7KCGFYFTOWCvSLt+oMFRApLfLcbLU35keC/jwDi9tFk33CEdo81hBEg15lAtTtCfvHhNPyVyIYijQ==" + "resolved": "0.10.12", + "contentHash": "ArrxniR8iShzMvXCS3vt5FXg9Fv3qK1UKzJwsSsY9iCuC8wKo2eevRj42qOhMCS98POTH5v8aUZBeoLlENa0vA==" }, "Avalonia.Skia": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "4bP5V3BpnZ+If2/ZrZofeRsINeZ6gemLjfNyElt7vNF4HZaRfot03anO3Y+Z7mTELjuol6n/5lAL4+kQUN/O/w==", + "resolved": "0.10.12", + "contentHash": "3TGo8RLHaLqmU3chlyAqLkpw6vImfDMC30T18abpeYf1PIsNckRB+UFp12GDil9t/J9YB17zn4H6N+2plF4gZA==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "HarfBuzzSharp": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.Linux": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.WebAssembly": "2.8.2-preview.178", @@ -125,21 +125,21 @@ }, "Avalonia.Svg.Skia": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "Zw1kfOWN7ZaMqnoJsKqvU/8GxGbrv4KrkAbbLVHvhZl4sA0VZEjqdtxUAqSHlJrYtjPfaUzzDP9K3l0KCqnx/Q==", + "resolved": "0.10.12", + "contentHash": "qsXKdm5eWpfoVPe0xgtxhbOYlhG8QdbYNJZTTihg/c4iPFYuh1G7DldiNskuVFuGiGxLVZ0g6ebql7ZkwbO1pA==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Skia": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Skia": "0.10.12", "SkiaSharp": "2.88.0-preview.178", - "Svg.Skia": "0.5.11" + "Svg.Skia": "0.5.12" } }, "Avalonia.Win32": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "bckqh8rnQ4+l2kdU4njO3cBKaT4l1HQkxdVYJLAgl44uMtoCpaN7EidrBTnuM40DXa0cpvOh97A+G8jpZgte6Q==", + "resolved": "0.10.12", + "contentHash": "CnC65T8ScMK23BB+qJuiMicWQ5QIEiinnRzPqvAGUGyQbjIGpA5uOCKwzsOjUmzkhGqt31iDR0/Y3ZFbi5Mjog==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "Avalonia.Angle.Windows.Natives": "2.1.0.2020091801", "System.Drawing.Common": "4.5.0", "System.Numerics.Vectors": "4.5.0" @@ -147,39 +147,39 @@ }, "Avalonia.X11": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "joPVaMmPy4bC1STSk5+fAn5zZOT3gz4m/YSv6io3p2q68kEbc+d5KaYk/KcqA/WGiBBQx4a0ViPW/IRomI94kw==", + "resolved": "0.10.12", + "contentHash": "mUY1cF1p86/UgLl1cbSmY3nVIatKQsSCDOH4avssL07xmKlRfB2G7Gi8jlhWNkLJTLL7iQp/u3X6bv7bs+0zNQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.FreeDesktop": "0.10.11", - "Avalonia.Skia": "0.10.11" + "Avalonia": "0.10.12", + "Avalonia.FreeDesktop": "0.10.12", + "Avalonia.Skia": "0.10.12" } }, "Avalonia.Xaml.Behaviors": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "XHU7/hRYWEdaJOs+weT9ml9/GYqroPrAtePjGzUzUrMoHESbqmkLXmW+fHkaAeXRMJAOAFD1LQUHQu+B6ThF3w==", + "resolved": "0.10.12", + "contentHash": "upv7v1gZ31tCukw/KA1bB5+z29QuEWiZJ4KnW10daHlia1ru7q4lUJ/vCYKOy5L+zyi1MQg98SNYjRp5C64ZhQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactions": "0.10.11.5", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactions": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactions": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "MpqS1t1zypDNEW2Pyg113W4AwmfaWai5LfA/K22sDbygXII+KuACaHt2ZPHJWnvKGHgasLEEFhEOGfF5cB9NPA==", + "resolved": "0.10.12", + "contentHash": "PSohbY4aQGiJVWfvLKkuUE71ZxvZ0/FuTc3Y5GJgTC41kCgeaiJTczkC2FjW5sZ8exPDabSp+ZukSsnm/z6y7A==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactivity": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "MOM6lcPenJZu9LPhai3n67GssBUx3MjoCVLyR2GEJ6lywKQgk4MKOIAC0gLWgy7x1e540oy4lCpeX8jMsqe7mA==", + "resolved": "0.10.12", + "contentHash": "uey4LjyIds78igMe7AZ072RI6GpO16sd6+6XF6LG0oE07De7ei0So14oOs4wLS4WJyaKDRSUK6PuhLaY1zIZdQ==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Castle.Core": { @@ -436,10 +436,10 @@ }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", + "resolved": "4.5.0", + "contentHash": "LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==", "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0" } }, "NETStandard.Library": { @@ -699,8 +699,8 @@ }, "ShimSkiaSharp": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "a04YHHKRK1xY8ccSgpa6HOmOw9Kuivo2b2qejp9CK00ykdCBK3Mmc+ekBx954+zPQBksN6aLhvn1SEL7QG2s8Q==" + "resolved": "0.5.12", + "contentHash": "oUGM7gQHRzbGPRs3E1pe5e8VwML21YyEz9xdo+r2ov1mAqSDPyXErVQP6pN4gnfYMVf5ADR7BVkVzt4R9Iz3gQ==" }, "SkiaSharp": { "type": "Transitive", @@ -760,11 +760,10 @@ }, "Svg.Custom": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "8OEW3UKx07JfEyqzzvF5+ycydusZjg6jsBjDSBrAoq62c5gNZrs6brlOKm2ywEj9hObK3sLcat5BHnE2OUHXsg==", + "resolved": "0.5.12", + "contentHash": "kmjLQf5U5WC7tRGBedUhtrOUCR0NaNL2auzOA2a/oMwEA0Bjrpd6qvMTpJUS3HITxi8vJazGl270K+i0JvdJog==", "dependencies": { "Fizzler": "1.2.0", - "System.Drawing.Common": "5.0.0", "System.Memory": "4.5.3", "System.ObjectModel": "4.3.0", "System.ValueTuple": "4.5.0" @@ -772,22 +771,22 @@ }, "Svg.Model": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "5/Y+BGjgTwobA9aDfcpTGF/bm83MYrEYM8J1LpPohRR+c+B/1N+rbSXfpDZq2omBJ1O0Sa5VjAXw1oAdm1lYLg==", + "resolved": "0.5.12", + "contentHash": "/CPiXIugg4oVyYlQr26fB1X9iQfICALF8AJXbTWnXGoP2WZa1t6aZbAXPk3HoPApA0w5waf3XXkBiYYnWwawaQ==", "dependencies": { - "ShimSkiaSharp": "0.5.11", - "Svg.Custom": "0.5.11" + "ShimSkiaSharp": "0.5.12", + "Svg.Custom": "0.5.12" } }, "Svg.Skia": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "AiN5rSsYBzBUkoh8YK5HoNxRxHtUekp2/6ZAol8qV8oDr6vu8hmPuWjUDwvqCFMi9Dlllc6YsFfvJ1PZCJvYew==", + "resolved": "0.5.12", + "contentHash": "KjKpjz0FKge+WpRzjD1bqywAW3vZhXwpR5c7Ej5OuP4xDrQjBwtFeB0iZ+yEJMzwXf/Rs4ImuN8m3bmBDJvMHg==", "dependencies": { "SkiaSharp": "2.88.0-preview.178", "SkiaSharp.HarfBuzz": "2.88.0-preview.178", - "Svg.Custom": "0.5.11", - "Svg.Model": "0.5.11" + "Svg.Custom": "0.5.12", + "Svg.Model": "0.5.12" } }, "System.AppContext": { @@ -979,10 +978,11 @@ }, "System.Drawing.Common": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "resolved": "4.5.0", + "contentHash": "AiJFxxVPdeITstiRS5aAu8+8Dpf5NawTMoapZ53Gfirml24p7HIfhjmCRxdXnmmf3IUA3AX3CcW7G73CjWxW/Q==", "dependencies": { - "Microsoft.Win32.SystemEvents": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.Win32.SystemEvents": "4.5.0" } }, "System.Dynamic.Runtime": { @@ -1746,12 +1746,12 @@ "dependencies": { "Artemis.Core": "1.0.0", "Artemis.UI.Shared": "1.0.0", - "Avalonia": "0.10.11", - "Avalonia.Controls.PanAndZoom": "10.11.1", - "Avalonia.Desktop": "0.10.11", - "Avalonia.Diagnostics": "0.10.11", - "Avalonia.ReactiveUI": "0.10.11", - "Avalonia.Svg.Skia": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Controls.PanAndZoom": "10.12.0", + "Avalonia.Desktop": "0.10.12", + "Avalonia.Diagnostics": "0.10.12", + "Avalonia.ReactiveUI": "0.10.12", + "Avalonia.Svg.Skia": "0.10.12", "DynamicData": "7.4.9", "FluentAvaloniaUI": "1.1.8", "Flurl.Http": "3.2.0", @@ -1759,7 +1759,7 @@ "Material.Icons.Avalonia": "1.0.2", "RGB.NET.Core": "1.0.0-prerelease7", "RGB.NET.Layout": "1.0.0-prerelease7", - "ReactiveUI": "16.3.10", + "ReactiveUI": "17.1.17", "ReactiveUI.Validation": "2.2.1", "SkiaSharp": "2.88.0-preview.178", "Splat.Ninject": "14.1.17" @@ -1769,17 +1769,17 @@ "type": "Project", "dependencies": { "Artemis.Core": "1.0.0", - "Avalonia": "0.10.11", - "Avalonia.ReactiveUI": "0.10.11", - "Avalonia.Svg.Skia": "0.10.11", - "Avalonia.Xaml.Behaviors": "0.10.11.5", - "Avalonia.Xaml.Interactions": "0.10.11.5", - "Avalonia.Xaml.Interactivity": "0.10.11.5", + "Avalonia": "0.10.12", + "Avalonia.ReactiveUI": "0.10.12", + "Avalonia.Svg.Skia": "0.10.12", + "Avalonia.Xaml.Behaviors": "0.10.12", + "Avalonia.Xaml.Interactions": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12", "DynamicData": "7.4.9", "FluentAvaloniaUI": "1.1.8", "Material.Icons.Avalonia": "1.0.2", "RGB.NET.Core": "1.0.0-prerelease7", - "ReactiveUI": "16.3.10", + "ReactiveUI": "17.1.17", "ReactiveUI.Validation": "2.2.1", "SkiaSharp": "2.88.0-preview.178" } diff --git a/src/Avalonia/Artemis.UI.Shared/Artemis.UI.Shared.csproj b/src/Avalonia/Artemis.UI.Shared/Artemis.UI.Shared.csproj index 51947d759..596f5d20a 100644 --- a/src/Avalonia/Artemis.UI.Shared/Artemis.UI.Shared.csproj +++ b/src/Avalonia/Artemis.UI.Shared/Artemis.UI.Shared.csproj @@ -17,16 +17,16 @@ - - - - - - + + + + + + - + diff --git a/src/Avalonia/Artemis.UI.Shared/Extensions/SKMatrixExtensions.cs b/src/Avalonia/Artemis.UI.Shared/Extensions/SKMatrixExtensions.cs new file mode 100644 index 000000000..492fab1dd --- /dev/null +++ b/src/Avalonia/Artemis.UI.Shared/Extensions/SKMatrixExtensions.cs @@ -0,0 +1,19 @@ +using Avalonia; +using SkiaSharp; + +namespace Artemis.UI.Shared.Extensions; + +public static class SKMatrixExtensions +{ + public static Matrix ToMatrix(this SKMatrix matrix) + { + return new Matrix( + matrix.ScaleX, + matrix.SkewY, + matrix.SkewX, + matrix.ScaleY, + matrix.TransX, + matrix.TransY + ); + } +} \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI.Shared/Extensions/SKRectExtensions.cs b/src/Avalonia/Artemis.UI.Shared/Extensions/SKRectExtensions.cs new file mode 100644 index 000000000..777f885d9 --- /dev/null +++ b/src/Avalonia/Artemis.UI.Shared/Extensions/SKRectExtensions.cs @@ -0,0 +1,17 @@ +using Avalonia; +using SkiaSharp; + +namespace Artemis.UI.Shared.Extensions; + +public static class SKRectExtensions +{ + public static Rect ToRect(this SKRect rect) + { + return new Rect(rect.Left, rect.Top, rect.Width, rect.Height); + } + + public static Rect ToRect(this SKRectI rect) + { + return new Rect(rect.Left, rect.Top, rect.Width, rect.Height); + } +} \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/Commands/ToggleLayerPropertyKeyframes.cs b/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/Commands/ToggleLayerPropertyKeyframes.cs index ceb9b6cb3..d5c77b3ac 100644 --- a/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/Commands/ToggleLayerPropertyKeyframes.cs +++ b/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/Commands/ToggleLayerPropertyKeyframes.cs @@ -1,4 +1,5 @@ -using Artemis.Core; +using System; +using Artemis.Core; namespace Artemis.UI.Shared.Services.ProfileEditor.Commands; @@ -9,15 +10,18 @@ namespace Artemis.UI.Shared.Services.ProfileEditor.Commands; public class ToggleLayerPropertyKeyframes : IProfileEditorCommand { private readonly bool _enable; + private readonly TimeSpan _time; private readonly LayerProperty _layerProperty; + private LayerPropertyKeyframe? _keyframe; /// /// Creates a new instance of the class. /// - public ToggleLayerPropertyKeyframes(LayerProperty layerProperty, bool enable) + public ToggleLayerPropertyKeyframes(LayerProperty layerProperty, bool enable, TimeSpan time) { _layerProperty = layerProperty; _enable = enable; + _time = time; } #region Implementation of IProfileEditorCommand @@ -28,12 +32,15 @@ public class ToggleLayerPropertyKeyframes : IProfileEditorCommand /// public void Execute() { + _keyframe ??= new LayerPropertyKeyframe(_layerProperty.CurrentValue, _time, Easings.Functions.Linear, _layerProperty); _layerProperty.KeyframesEnabled = _enable; + _layerProperty.AddKeyframe(_keyframe); } /// public void Undo() { + _layerProperty.RemoveKeyframe(_keyframe!); _layerProperty.KeyframesEnabled = !_enable; } diff --git a/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/ProfileEditorService.cs b/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/ProfileEditorService.cs index d6f4828db..1c52211dd 100644 --- a/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/ProfileEditorService.cs +++ b/src/Avalonia/Artemis.UI.Shared/Services/ProfileEditor/ProfileEditorService.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Linq; using System.Reactive.Linq; using System.Reactive.Subjects; @@ -16,18 +15,17 @@ namespace Artemis.UI.Shared.Services.ProfileEditor; internal class ProfileEditorService : IProfileEditorService { + private readonly ILogger _logger; + private readonly IModuleService _moduleService; + private readonly BehaviorSubject _pixelsPerSecondSubject = new(120); + private readonly BehaviorSubject _playingSubject = new(false); private readonly BehaviorSubject _profileConfigurationSubject = new(null); private readonly Dictionary _profileEditorHistories = new(); private readonly BehaviorSubject _profileElementSubject = new(null); - private readonly BehaviorSubject _timeSubject = new(TimeSpan.Zero); - private readonly BehaviorSubject _playingSubject = new(false); - private readonly BehaviorSubject _suspendedEditingSubject = new(false); - private readonly BehaviorSubject _pixelsPerSecondSubject = new(120); - private readonly SourceList _selectedKeyframes = new(); - - private readonly ILogger _logger; private readonly IProfileService _profileService; - private readonly IModuleService _moduleService; + private readonly SourceList _selectedKeyframes = new(); + private readonly BehaviorSubject _suspendedEditingSubject = new(false); + private readonly BehaviorSubject _timeSubject = new(TimeSpan.Zero); private readonly IWindowService _windowService; private ProfileEditorCommandScope? _profileEditorHistoryScope; @@ -47,6 +45,8 @@ internal class ProfileEditorService : IProfileEditorService PixelsPerSecond = _pixelsPerSecondSubject.AsObservable(); } + public IObservable SuspendedEditing { get; } + private ProfileEditorHistory? GetHistory(ProfileConfiguration? profileConfiguration) { if (profileConfiguration == null) @@ -59,14 +59,47 @@ internal class ProfileEditorService : IProfileEditorService return newHistory; } + private void Tick(TimeSpan time) + { + if (_profileConfigurationSubject.Value?.Profile == null || _suspendedEditingSubject.Value) + return; + + TickProfileElement(_profileConfigurationSubject.Value.Profile.GetRootFolder(), time); + } + + private void TickProfileElement(ProfileElement profileElement, TimeSpan time) + { + if (profileElement is not RenderProfileElement renderElement) + return; + + if (renderElement.Suspended) + { + renderElement.Disable(); + } + else + { + renderElement.Enable(); + renderElement.Timeline.Override( + time, + (renderElement != _profileElementSubject.Value || renderElement.Timeline.Length < time) && renderElement.Timeline.PlayMode == TimelinePlayMode.Repeat + ); + + foreach (ProfileElement child in renderElement.Children) + TickProfileElement(child, time); + } + } + public IObservable ProfileConfiguration { get; } public IObservable ProfileElement { get; } public IObservable History { get; } public IObservable Time { get; } public IObservable Playing { get; } - public IObservable SuspendedEditing { get; } public IObservable PixelsPerSecond { get; } - public IObservable> ConnectToKeyframes() => _selectedKeyframes.Connect(); + + public IObservable> ConnectToKeyframes() + { + return _selectedKeyframes.Connect(); + } public void ChangeCurrentProfileConfiguration(ProfileConfiguration? profileConfiguration) { @@ -143,17 +176,13 @@ internal class ProfileEditorService : IProfileEditorService else { if (expand) - { _selectedKeyframes.Add(keyframe); - } else - { _selectedKeyframes.Edit(l => { l.Clear(); l.Add(keyframe); }); - } } } @@ -194,10 +223,8 @@ internal class ProfileEditorService : IProfileEditorService // Snap to the current time if (snapToCurrentTime) - { if (Math.Abs(time.TotalMilliseconds - _timeSubject.Value.TotalMilliseconds) < tolerance.TotalMilliseconds) return _timeSubject.Value; - } if (snapTimes != null) { @@ -229,6 +256,37 @@ internal class ProfileEditorService : IProfileEditorService _pixelsPerSecondSubject.OnNext(pixelsPerSecond); } + + /// + public void SaveProfile() + { + Profile? profile = _profileConfigurationSubject.Value?.Profile; + if (profile == null) + return; + + _profileService.SaveProfile(profile, true); + } + + /// + public async Task SaveProfileAsync() + { + await Task.Run(SaveProfile); + } + + /// + public void Play() + { + if (!_playingSubject.Value) + _playingSubject.OnNext(true); + } + + /// + public void Pause() + { + if (_playingSubject.Value) + _playingSubject.OnNext(false); + } + #region Commands public void ExecuteCommand(IProfileEditorCommand command) @@ -282,66 +340,4 @@ internal class ProfileEditorService : IProfileEditorService } #endregion - - - - /// - public void SaveProfile() - { - Profile? profile = _profileConfigurationSubject.Value?.Profile; - if (profile == null) - return; - - _profileService.SaveProfile(profile, true); - } - - /// - public async Task SaveProfileAsync() - { - await Task.Run(SaveProfile); - } - - /// - public void Play() - { - if (!_playingSubject.Value) - _playingSubject.OnNext(true); - } - - /// - public void Pause() - { - if (_playingSubject.Value) - _playingSubject.OnNext(false); - } - - private void Tick(TimeSpan time) - { - if (_profileConfigurationSubject.Value?.Profile == null || _suspendedEditingSubject.Value) - return; - - TickProfileElement(_profileConfigurationSubject.Value.Profile.GetRootFolder(), time); - } - - private void TickProfileElement(ProfileElement profileElement, TimeSpan time) - { - if (profileElement is not RenderProfileElement renderElement) - return; - - if (renderElement.Suspended) - { - renderElement.Disable(); - } - else - { - renderElement.Enable(); - renderElement.Timeline.Override( - time, - (renderElement != _profileElementSubject.Value || renderElement.Timeline.Length < time) && renderElement.Timeline.PlayMode == TimelinePlayMode.Repeat - ); - - foreach (ProfileElement child in renderElement.Children) - TickProfileElement(child, time); - } - } } \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI.Shared/Services/PropertyInput/PropertyInputViewModel.cs b/src/Avalonia/Artemis.UI.Shared/Services/PropertyInput/PropertyInputViewModel.cs index f36cf3a51..04be6fc19 100644 --- a/src/Avalonia/Artemis.UI.Shared/Services/PropertyInput/PropertyInputViewModel.cs +++ b/src/Avalonia/Artemis.UI.Shared/Services/PropertyInput/PropertyInputViewModel.cs @@ -5,6 +5,7 @@ using Artemis.Core; using Artemis.UI.Shared.Services.ProfileEditor; using Artemis.UI.Shared.Services.ProfileEditor.Commands; using Avalonia.Controls.Mixins; +using Avalonia.Threading; using ReactiveUI; using ReactiveUI.Validation.Helpers; @@ -54,6 +55,8 @@ public abstract class PropertyInputViewModel : PropertyInputViewModel .Subscribe(_ => UpdateDataBinding()) .DisposeWith(d); }); + + ValidationContext.ValidationStatusChange.Subscribe(s => Console.WriteLine(s)); } /// @@ -178,24 +181,28 @@ public abstract class PropertyInputViewModel : PropertyInputViewModel private void UpdateInputValue() { - try + Dispatcher.UIThread.Post(() => { - _updating = true; - // Avoid unnecessary UI updates and validator cycles - if (_inputValue != null && _inputValue.Equals(LayerProperty.CurrentValue) || _inputValue == null && LayerProperty.CurrentValue == null) - return; + try + { + _updating = true; + // Avoid unnecessary UI updates and validator cycles + if (_inputValue != null && _inputValue.Equals(LayerProperty.CurrentValue) || _inputValue == null && LayerProperty.CurrentValue == null) + return; - // Override the input value - _inputValue = LayerProperty.CurrentValue; + // Override the input value + _inputValue = LayerProperty.CurrentValue; - // Notify a change in the input value - OnInputValueChanged(); - this.RaisePropertyChanged(nameof(InputValue)); - } - finally - { - _updating = false; - } + // Notify a change in the input value + OnInputValueChanged(); + this.RaisePropertyChanged(nameof(InputValue)); + } + finally + { + _updating = false; + } + }); + } private void UpdateDataBinding() diff --git a/src/Avalonia/Artemis.UI.Shared/Styles/NumberBox.axaml b/src/Avalonia/Artemis.UI.Shared/Styles/NumberBox.axaml index 067f4ad73..89630a14c 100644 --- a/src/Avalonia/Artemis.UI.Shared/Styles/NumberBox.axaml +++ b/src/Avalonia/Artemis.UI.Shared/Styles/NumberBox.axaml @@ -1,7 +1,8 @@  + xmlns:attachedProperties="clr-namespace:Artemis.UI.Shared.AttachedProperties" + xmlns:system="clr-namespace:System;assembly=System.Runtime"> @@ -12,8 +13,12 @@ - + attachedProperties:NumberBoxAssist.SuffixText="%"> + + + + + @@ -117,4 +122,8 @@ + + \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI.Shared/packages.lock.json b/src/Avalonia/Artemis.UI.Shared/packages.lock.json index 7bd70aa2e..d6223e7ce 100644 --- a/src/Avalonia/Artemis.UI.Shared/packages.lock.json +++ b/src/Avalonia/Artemis.UI.Shared/packages.lock.json @@ -4,11 +4,11 @@ "net6.0": { "Avalonia": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "2PSE+dB4vGJfG+1M+y+Hwaxiqze5mbBTTG9hjwc2Z3U/9yJE/GThBEst2WwI0yBt13hsfAfbABzt1PA3mtbFdw==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "ftI5uGBFvWJpizGc6PT6lOb6FiO8AWcSYS9N4FWvXgOvuqWuTgmjwURPUkvajpeaQLKOOea6AbgotSyhV8NNoQ==", "dependencies": { - "Avalonia.Remote.Protocol": "0.10.11", + "Avalonia.Remote.Protocol": "0.10.12", "JetBrains.Annotations": "10.3.0", "System.ComponentModel.Annotations": "4.5.0", "System.Memory": "4.5.3", @@ -19,55 +19,55 @@ }, "Avalonia.ReactiveUI": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "I/++/4Halsx9HIp99nBwB2nIMrI9zw2M8wDcK1HaYVMKU+m3KFA9w+DfV7g/wEceWSMeX7yAvUjRnaUYtBO08Q==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "dOszpMtBKEACAFWtjwNibXMF2SBolJ3cV8ffDEOy2uuwjKBJqbSmHH+WSnui9KfbSF2igVpam4TqO6drJuEvjw==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "ReactiveUI": "13.2.10", "System.Reactive": "5.0.0" } }, "Avalonia.Svg.Skia": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "Zw1kfOWN7ZaMqnoJsKqvU/8GxGbrv4KrkAbbLVHvhZl4sA0VZEjqdtxUAqSHlJrYtjPfaUzzDP9K3l0KCqnx/Q==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "qsXKdm5eWpfoVPe0xgtxhbOYlhG8QdbYNJZTTihg/c4iPFYuh1G7DldiNskuVFuGiGxLVZ0g6ebql7ZkwbO1pA==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Skia": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Skia": "0.10.12", "SkiaSharp": "2.88.0-preview.178", - "Svg.Skia": "0.5.11" + "Svg.Skia": "0.5.12" } }, "Avalonia.Xaml.Behaviors": { "type": "Direct", - "requested": "[0.10.11.5, )", - "resolved": "0.10.11.5", - "contentHash": "XHU7/hRYWEdaJOs+weT9ml9/GYqroPrAtePjGzUzUrMoHESbqmkLXmW+fHkaAeXRMJAOAFD1LQUHQu+B6ThF3w==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "upv7v1gZ31tCukw/KA1bB5+z29QuEWiZJ4KnW10daHlia1ru7q4lUJ/vCYKOy5L+zyi1MQg98SNYjRp5C64ZhQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactions": "0.10.11.5", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactions": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactions": { "type": "Direct", - "requested": "[0.10.11.5, )", - "resolved": "0.10.11.5", - "contentHash": "MpqS1t1zypDNEW2Pyg113W4AwmfaWai5LfA/K22sDbygXII+KuACaHt2ZPHJWnvKGHgasLEEFhEOGfF5cB9NPA==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "PSohbY4aQGiJVWfvLKkuUE71ZxvZ0/FuTc3Y5GJgTC41kCgeaiJTczkC2FjW5sZ8exPDabSp+ZukSsnm/z6y7A==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactivity": { "type": "Direct", - "requested": "[0.10.11.5, )", - "resolved": "0.10.11.5", - "contentHash": "MOM6lcPenJZu9LPhai3n67GssBUx3MjoCVLyR2GEJ6lywKQgk4MKOIAC0gLWgy7x1e540oy4lCpeX8jMsqe7mA==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "uey4LjyIds78igMe7AZ072RI6GpO16sd6+6XF6LG0oE07De7ei0So14oOs4wLS4WJyaKDRSUK6PuhLaY1zIZdQ==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "DynamicData": { @@ -102,12 +102,12 @@ }, "ReactiveUI": { "type": "Direct", - "requested": "[16.3.10, )", - "resolved": "16.3.10", - "contentHash": "NH9bg8BROqRrTp6YLpPDsJrfNDzRWNmP63fQ68CBAM+i7YHi6wcPeOkxyKpoemUxKEY4QECuicaTblJnxgbWmA==", + "requested": "[17.1.17, )", + "resolved": "17.1.17", + "contentHash": "0DLq44k4CVvfXcWHE4uigQa/wySOzxOTnWg50j2qZDpWzl9OP7QfIDJo39X3ffEjaVcCUFcbF9xAmm7fRX/q2g==", "dependencies": { - "DynamicData": "7.4.3", - "Splat": "13.1.42" + "DynamicData": "7.4.9", + "Splat": "14.1.17" } }, "ReactiveUI.Validation": { @@ -194,15 +194,15 @@ }, "Avalonia.Remote.Protocol": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "kID2N/cXg7KCGFYFTOWCvSLt+oMFRApLfLcbLU35keC/jwDi9tFk33CEdo81hBEg15lAtTtCfvHhNPyVyIYijQ==" + "resolved": "0.10.12", + "contentHash": "ArrxniR8iShzMvXCS3vt5FXg9Fv3qK1UKzJwsSsY9iCuC8wKo2eevRj42qOhMCS98POTH5v8aUZBeoLlENa0vA==" }, "Avalonia.Skia": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "4bP5V3BpnZ+If2/ZrZofeRsINeZ6gemLjfNyElt7vNF4HZaRfot03anO3Y+Z7mTELjuol6n/5lAL4+kQUN/O/w==", + "resolved": "0.10.12", + "contentHash": "3TGo8RLHaLqmU3chlyAqLkpw6vImfDMC30T18abpeYf1PIsNckRB+UFp12GDil9t/J9YB17zn4H6N+2plF4gZA==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "HarfBuzzSharp": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.Linux": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.WebAssembly": "2.8.2-preview.178", @@ -436,10 +436,10 @@ }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", + "resolved": "4.5.0", + "contentHash": "LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==", "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0" } }, "NETStandard.Library": { @@ -686,8 +686,8 @@ }, "ShimSkiaSharp": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "a04YHHKRK1xY8ccSgpa6HOmOw9Kuivo2b2qejp9CK00ykdCBK3Mmc+ekBx954+zPQBksN6aLhvn1SEL7QG2s8Q==" + "resolved": "0.5.12", + "contentHash": "oUGM7gQHRzbGPRs3E1pe5e8VwML21YyEz9xdo+r2ov1mAqSDPyXErVQP6pN4gnfYMVf5ADR7BVkVzt4R9Iz3gQ==" }, "SkiaSharp.HarfBuzz": { "type": "Transitive", @@ -723,16 +723,15 @@ }, "Splat": { "type": "Transitive", - "resolved": "13.1.42", - "contentHash": "a/NkGyoSsmvH2YZGgjFxt0dsXkRTgQRMgoUDN8WpBhTUr3wnPTdeQTOLLr2Jc/BCAdOA7cK2+E4Io8I1/q3f3Q==" + "resolved": "14.1.17", + "contentHash": "orBlJcQS4b1VZUlT+sJIensH0MsTYyCJlStT6bRwt71OFqNYD6V1SpkoIt6vKSf8YXgDT7QH/LuwWdLfTyHPrw==" }, "Svg.Custom": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "8OEW3UKx07JfEyqzzvF5+ycydusZjg6jsBjDSBrAoq62c5gNZrs6brlOKm2ywEj9hObK3sLcat5BHnE2OUHXsg==", + "resolved": "0.5.12", + "contentHash": "kmjLQf5U5WC7tRGBedUhtrOUCR0NaNL2auzOA2a/oMwEA0Bjrpd6qvMTpJUS3HITxi8vJazGl270K+i0JvdJog==", "dependencies": { "Fizzler": "1.2.0", - "System.Drawing.Common": "5.0.0", "System.Memory": "4.5.3", "System.ObjectModel": "4.3.0", "System.ValueTuple": "4.5.0" @@ -740,22 +739,22 @@ }, "Svg.Model": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "5/Y+BGjgTwobA9aDfcpTGF/bm83MYrEYM8J1LpPohRR+c+B/1N+rbSXfpDZq2omBJ1O0Sa5VjAXw1oAdm1lYLg==", + "resolved": "0.5.12", + "contentHash": "/CPiXIugg4oVyYlQr26fB1X9iQfICALF8AJXbTWnXGoP2WZa1t6aZbAXPk3HoPApA0w5waf3XXkBiYYnWwawaQ==", "dependencies": { - "ShimSkiaSharp": "0.5.11", - "Svg.Custom": "0.5.11" + "ShimSkiaSharp": "0.5.12", + "Svg.Custom": "0.5.12" } }, "Svg.Skia": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "AiN5rSsYBzBUkoh8YK5HoNxRxHtUekp2/6ZAol8qV8oDr6vu8hmPuWjUDwvqCFMi9Dlllc6YsFfvJ1PZCJvYew==", + "resolved": "0.5.12", + "contentHash": "KjKpjz0FKge+WpRzjD1bqywAW3vZhXwpR5c7Ej5OuP4xDrQjBwtFeB0iZ+yEJMzwXf/Rs4ImuN8m3bmBDJvMHg==", "dependencies": { "SkiaSharp": "2.88.0-preview.178", "SkiaSharp.HarfBuzz": "2.88.0-preview.178", - "Svg.Custom": "0.5.11", - "Svg.Model": "0.5.11" + "Svg.Custom": "0.5.12", + "Svg.Model": "0.5.12" } }, "System.AppContext": { @@ -947,10 +946,11 @@ }, "System.Drawing.Common": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "resolved": "4.5.0", + "contentHash": "AiJFxxVPdeITstiRS5aAu8+8Dpf5NawTMoapZ53Gfirml24p7HIfhjmCRxdXnmmf3IUA3AX3CcW7G73CjWxW/Q==", "dependencies": { - "Microsoft.Win32.SystemEvents": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.Win32.SystemEvents": "4.5.0" } }, "System.Dynamic.Runtime": { diff --git a/src/Avalonia/Artemis.UI.Windows/Artemis.UI.Windows.csproj b/src/Avalonia/Artemis.UI.Windows/Artemis.UI.Windows.csproj index b4e7b5efe..69e2d4bd1 100644 --- a/src/Avalonia/Artemis.UI.Windows/Artemis.UI.Windows.csproj +++ b/src/Avalonia/Artemis.UI.Windows/Artemis.UI.Windows.csproj @@ -10,15 +10,15 @@ - - + + - - - + + + - + diff --git a/src/Avalonia/Artemis.UI.Windows/packages.lock.json b/src/Avalonia/Artemis.UI.Windows/packages.lock.json index b5bc4d22b..4dbf72809 100644 --- a/src/Avalonia/Artemis.UI.Windows/packages.lock.json +++ b/src/Avalonia/Artemis.UI.Windows/packages.lock.json @@ -4,11 +4,11 @@ "net6.0-windows7.0": { "Avalonia": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "2PSE+dB4vGJfG+1M+y+Hwaxiqze5mbBTTG9hjwc2Z3U/9yJE/GThBEst2WwI0yBt13hsfAfbABzt1PA3mtbFdw==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "ftI5uGBFvWJpizGc6PT6lOb6FiO8AWcSYS9N4FWvXgOvuqWuTgmjwURPUkvajpeaQLKOOea6AbgotSyhV8NNoQ==", "dependencies": { - "Avalonia.Remote.Protocol": "0.10.11", + "Avalonia.Remote.Protocol": "0.10.12", "JetBrains.Annotations": "10.3.0", "System.ComponentModel.Annotations": "4.5.0", "System.Memory": "4.5.3", @@ -19,47 +19,47 @@ }, "Avalonia.Desktop": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "PQTl4lm7IZidzltMwC7RSNaoz7TYNznU8SKa/WaAI6ycMzC0On2DsqiL1dXr6WhYzMazyMJj6kBhiQzHIc1lIQ==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "wy4k1uarrmZJSJENCe1hjNpdCJWhup0gt6KA2TtZILfGG7imj+an5IuQZUSXtA7cl7A+6tF6lPQLo82gESUlXQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Native": "0.10.11", - "Avalonia.Skia": "0.10.11", - "Avalonia.Win32": "0.10.11", - "Avalonia.X11": "0.10.11" + "Avalonia": "0.10.12", + "Avalonia.Native": "0.10.12", + "Avalonia.Skia": "0.10.12", + "Avalonia.Win32": "0.10.12", + "Avalonia.X11": "0.10.12" } }, "Avalonia.Diagnostics": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "xBvBkF2DBKjddAfQbExd660zQ5RaDEXH1JgAdMyYOdu3qFL6d+QHyZdVHVeQFilNYE03F6C8AbMWrmj6dBUNlg==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "Pf9DGiSwl3+gPrRSHKFzDG20I9QJ5P1g6BexLKfHQH9+Cmax+a/UEVYQq4hGn0xhrmpuLYOeGHb8wasjAT4EfQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Controls.DataGrid": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Controls.DataGrid": "0.10.12", "Microsoft.CodeAnalysis.CSharp.Scripting": "3.4.0", "System.Reactive": "5.0.0" } }, "Avalonia.ReactiveUI": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "I/++/4Halsx9HIp99nBwB2nIMrI9zw2M8wDcK1HaYVMKU+m3KFA9w+DfV7g/wEceWSMeX7yAvUjRnaUYtBO08Q==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "dOszpMtBKEACAFWtjwNibXMF2SBolJ3cV8ffDEOy2uuwjKBJqbSmHH+WSnui9KfbSF2igVpam4TqO6drJuEvjw==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "ReactiveUI": "13.2.10", "System.Reactive": "5.0.0" } }, "Avalonia.Win32": { "type": "Direct", - "requested": "[0.10.11, )", - "resolved": "0.10.11", - "contentHash": "bckqh8rnQ4+l2kdU4njO3cBKaT4l1HQkxdVYJLAgl44uMtoCpaN7EidrBTnuM40DXa0cpvOh97A+G8jpZgte6Q==", + "requested": "[0.10.12, )", + "resolved": "0.10.12", + "contentHash": "CnC65T8ScMK23BB+qJuiMicWQ5QIEiinnRzPqvAGUGyQbjIGpA5uOCKwzsOjUmzkhGqt31iDR0/Y3ZFbi5Mjog==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "Avalonia.Angle.Windows.Natives": "2.1.0.2020091801", "System.Drawing.Common": "4.5.0", "System.Numerics.Vectors": "4.5.0" @@ -82,12 +82,12 @@ }, "ReactiveUI": { "type": "Direct", - "requested": "[16.3.10, )", - "resolved": "16.3.10", - "contentHash": "NH9bg8BROqRrTp6YLpPDsJrfNDzRWNmP63fQ68CBAM+i7YHi6wcPeOkxyKpoemUxKEY4QECuicaTblJnxgbWmA==", + "requested": "[17.1.17, )", + "resolved": "17.1.17", + "contentHash": "0DLq44k4CVvfXcWHE4uigQa/wySOzxOTnWg50j2qZDpWzl9OP7QfIDJo39X3ffEjaVcCUFcbF9xAmm7fRX/q2g==", "dependencies": { - "DynamicData": "7.4.3", - "Splat": "13.1.42" + "DynamicData": "7.4.9", + "Splat": "14.1.17" } }, "Avalonia.Angle.Windows.Natives": { @@ -97,51 +97,51 @@ }, "Avalonia.Controls.DataGrid": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "zvt6QA2uwe18gJ/XdnSMTHG6L/2usvjoaAdPC+Lgg+DmUPNTjqN+Hm1l0AjUtNNId6G+4iIkysiZ2WiHPqGsEA==", + "resolved": "0.10.12", + "contentHash": "i3zM3P8PUY4FNhATZoFWkto3H66FcIrnJNMyOsl1fN0FPS6meysAwCKQwuou/oapyzZEODeAmCVdqB0AgjNHVw==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Remote.Protocol": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Remote.Protocol": "0.10.12", "JetBrains.Annotations": "10.3.0", "System.Reactive": "5.0.0" } }, "Avalonia.Controls.PanAndZoom": { "type": "Transitive", - "resolved": "10.11.1", - "contentHash": "XIjA3iGHMfokPXw/ov5CqKKPR8HdVrTBOMYJVOGpDQyec6RwI/w7lq530wfIMebIe9xUj5RY2Jx5heQtCuAFmg==", + "resolved": "10.12.0", + "contentHash": "ns+2tJTXTpNzNA9YV2mjR4EJOZl2vBFWnGUTSIl/vyOQMrrU5CbsXQxy2MFBvW0vGrRTlw80nUtBnsT759kwKQ==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Avalonia.FreeDesktop": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "cj8T11WQ5/opR2IPttb1Bo89aHclkuvHYsCB7HzZU/F7l/cKXbKUOhyo60p44BdFzrCqjNXDnKQbxeRv+OSF7A==", + "resolved": "0.10.12", + "contentHash": "j42uWCWkAfZchYPrdRccr4mjB0kppSby3TEMCuNrp9GcQi+JhEPEbBAohU7FpR4bkv5FF2KAlDX5WiG2T+04kg==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "Tmds.DBus": "0.9.0" } }, "Avalonia.Native": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "9fBC9UArVXEmsxL2Nd0KHGoZUCqcTo06NTlOTAeM3qdEWzE8a0qRVYiR2WeYfADXpKR1D/fQz5zWUZcebFYFIA==", + "resolved": "0.10.12", + "contentHash": "JnZc0zF7DcLcSX+SdnKQGzFa9mcKxawhTN8S3aiN8Eh3MZAKxa45LRrHFVTcHcy2jU4kOw+yPfONUmHpRcC0gw==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Avalonia.Remote.Protocol": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "kID2N/cXg7KCGFYFTOWCvSLt+oMFRApLfLcbLU35keC/jwDi9tFk33CEdo81hBEg15lAtTtCfvHhNPyVyIYijQ==" + "resolved": "0.10.12", + "contentHash": "ArrxniR8iShzMvXCS3vt5FXg9Fv3qK1UKzJwsSsY9iCuC8wKo2eevRj42qOhMCS98POTH5v8aUZBeoLlENa0vA==" }, "Avalonia.Skia": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "4bP5V3BpnZ+If2/ZrZofeRsINeZ6gemLjfNyElt7vNF4HZaRfot03anO3Y+Z7mTELjuol6n/5lAL4+kQUN/O/w==", + "resolved": "0.10.12", + "contentHash": "3TGo8RLHaLqmU3chlyAqLkpw6vImfDMC30T18abpeYf1PIsNckRB+UFp12GDil9t/J9YB17zn4H6N+2plF4gZA==", "dependencies": { - "Avalonia": "0.10.11", + "Avalonia": "0.10.12", "HarfBuzzSharp": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.Linux": "2.8.2-preview.178", "HarfBuzzSharp.NativeAssets.WebAssembly": "2.8.2-preview.178", @@ -152,50 +152,50 @@ }, "Avalonia.Svg.Skia": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "Zw1kfOWN7ZaMqnoJsKqvU/8GxGbrv4KrkAbbLVHvhZl4sA0VZEjqdtxUAqSHlJrYtjPfaUzzDP9K3l0KCqnx/Q==", + "resolved": "0.10.12", + "contentHash": "qsXKdm5eWpfoVPe0xgtxhbOYlhG8QdbYNJZTTihg/c4iPFYuh1G7DldiNskuVFuGiGxLVZ0g6ebql7ZkwbO1pA==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Skia": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Skia": "0.10.12", "SkiaSharp": "2.88.0-preview.178", - "Svg.Skia": "0.5.11" + "Svg.Skia": "0.5.12" } }, "Avalonia.X11": { "type": "Transitive", - "resolved": "0.10.11", - "contentHash": "joPVaMmPy4bC1STSk5+fAn5zZOT3gz4m/YSv6io3p2q68kEbc+d5KaYk/KcqA/WGiBBQx4a0ViPW/IRomI94kw==", + "resolved": "0.10.12", + "contentHash": "mUY1cF1p86/UgLl1cbSmY3nVIatKQsSCDOH4avssL07xmKlRfB2G7Gi8jlhWNkLJTLL7iQp/u3X6bv7bs+0zNQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.FreeDesktop": "0.10.11", - "Avalonia.Skia": "0.10.11" + "Avalonia": "0.10.12", + "Avalonia.FreeDesktop": "0.10.12", + "Avalonia.Skia": "0.10.12" } }, "Avalonia.Xaml.Behaviors": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "XHU7/hRYWEdaJOs+weT9ml9/GYqroPrAtePjGzUzUrMoHESbqmkLXmW+fHkaAeXRMJAOAFD1LQUHQu+B6ThF3w==", + "resolved": "0.10.12", + "contentHash": "upv7v1gZ31tCukw/KA1bB5+z29QuEWiZJ4KnW10daHlia1ru7q4lUJ/vCYKOy5L+zyi1MQg98SNYjRp5C64ZhQ==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactions": "0.10.11.5", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactions": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactions": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "MpqS1t1zypDNEW2Pyg113W4AwmfaWai5LfA/K22sDbygXII+KuACaHt2ZPHJWnvKGHgasLEEFhEOGfF5cB9NPA==", + "resolved": "0.10.12", + "contentHash": "PSohbY4aQGiJVWfvLKkuUE71ZxvZ0/FuTc3Y5GJgTC41kCgeaiJTczkC2FjW5sZ8exPDabSp+ZukSsnm/z6y7A==", "dependencies": { - "Avalonia": "0.10.11", - "Avalonia.Xaml.Interactivity": "0.10.11.5" + "Avalonia": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12" } }, "Avalonia.Xaml.Interactivity": { "type": "Transitive", - "resolved": "0.10.11.5", - "contentHash": "MOM6lcPenJZu9LPhai3n67GssBUx3MjoCVLyR2GEJ6lywKQgk4MKOIAC0gLWgy7x1e540oy4lCpeX8jMsqe7mA==", + "resolved": "0.10.12", + "contentHash": "uey4LjyIds78igMe7AZ072RI6GpO16sd6+6XF6LG0oE07De7ei0So14oOs4wLS4WJyaKDRSUK6PuhLaY1zIZdQ==", "dependencies": { - "Avalonia": "0.10.11" + "Avalonia": "0.10.12" } }, "Castle.Core": { @@ -452,10 +452,10 @@ }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", + "resolved": "4.5.0", + "contentHash": "LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==", "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0" } }, "NETStandard.Library": { @@ -715,8 +715,8 @@ }, "ShimSkiaSharp": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "a04YHHKRK1xY8ccSgpa6HOmOw9Kuivo2b2qejp9CK00ykdCBK3Mmc+ekBx954+zPQBksN6aLhvn1SEL7QG2s8Q==" + "resolved": "0.5.12", + "contentHash": "oUGM7gQHRzbGPRs3E1pe5e8VwML21YyEz9xdo+r2ov1mAqSDPyXErVQP6pN4gnfYMVf5ADR7BVkVzt4R9Iz3gQ==" }, "SkiaSharp": { "type": "Transitive", @@ -776,11 +776,10 @@ }, "Svg.Custom": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "8OEW3UKx07JfEyqzzvF5+ycydusZjg6jsBjDSBrAoq62c5gNZrs6brlOKm2ywEj9hObK3sLcat5BHnE2OUHXsg==", + "resolved": "0.5.12", + "contentHash": "kmjLQf5U5WC7tRGBedUhtrOUCR0NaNL2auzOA2a/oMwEA0Bjrpd6qvMTpJUS3HITxi8vJazGl270K+i0JvdJog==", "dependencies": { "Fizzler": "1.2.0", - "System.Drawing.Common": "5.0.0", "System.Memory": "4.5.3", "System.ObjectModel": "4.3.0", "System.ValueTuple": "4.5.0" @@ -788,22 +787,22 @@ }, "Svg.Model": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "5/Y+BGjgTwobA9aDfcpTGF/bm83MYrEYM8J1LpPohRR+c+B/1N+rbSXfpDZq2omBJ1O0Sa5VjAXw1oAdm1lYLg==", + "resolved": "0.5.12", + "contentHash": "/CPiXIugg4oVyYlQr26fB1X9iQfICALF8AJXbTWnXGoP2WZa1t6aZbAXPk3HoPApA0w5waf3XXkBiYYnWwawaQ==", "dependencies": { - "ShimSkiaSharp": "0.5.11", - "Svg.Custom": "0.5.11" + "ShimSkiaSharp": "0.5.12", + "Svg.Custom": "0.5.12" } }, "Svg.Skia": { "type": "Transitive", - "resolved": "0.5.11", - "contentHash": "AiN5rSsYBzBUkoh8YK5HoNxRxHtUekp2/6ZAol8qV8oDr6vu8hmPuWjUDwvqCFMi9Dlllc6YsFfvJ1PZCJvYew==", + "resolved": "0.5.12", + "contentHash": "KjKpjz0FKge+WpRzjD1bqywAW3vZhXwpR5c7Ej5OuP4xDrQjBwtFeB0iZ+yEJMzwXf/Rs4ImuN8m3bmBDJvMHg==", "dependencies": { "SkiaSharp": "2.88.0-preview.178", "SkiaSharp.HarfBuzz": "2.88.0-preview.178", - "Svg.Custom": "0.5.11", - "Svg.Model": "0.5.11" + "Svg.Custom": "0.5.12", + "Svg.Model": "0.5.12" } }, "System.AppContext": { @@ -995,10 +994,11 @@ }, "System.Drawing.Common": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "resolved": "4.5.0", + "contentHash": "AiJFxxVPdeITstiRS5aAu8+8Dpf5NawTMoapZ53Gfirml24p7HIfhjmCRxdXnmmf3IUA3AX3CcW7G73CjWxW/Q==", "dependencies": { - "Microsoft.Win32.SystemEvents": "5.0.0" + "Microsoft.NETCore.Platforms": "2.0.0", + "Microsoft.Win32.SystemEvents": "4.5.0" } }, "System.Dynamic.Runtime": { @@ -1762,12 +1762,12 @@ "dependencies": { "Artemis.Core": "1.0.0", "Artemis.UI.Shared": "1.0.0", - "Avalonia": "0.10.11", - "Avalonia.Controls.PanAndZoom": "10.11.1", - "Avalonia.Desktop": "0.10.11", - "Avalonia.Diagnostics": "0.10.11", - "Avalonia.ReactiveUI": "0.10.11", - "Avalonia.Svg.Skia": "0.10.11", + "Avalonia": "0.10.12", + "Avalonia.Controls.PanAndZoom": "10.12.0", + "Avalonia.Desktop": "0.10.12", + "Avalonia.Diagnostics": "0.10.12", + "Avalonia.ReactiveUI": "0.10.12", + "Avalonia.Svg.Skia": "0.10.12", "DynamicData": "7.4.9", "FluentAvaloniaUI": "1.1.8", "Flurl.Http": "3.2.0", @@ -1775,7 +1775,7 @@ "Material.Icons.Avalonia": "1.0.2", "RGB.NET.Core": "1.0.0-prerelease7", "RGB.NET.Layout": "1.0.0-prerelease7", - "ReactiveUI": "16.3.10", + "ReactiveUI": "17.1.17", "ReactiveUI.Validation": "2.2.1", "SkiaSharp": "2.88.0-preview.178", "Splat.Ninject": "14.1.17" @@ -1785,17 +1785,17 @@ "type": "Project", "dependencies": { "Artemis.Core": "1.0.0", - "Avalonia": "0.10.11", - "Avalonia.ReactiveUI": "0.10.11", - "Avalonia.Svg.Skia": "0.10.11", - "Avalonia.Xaml.Behaviors": "0.10.11.5", - "Avalonia.Xaml.Interactions": "0.10.11.5", - "Avalonia.Xaml.Interactivity": "0.10.11.5", + "Avalonia": "0.10.12", + "Avalonia.ReactiveUI": "0.10.12", + "Avalonia.Svg.Skia": "0.10.12", + "Avalonia.Xaml.Behaviors": "0.10.12", + "Avalonia.Xaml.Interactions": "0.10.12", + "Avalonia.Xaml.Interactivity": "0.10.12", "DynamicData": "7.4.9", "FluentAvaloniaUI": "1.1.8", "Material.Icons.Avalonia": "1.0.2", "RGB.NET.Core": "1.0.0-prerelease7", - "ReactiveUI": "16.3.10", + "ReactiveUI": "17.1.17", "ReactiveUI.Validation": "2.2.1", "SkiaSharp": "2.88.0-preview.178" } diff --git a/src/Avalonia/Artemis.UI/Artemis.UI.csproj b/src/Avalonia/Artemis.UI/Artemis.UI.csproj index f3ea192ba..0de0c2b5d 100644 --- a/src/Avalonia/Artemis.UI/Artemis.UI.csproj +++ b/src/Avalonia/Artemis.UI/Artemis.UI.csproj @@ -15,18 +15,18 @@ - - - - - - + + + + + + - + @@ -50,6 +50,9 @@ + + StringPropertyInputView.xaml + PropertiesView.axaml @@ -57,4 +60,9 @@ + + + MSBuild:Compile + + \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputView.axaml b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputView.axaml index 1c887d464..c514b9650 100644 --- a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputView.axaml +++ b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputView.axaml @@ -8,13 +8,16 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Artemis.UI.DefaultTypes.PropertyInput.FloatPropertyInputView" x:DataType="propertyInput:FloatPropertyInputViewModel"> - + + + + shared:NumberBoxAssist.SuffixText="{CompiledBinding Affix}" /> \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputViewModel.cs b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputViewModel.cs index 0a08915ef..fae919a27 100644 --- a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputViewModel.cs +++ b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/FloatPropertyInputViewModel.cs @@ -14,7 +14,7 @@ public class FloatPropertyInputViewModel : PropertyInputViewModel this.ValidationRule(vm => vm.InputValue, i => i >= (float) LayerProperty.PropertyDescription.MinInputValue, $"Value must be equal to or greater than {LayerProperty.PropertyDescription.MinInputValue}."); if (LayerProperty.PropertyDescription.MaxInputValue.IsNumber()) - this.ValidationRule(vm => vm.InputValue, i => i < (float) LayerProperty.PropertyDescription.MaxInputValue, + this.ValidationRule(vm => vm.InputValue, i => i <= (float) LayerProperty.PropertyDescription.MaxInputValue, $"Value must be smaller than {LayerProperty.PropertyDescription.MaxInputValue}."); } } \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/PropertyInputStyles.axaml b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/PropertyInputStyles.axaml new file mode 100644 index 000000000..2a61aaf28 --- /dev/null +++ b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/PropertyInputStyles.axaml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml new file mode 100644 index 000000000..16ab403a2 --- /dev/null +++ b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml.cs b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml.cs new file mode 100644 index 000000000..53d0c00b0 --- /dev/null +++ b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputView.axaml.cs @@ -0,0 +1,25 @@ +using Avalonia.Input; +using Avalonia.Markup.Xaml; +using Avalonia.ReactiveUI; + +namespace Artemis.UI.DefaultTypes.PropertyInput; + +public class StringPropertyInputView : ReactiveUserControl +{ + public StringPropertyInputView() + { + InitializeComponent(); + AddHandler(KeyUpEvent, OnRoutedKeyUp, handledEventsToo: true); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + + private void OnRoutedKeyUp(object? sender, KeyEventArgs e) + { + if (e.Key == Key.Enter || e.Key == Key.Escape) + FocusManager.Instance!.Focus(null); + } +} \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputViewModel.cs b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputViewModel.cs new file mode 100644 index 000000000..3f29605e8 --- /dev/null +++ b/src/Avalonia/Artemis.UI/DefaultTypes/PropertyInput/StringPropertyInputViewModel.cs @@ -0,0 +1,13 @@ +using Artemis.Core; +using Artemis.UI.Shared.Services.ProfileEditor; +using Artemis.UI.Shared.Services.PropertyInput; + +namespace Artemis.UI.DefaultTypes.PropertyInput; + +public class StringPropertyInputViewModel : PropertyInputViewModel +{ + public StringPropertyInputViewModel(LayerProperty layerProperty, IProfileEditorService profileEditorService, IPropertyInputService propertyInputService) + : base(layerProperty, profileEditorService, propertyInputService) + { + } +} \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI/Ninject/Factories/IVMFactory.cs b/src/Avalonia/Artemis.UI/Ninject/Factories/IVMFactory.cs index 58e336a92..7f7eaa297 100644 --- a/src/Avalonia/Artemis.UI/Ninject/Factories/IVMFactory.cs +++ b/src/Avalonia/Artemis.UI/Ninject/Factories/IVMFactory.cs @@ -10,6 +10,7 @@ using Artemis.UI.Screens.ProfileEditor.Properties; using Artemis.UI.Screens.ProfileEditor.Properties.Timeline; using Artemis.UI.Screens.ProfileEditor.Properties.Timeline.Segments; using Artemis.UI.Screens.ProfileEditor.Properties.Tree; +using Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers; using Artemis.UI.Screens.Settings; using Artemis.UI.Screens.Sidebar; using Artemis.UI.Screens.SurfaceEditor; @@ -64,6 +65,7 @@ namespace Artemis.UI.Ninject.Factories ProfileEditorViewModel ProfileEditorViewModel(IScreen hostScreen); FolderTreeItemViewModel FolderTreeItemViewModel(TreeItemViewModel? parent, Folder folder); LayerTreeItemViewModel LayerTreeItemViewModel(TreeItemViewModel? parent, Layer layer); + LayerVisualizerViewModel LayerVisualizerViewModel(Layer layer); } public interface ILayerPropertyVmFactory : IVmFactory diff --git a/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Playback/PlaybackViewModel.cs b/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Playback/PlaybackViewModel.cs index 70c099028..25936d2a8 100644 --- a/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Playback/PlaybackViewModel.cs +++ b/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Playback/PlaybackViewModel.cs @@ -5,13 +5,13 @@ using Artemis.Core; using Artemis.Core.Services; using Artemis.UI.Shared; using Artemis.UI.Shared.Services.ProfileEditor; +using Avalonia.Threading; using ReactiveUI; namespace Artemis.UI.Screens.ProfileEditor.Playback; public class PlaybackViewModel : ActivatableViewModelBase { - private readonly ICoreService _coreService; private readonly IProfileEditorService _profileEditorService; private readonly ISettingsService _settingsService; private RenderProfileElement? _profileElement; @@ -21,10 +21,10 @@ public class PlaybackViewModel : ActivatableViewModelBase private bool _repeating; private bool _repeatTimeline; private bool _repeatSegment; + private DateTime _lastUpdate; - public PlaybackViewModel(ICoreService coreService, IProfileEditorService profileEditorService, ISettingsService settingsService) + public PlaybackViewModel(IProfileEditorService profileEditorService, ISettingsService settingsService) { - _coreService = coreService; _profileEditorService = profileEditorService; _settingsService = settingsService; @@ -35,12 +35,14 @@ public class PlaybackViewModel : ActivatableViewModelBase _formattedCurrentTime = _profileEditorService.Time.Select(t => $"{Math.Floor(t.TotalSeconds):00}.{t.Milliseconds:000}").ToProperty(this, vm => vm.FormattedCurrentTime).DisposeWith(d); _playing = _profileEditorService.Playing.ToProperty(this, vm => vm.Playing).DisposeWith(d); - Observable.FromEventPattern(x => coreService.FrameRendering += x, x => coreService.FrameRendering -= x) - .Subscribe(e => CoreServiceOnFrameRendering(e.EventArgs)) - .DisposeWith(d); + _lastUpdate = DateTime.MinValue; + DispatcherTimer updateTimer = new(TimeSpan.FromMilliseconds(60.0 / 1000), DispatcherPriority.Render, Update); + updateTimer.Start(); + Disposable.Create(() => updateTimer.Stop()); }); } + public TimeSpan CurrentTime => _currentTime?.Value ?? TimeSpan.Zero; public string? FormattedCurrentTime => _formattedCurrentTime?.Value; public bool Playing => _playing?.Value ?? false; @@ -163,31 +165,41 @@ public class PlaybackViewModel : ActivatableViewModelBase return TimeSpan.Zero; } - private void CoreServiceOnFrameRendering(FrameRenderingEventArgs e) + private void Update(object? sender, EventArgs e) { - if (!Playing) - return; - - TimeSpan newTime = CurrentTime.Add(TimeSpan.FromSeconds(e.DeltaTime)); - if (_profileElement != null) + try { - if (Repeating && RepeatTimeline) - { - if (newTime > _profileElement.Timeline.Length) - newTime = TimeSpan.Zero; - } - else if (Repeating && RepeatSegment) - { - if (newTime > GetCurrentSegmentEnd()) - newTime = GetCurrentSegmentStart(); - } - else if (newTime > _profileElement.Timeline.Length) - { - newTime = _profileElement.Timeline.Length; - _profileEditorService.Pause(); - } - } + if (!Playing) + return; - _profileEditorService.ChangeTime(newTime); + if (_lastUpdate == DateTime.MinValue) + _lastUpdate = DateTime.Now; + + TimeSpan newTime = CurrentTime.Add(DateTime.Now - _lastUpdate); + if (_profileElement != null) + { + if (Repeating && RepeatTimeline) + { + if (newTime > _profileElement.Timeline.Length) + newTime = TimeSpan.Zero; + } + else if (Repeating && RepeatSegment) + { + if (newTime > GetCurrentSegmentEnd()) + newTime = GetCurrentSegmentStart(); + } + else if (newTime > _profileElement.Timeline.Length) + { + newTime = _profileElement.Timeline.Length; + _profileEditorService.Pause(); + } + } + + _profileEditorService.ChangeTime(newTime); + } + finally + { + _lastUpdate = DateTime.Now; + } } } \ No newline at end of file diff --git a/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Properties/Tree/TreePropertyView.axaml b/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Properties/Tree/TreePropertyView.axaml index 18b4a529d..854bb6224 100644 --- a/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Properties/Tree/TreePropertyView.axaml +++ b/src/Avalonia/Artemis.UI/Screens/ProfileEditor/Panels/Properties/Tree/TreePropertyView.axaml @@ -37,8 +37,7 @@ + Content="{Binding PropertyInputViewModel}"/>