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}"/>