1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-11 04:48:46 +00:00

Layer properties - Added string input

Profile editor - Run render loop on a DispatcherTimer when playing
This commit is contained in:
Robert 2022-02-01 21:02:44 +01:00
parent 9ebdaec4f1
commit ff4ec16690
34 changed files with 1003 additions and 645 deletions

3
.gitattributes vendored
View File

@ -61,3 +61,6 @@
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
# Display axaml files with XML highlighting
*.axaml linguist-language=xml

View File

@ -10,12 +10,12 @@
<None Remove=".gitignore" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.11" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.11" />
<PackageReference Include="Avalonia" Version="0.10.12" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.12" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.11" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.11" />
<PackageReference Include="ReactiveUI" Version="16.3.10" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.12" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.12" />
<PackageReference Include="ReactiveUI" Version="17.1.17" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Artemis.Core\Artemis.Core.csproj" />

View File

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

View File

@ -10,12 +10,12 @@
<None Remove=".gitignore" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.11" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.11" />
<PackageReference Include="Avalonia" Version="0.10.12" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.12" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.11" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.11" />
<PackageReference Include="ReactiveUI" Version="16.3.10" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.12" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.12" />
<PackageReference Include="ReactiveUI" Version="17.1.17" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Artemis.Core\Artemis.Core.csproj" />

View File

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

View File

@ -17,16 +17,16 @@
<None Remove="DefaultTypes\DataModel\Display\DefaultDataModelDisplayView.xaml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.11" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.11" />
<PackageReference Include="Avalonia.Svg.Skia" Version="0.10.11" />
<PackageReference Include="Avalonia.Xaml.Behaviors" Version="0.10.11.5" />
<PackageReference Include="Avalonia.Xaml.Interactions" Version="0.10.11.5" />
<PackageReference Include="Avalonia.Xaml.Interactivity" Version="0.10.11.5" />
<PackageReference Include="Avalonia" Version="0.10.12" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.12" />
<PackageReference Include="Avalonia.Svg.Skia" Version="0.10.12" />
<PackageReference Include="Avalonia.Xaml.Behaviors" Version="0.10.12" />
<PackageReference Include="Avalonia.Xaml.Interactions" Version="0.10.12" />
<PackageReference Include="Avalonia.Xaml.Interactivity" Version="0.10.12" />
<PackageReference Include="DynamicData" Version="7.4.9" />
<PackageReference Include="FluentAvaloniaUI" Version="1.1.8" />
<PackageReference Include="Material.Icons.Avalonia" Version="1.0.2" />
<PackageReference Include="ReactiveUI" Version="16.3.10" />
<PackageReference Include="ReactiveUI" Version="17.1.17" />
<PackageReference Include="ReactiveUI.Validation" Version="2.2.1" />
<PackageReference Include="RGB.NET.Core" Version="1.0.0-prerelease7" />
<PackageReference Include="SkiaSharp" Version="2.88.0-preview.178" />

View File

@ -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
);
}
}

View File

@ -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);
}
}

View File

@ -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<T> : IProfileEditorCommand
{
private readonly bool _enable;
private readonly TimeSpan _time;
private readonly LayerProperty<T> _layerProperty;
private LayerPropertyKeyframe<T>? _keyframe;
/// <summary>
/// Creates a new instance of the <see cref="ToggleLayerPropertyKeyframes{T}"/> class.
/// </summary>
public ToggleLayerPropertyKeyframes(LayerProperty<T> layerProperty, bool enable)
public ToggleLayerPropertyKeyframes(LayerProperty<T> layerProperty, bool enable, TimeSpan time)
{
_layerProperty = layerProperty;
_enable = enable;
_time = time;
}
#region Implementation of IProfileEditorCommand
@ -28,12 +32,15 @@ public class ToggleLayerPropertyKeyframes<T> : IProfileEditorCommand
/// <inheritdoc />
public void Execute()
{
_keyframe ??= new LayerPropertyKeyframe<T>(_layerProperty.CurrentValue, _time, Easings.Functions.Linear, _layerProperty);
_layerProperty.KeyframesEnabled = _enable;
_layerProperty.AddKeyframe(_keyframe);
}
/// <inheritdoc />
public void Undo()
{
_layerProperty.RemoveKeyframe(_keyframe!);
_layerProperty.KeyframesEnabled = !_enable;
}

View File

@ -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<int> _pixelsPerSecondSubject = new(120);
private readonly BehaviorSubject<bool> _playingSubject = new(false);
private readonly BehaviorSubject<ProfileConfiguration?> _profileConfigurationSubject = new(null);
private readonly Dictionary<ProfileConfiguration, ProfileEditorHistory> _profileEditorHistories = new();
private readonly BehaviorSubject<RenderProfileElement?> _profileElementSubject = new(null);
private readonly BehaviorSubject<TimeSpan> _timeSubject = new(TimeSpan.Zero);
private readonly BehaviorSubject<bool> _playingSubject = new(false);
private readonly BehaviorSubject<bool> _suspendedEditingSubject = new(false);
private readonly BehaviorSubject<int> _pixelsPerSecondSubject = new(120);
private readonly SourceList<ILayerPropertyKeyframe> _selectedKeyframes = new();
private readonly ILogger _logger;
private readonly IProfileService _profileService;
private readonly IModuleService _moduleService;
private readonly SourceList<ILayerPropertyKeyframe> _selectedKeyframes = new();
private readonly BehaviorSubject<bool> _suspendedEditingSubject = new(false);
private readonly BehaviorSubject<TimeSpan> _timeSubject = new(TimeSpan.Zero);
private readonly IWindowService _windowService;
private ProfileEditorCommandScope? _profileEditorHistoryScope;
@ -47,6 +45,8 @@ internal class ProfileEditorService : IProfileEditorService
PixelsPerSecond = _pixelsPerSecondSubject.AsObservable();
}
public IObservable<bool> 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?> ProfileConfiguration { get; }
public IObservable<RenderProfileElement?> ProfileElement { get; }
public IObservable<ProfileEditorHistory?> History { get; }
public IObservable<TimeSpan> Time { get; }
public IObservable<bool> Playing { get; }
public IObservable<bool> SuspendedEditing { get; }
public IObservable<int> PixelsPerSecond { get; }
public IObservable<IChangeSet<ILayerPropertyKeyframe>> ConnectToKeyframes() => _selectedKeyframes.Connect();
public IObservable<IChangeSet<ILayerPropertyKeyframe>> ConnectToKeyframes()
{
return _selectedKeyframes.Connect();
}
public void ChangeCurrentProfileConfiguration(ProfileConfiguration? profileConfiguration)
{
@ -143,11 +176,8 @@ internal class ProfileEditorService : IProfileEditorService
else
{
if (expand)
{
_selectedKeyframes.Add(keyframe);
}
else
{
_selectedKeyframes.Edit(l =>
{
l.Clear();
@ -155,7 +185,6 @@ internal class ProfileEditorService : IProfileEditorService
});
}
}
}
public void SelectKeyframes(IEnumerable<ILayerPropertyKeyframe> keyframes, bool expand)
{
@ -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);
}
/// <inheritdoc />
public void SaveProfile()
{
Profile? profile = _profileConfigurationSubject.Value?.Profile;
if (profile == null)
return;
_profileService.SaveProfile(profile, true);
}
/// <inheritdoc />
public async Task SaveProfileAsync()
{
await Task.Run(SaveProfile);
}
/// <inheritdoc />
public void Play()
{
if (!_playingSubject.Value)
_playingSubject.OnNext(true);
}
/// <inheritdoc />
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
/// <inheritdoc />
public void SaveProfile()
{
Profile? profile = _profileConfigurationSubject.Value?.Profile;
if (profile == null)
return;
_profileService.SaveProfile(profile, true);
}
/// <inheritdoc />
public async Task SaveProfileAsync()
{
await Task.Run(SaveProfile);
}
/// <inheritdoc />
public void Play()
{
if (!_playingSubject.Value)
_playingSubject.OnNext(true);
}
/// <inheritdoc />
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);
}
}
}

View File

@ -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<T> : PropertyInputViewModel
.Subscribe(_ => UpdateDataBinding())
.DisposeWith(d);
});
ValidationContext.ValidationStatusChange.Subscribe(s => Console.WriteLine(s));
}
/// <summary>
@ -177,6 +180,8 @@ public abstract class PropertyInputViewModel<T> : PropertyInputViewModel
}
private void UpdateInputValue()
{
Dispatcher.UIThread.Post(() =>
{
try
{
@ -196,6 +201,8 @@ public abstract class PropertyInputViewModel<T> : PropertyInputViewModel
{
_updating = false;
}
});
}
private void UpdateDataBinding()

View File

@ -1,7 +1,8 @@
<Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
xmlns:attachedProperties="clr-namespace:Artemis.UI.Shared.AttachedProperties">
xmlns:attachedProperties="clr-namespace:Artemis.UI.Shared.AttachedProperties"
xmlns:system="clr-namespace:System;assembly=System.Runtime">
<Design.PreviewWith>
<Border Padding="20">
<StackPanel Spacing="20">
@ -12,7 +13,11 @@
<controls:NumberBox Classes="condensed"
Value="9999999"
attachedProperties:NumberBoxAssist.PrefixText="%"
attachedProperties:NumberBoxAssist.SuffixText="%"/>
attachedProperties:NumberBoxAssist.SuffixText="%">
<DataValidationErrors.Error>
<system:Exception/>
</DataValidationErrors.Error>
</controls:NumberBox>
</StackPanel>
</Border>
@ -117,4 +122,8 @@
<Setter Property="attachedProperties:TextBoxAssist.PrefixText" Value="{TemplateBinding attachedProperties:NumberBoxAssist.PrefixText}"></Setter>
<Setter Property="attachedProperties:TextBoxAssist.SuffixText" Value="{TemplateBinding attachedProperties:NumberBoxAssist.SuffixText}"></Setter>
</Style>
<Style Selector="controls|NumberBox /template/ TextBox.NumberBoxTextBoxStyle">
<Setter Property="DataValidationErrors.Errors" Value="{TemplateBinding DataValidationErrors.Errors}" />
</Style>
</Styles>

View File

@ -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": {

View File

@ -10,15 +10,15 @@
<None Remove=".gitignore" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.11" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.11" />
<PackageReference Include="Avalonia" Version="0.10.12" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.12" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.11" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.11" />
<PackageReference Include="Avalonia.Win32" Version="0.10.11" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.12" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.12" />
<PackageReference Include="Avalonia.Win32" Version="0.10.12" />
<PackageReference Include="Microsoft.Win32" Version="2.0.1" />
<PackageReference Include="RawInput.Sharp" Version="0.0.4" />
<PackageReference Include="ReactiveUI" Version="16.3.10" />
<PackageReference Include="ReactiveUI" Version="17.1.17" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Artemis.Core\Artemis.Core.csproj" />

View File

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

View File

@ -15,18 +15,18 @@
<None Remove="Assets\Images\Logo\application.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.11" />
<PackageReference Include="Avalonia.Controls.PanAndZoom" Version="10.11.1" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.11" />
<PackageReference Include="Avalonia.Diagnostics" Version="0.10.11" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.11" />
<PackageReference Include="Avalonia.Svg.Skia" Version="0.10.11" />
<PackageReference Include="Avalonia" Version="0.10.12" />
<PackageReference Include="Avalonia.Controls.PanAndZoom" Version="10.12.0" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.12" />
<PackageReference Include="Avalonia.Diagnostics" Version="0.10.12" />
<PackageReference Include="Avalonia.ReactiveUI" Version="0.10.12" />
<PackageReference Include="Avalonia.Svg.Skia" Version="0.10.12" />
<PackageReference Include="DynamicData" Version="7.4.9" />
<PackageReference Include="FluentAvaloniaUI" Version="1.1.8" />
<PackageReference Include="Flurl.Http" Version="3.2.0" />
<PackageReference Include="Live.Avalonia" Version="1.3.1" />
<PackageReference Include="Material.Icons.Avalonia" Version="1.0.2" />
<PackageReference Include="ReactiveUI" Version="16.3.10" />
<PackageReference Include="ReactiveUI" Version="17.1.17" />
<PackageReference Include="ReactiveUI.Validation" Version="2.2.1" />
<PackageReference Include="RGB.NET.Core" Version="1.0.0-prerelease7" />
<PackageReference Include="RGB.NET.Layout" Version="1.0.0-prerelease7" />
@ -50,6 +50,9 @@
<Resource Include="Assets\Images\Logo\bow.svg" />
</ItemGroup>
<ItemGroup>
<Compile Update="DefaultTypes\PropertyInput\StringPropertyInputView.axaml.cs">
<DependentUpon>StringPropertyInputView.xaml</DependentUpon>
</Compile>
<Compile Update="Screens\ProfileEditor\Panels\Properties\PropertiesView.axaml.cs">
<DependentUpon>PropertiesView.axaml</DependentUpon>
</Compile>
@ -57,4 +60,9 @@
<ItemGroup>
<Folder Include="DefaultTypes\DataModel\Display\" />
</ItemGroup>
<ItemGroup>
<AvaloniaXaml Update="DefaultTypes\PropertyInput\StringPropertyInputView.axaml">
<Generator>MSBuild:Compile</Generator>
</AvaloniaXaml>
</ItemGroup>
</Project>

View File

@ -8,7 +8,10 @@
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.DefaultTypes.PropertyInput.FloatPropertyInputView"
x:DataType="propertyInput:FloatPropertyInputViewModel">
<controls:NumberBox Classes="condensed"
<UserControl.Styles>
<StyleInclude Source="/DefaultTypes/PropertyInput/PropertyInputStyles.axaml" />
</UserControl.Styles>
<controls:NumberBox Classes="condensed tooltip-validation-left"
MinWidth="80"
Value="{CompiledBinding InputValue}"
SmallChange="{Binding LayerProperty.PropertyDescription.InputStepSize}"

View File

@ -14,7 +14,7 @@ public class FloatPropertyInputViewModel : PropertyInputViewModel<float>
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}.");
}
}

View File

@ -0,0 +1,52 @@
<Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=System.Runtime"
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia">
<Design.PreviewWith>
<Border Padding="20" Width="600" Height="200">
<StackPanel Spacing="10">
<TextBox Classes="tooltip-validation-left" Text="Sample" VerticalAlignment="Top">
<DataValidationErrors.Error>
<system:Exception/>
</DataValidationErrors.Error>
</TextBox>
<controls:NumberBox Classes="tooltip-validation-left" Text="Sample" VerticalAlignment="Top">
<DataValidationErrors.Error>
<system:Exception/>
</DataValidationErrors.Error>
</controls:NumberBox>
</StackPanel>
</Border>
</Design.PreviewWith>
<Style Selector="DataValidationErrors">
<Style.Resources>
<ControlTemplate x:Key="TooltipDataValidationLeftContentTemplate" TargetType="DataValidationErrors">
<DockPanel LastChildFill="True">
<ContentControl Content="{Binding (DataValidationErrors.Errors)}"
ContentTemplate="{TemplateBinding ErrorTemplate}"
DataContext="{TemplateBinding Owner}"
DockPanel.Dock="Left"
IsVisible="{Binding (DataValidationErrors.HasErrors)}" />
<ContentPresenter Name="PART_ContentPresenter"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
</DockPanel>
</ControlTemplate>
</Style.Resources>
</Style>
<Style Selector="TextBox.tooltip-validation-left DataValidationErrors">
<Setter Property="Template" Value="{DynamicResource TooltipDataValidationLeftContentTemplate}" />
<Setter Property="ErrorTemplate" Value="{DynamicResource TooltipDataValidationErrorTemplate}" />
</Style>
<Style Selector="controls|NumberBox.tooltip-validation-left /template/ TextBox DataValidationErrors">
<Setter Property="Template" Value="{DynamicResource TooltipDataValidationLeftContentTemplate}" />
<Setter Property="ErrorTemplate" Value="{DynamicResource TooltipDataValidationErrorTemplate}" />
</Style>
</Styles>

View File

@ -0,0 +1,19 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:shared="clr-namespace:Artemis.UI.Shared.AttachedProperties;assembly=Artemis.UI.Shared"
xmlns:propertyInput="clr-namespace:Artemis.UI.DefaultTypes.PropertyInput"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.DefaultTypes.PropertyInput.StringPropertyInputView"
x:DataType="propertyInput:StringPropertyInputViewModel">
<UserControl.Styles>
<StyleInclude Source="/DefaultTypes/PropertyInput/PropertyInputStyles.axaml" />
</UserControl.Styles>
<TextBox Classes="condensed tooltip-validation-left"
MinWidth="80"
Text="{CompiledBinding InputValue}"
VerticalAlignment="Center"
shared:TextBoxAssist.PrefixText="{CompiledBinding Prefix}"
shared:TextBoxAssist.SuffixText="{CompiledBinding Affix}" />
</UserControl>

View File

@ -0,0 +1,25 @@
using Avalonia.Input;
using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
namespace Artemis.UI.DefaultTypes.PropertyInput;
public class StringPropertyInputView : ReactiveUserControl<FloatPropertyInputViewModel>
{
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);
}
}

View File

@ -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<string>
{
public StringPropertyInputViewModel(LayerProperty<string> layerProperty, IProfileEditorService profileEditorService, IPropertyInputService propertyInputService)
: base(layerProperty, profileEditorService, propertyInputService)
{
}
}

View File

@ -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

View File

@ -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<FrameRenderingEventArgs>(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,12 +165,17 @@ public class PlaybackViewModel : ActivatableViewModelBase
return TimeSpan.Zero;
}
private void CoreServiceOnFrameRendering(FrameRenderingEventArgs e)
private void Update(object? sender, EventArgs e)
{
try
{
if (!Playing)
return;
TimeSpan newTime = CurrentTime.Add(TimeSpan.FromSeconds(e.DeltaTime));
if (_lastUpdate == DateTime.MinValue)
_lastUpdate = DateTime.Now;
TimeSpan newTime = CurrentTime.Add(DateTime.Now - _lastUpdate);
if (_profileElement != null)
{
if (Repeating && RepeatTimeline)
@ -190,4 +197,9 @@ public class PlaybackViewModel : ActivatableViewModelBase
_profileEditorService.ChangeTime(newTime);
}
finally
{
_lastUpdate = DateTime.Now;
}
}
}

View File

@ -37,8 +37,7 @@
<ContentControl Grid.Column="2"
Margin="5 0"
Content="{Binding PropertyInputViewModel}"
ToolTip.Tip="{Binding LayerProperty.PropertyDescription.Description}" />
Content="{Binding PropertyInputViewModel}"/>
<Button Grid.Column="3"
Margin="0 0 2 0"

View File

@ -12,9 +12,9 @@ namespace Artemis.UI.Screens.ProfileEditor.Properties.Tree;
internal class TreePropertyViewModel<T> : ActivatableViewModelBase, ITreePropertyViewModel
{
private readonly IProfileEditorService _profileEditorService;
private TimeSpan _time;
public TreePropertyViewModel(LayerProperty<T> layerProperty, PropertyViewModel propertyViewModel, IProfileEditorService profileEditorService,
IPropertyInputService propertyInputService)
public TreePropertyViewModel(LayerProperty<T> layerProperty, PropertyViewModel propertyViewModel, IProfileEditorService profileEditorService, IPropertyInputService propertyInputService)
{
_profileEditorService = profileEditorService;
@ -22,7 +22,11 @@ internal class TreePropertyViewModel<T> : ActivatableViewModelBase, ITreePropert
PropertyViewModel = propertyViewModel;
PropertyInputViewModel = propertyInputService.CreatePropertyInputViewModel(LayerProperty);
this.WhenActivated(d => this.WhenAnyValue(vm => vm.LayerProperty.KeyframesEnabled).Subscribe(_ => this.RaisePropertyChanged(nameof(KeyframesEnabled))).DisposeWith(d));
this.WhenActivated(d =>
{
_profileEditorService.Time.Subscribe(t => _time = t).DisposeWith(d);
this.WhenAnyValue(vm => vm.LayerProperty.KeyframesEnabled).Subscribe(_ => this.RaisePropertyChanged(nameof(KeyframesEnabled))).DisposeWith(d);
});
}
public LayerProperty<T> LayerProperty { get; }
@ -40,7 +44,7 @@ internal class TreePropertyViewModel<T> : ActivatableViewModelBase, ITreePropert
if (value == LayerProperty.KeyframesEnabled)
return;
_profileEditorService.ExecuteCommand(new ToggleLayerPropertyKeyframes<T>(LayerProperty, value));
_profileEditorService.ExecuteCommand(new ToggleLayerPropertyKeyframes<T>(LayerProperty, value, _time));
}
public ILayerProperty BaseLayerProperty => LayerProperty;

View File

@ -0,0 +1,6 @@
namespace Artemis.UI.Screens.ProfileEditor.VisualEditor.Tools
{
public interface IToolViewModel
{
}
}

View File

@ -25,6 +25,8 @@
<TransformOperationsTransition Property="RenderTransform" Duration="0:0:0.2" Easing="CubicEaseOut"/>
</Transitions>
</Grid.Transitions>
<!-- The bottom layer consists of devices -->
<ItemsControl Items="{CompiledBinding Devices}" ClipToBounds="False">
<ItemsControl.Styles>
<Style Selector="ContentPresenter">
@ -42,6 +44,24 @@
<controls:DeviceVisualizer Device="{Binding}" ShowColors="True" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!-- The middle layer contains visualizers -->
<ItemsControl Items="{CompiledBinding Visualizers}" ClipToBounds="False">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<!-- The top layer contains tools -->
<ItemsControl Items="{CompiledBinding Tools}" ClipToBounds="False">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</paz:ZoomBorder>

View File

@ -3,28 +3,52 @@ using System.Collections.ObjectModel;
using System.Reactive.Disposables;
using Artemis.Core;
using Artemis.Core.Services;
using Artemis.UI.Ninject.Factories;
using Artemis.UI.Screens.ProfileEditor.VisualEditor.Tools;
using Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Services.ProfileEditor;
using ReactiveUI;
namespace Artemis.UI.Screens.ProfileEditor.VisualEditor
{
namespace Artemis.UI.Screens.ProfileEditor.VisualEditor;
public class VisualEditorViewModel : ActivatableViewModelBase
{
private ProfileConfiguration? _profileConfiguration;
private readonly IProfileEditorVmFactory _vmFactory;
private ObservableAsPropertyHelper<ProfileConfiguration?>? _profileConfiguration;
public VisualEditorViewModel(IProfileEditorService profileEditorService, IRgbService rgbService)
public VisualEditorViewModel(IProfileEditorService profileEditorService, IRgbService rgbService, IProfileEditorVmFactory vmFactory)
{
_vmFactory = vmFactory;
Devices = new ObservableCollection<ArtemisDevice>(rgbService.EnabledDevices);
this.WhenActivated(d => profileEditorService.ProfileConfiguration.Subscribe(configuration => ProfileConfiguration = configuration).DisposeWith(d));
Visualizers = new ObservableCollection<IVisualizerViewModel>();
Tools = new ObservableCollection<IToolViewModel>();
this.WhenActivated(d =>
{
_profileConfiguration = profileEditorService.ProfileConfiguration.ToProperty(this, vm => vm.ProfileConfiguration).DisposeWith(d);
profileEditorService.ProfileConfiguration.Subscribe(CreateVisualizers).DisposeWith(d);
});
}
public ProfileConfiguration? ProfileConfiguration
{
get => _profileConfiguration;
set => this.RaiseAndSetIfChanged(ref _profileConfiguration, value);
}
public ProfileConfiguration? ProfileConfiguration => _profileConfiguration?.Value;
public ObservableCollection<ArtemisDevice> Devices { get; }
public ObservableCollection<IVisualizerViewModel> Visualizers { get; set; }
public ObservableCollection<IToolViewModel> Tools { get; set; }
private void CreateVisualizers(ProfileConfiguration? profileConfiguration)
{
Visualizers.Clear();
if (profileConfiguration?.Profile == null)
return;
foreach (Layer layer in profileConfiguration.Profile.GetAllLayers())
CreateVisualizer(layer);
}
private void CreateVisualizer(Layer layer)
{
Visualizers.Add(_vmFactory.LayerVisualizerViewModel(layer));
}
}

View File

@ -0,0 +1,5 @@
namespace Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers;
public interface IVisualizerViewModel
{
}

View File

@ -0,0 +1,23 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:visualizers="clr-namespace:Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers.LayerVisualizerView"
x:DataType="visualizers:LayerVisualizerViewModel">
<UserControl.Styles>
<Style Selector="Path.layer-visualizer">
<Setter Property="Stroke" Value="{StaticResource ButtonBorderBrushDisabled}" />
</Style>
<Style Selector="Path.layer-visualizer-selected">
<Setter Property="Stroke" Value="{StaticResource SystemAccentColorLight1}" />
</Style>
</UserControl.Styles>
<Path Classes="layer-visualizer"
Classes.layer-visualizer-selected="{CompiledBinding Selected}"
Data="{CompiledBinding ShapeGeometry, Mode=OneWay}"
StrokeThickness="2"
Margin="0 0 2 2">
</Path>
</UserControl>

View File

@ -0,0 +1,18 @@
using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
namespace Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers
{
public partial class LayerVisualizerView : ReactiveUserControl<LayerVisualizerViewModel>
{
public LayerVisualizerView()
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
}

View File

@ -0,0 +1,67 @@
using System;
using System.Reactive.Linq;
using Artemis.Core;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Extensions;
using Artemis.UI.Shared.Services.ProfileEditor;
using Avalonia.Controls.Mixins;
using Avalonia.Media;
using ReactiveUI;
namespace Artemis.UI.Screens.ProfileEditor.VisualEditor.Visualizers;
public class LayerVisualizerViewModel : ActivatableViewModelBase, IVisualizerViewModel
{
private Geometry? _shapeGeometry;
private ObservableAsPropertyHelper<bool>? _selected;
public LayerVisualizerViewModel(Layer layer, IProfileEditorService profileEditorService)
{
Layer = layer;
this.WhenActivated(d =>
{
Observable.FromEventPattern(x => Layer.RenderPropertiesUpdated += x, x => Layer.RenderPropertiesUpdated -= x).Subscribe(_ => UpdateShape()).DisposeWith(d);
Observable.FromEventPattern<LayerPropertyEventArgs>(x => Layer.Transform.Position.CurrentValueSet += x, x => Layer.Transform.Position.CurrentValueSet -= x)
.Subscribe(_ => UpdateTransform())
.DisposeWith(d);
Observable.FromEventPattern<LayerPropertyEventArgs>(x => Layer.Transform.Rotation.CurrentValueSet += x, x => Layer.Transform.Rotation.CurrentValueSet -= x)
.Subscribe(_ => UpdateTransform())
.DisposeWith(d);
Observable.FromEventPattern<LayerPropertyEventArgs>(x => Layer.Transform.Scale.CurrentValueSet += x, x => Layer.Transform.Scale.CurrentValueSet -= x)
.Subscribe(_ => UpdateTransform())
.DisposeWith(d);
Observable.FromEventPattern<LayerPropertyEventArgs>(x => Layer.Transform.AnchorPoint.CurrentValueSet += x, x => Layer.Transform.AnchorPoint.CurrentValueSet -= x)
.Subscribe(_ => UpdateTransform())
.DisposeWith(d);
_selected = profileEditorService.ProfileElement.Select(p => p == Layer).ToProperty(this, vm => vm.Selected).DisposeWith(d);
profileEditorService.Time.Subscribe(_ => UpdateTransform()).DisposeWith(d);
UpdateShape();
});
}
public Layer Layer { get; }
public bool Selected => _selected?.Value ?? false;
public Geometry? ShapeGeometry
{
get => _shapeGeometry;
set => this.RaiseAndSetIfChanged(ref _shapeGeometry, value);
}
private void UpdateShape()
{
if (Layer.General.ShapeType.CurrentValue == LayerShapeType.Rectangle)
ShapeGeometry = new RectangleGeometry(Layer.Bounds.ToRect());
else
ShapeGeometry = new EllipseGeometry(Layer.Bounds.ToRect());
}
private void UpdateTransform()
{
if (ShapeGeometry != null)
ShapeGeometry.Transform = new MatrixTransform(Layer.GetTransformMatrix(false, true, true, true).ToMatrix());
}
}

View File

@ -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,59 +19,59 @@
},
"Avalonia.Controls.PanAndZoom": {
"type": "Direct",
"requested": "[10.11.1, )",
"resolved": "10.11.1",
"contentHash": "XIjA3iGHMfokPXw/ov5CqKKPR8HdVrTBOMYJVOGpDQyec6RwI/w7lq530wfIMebIe9xUj5RY2Jx5heQtCuAFmg==",
"requested": "[10.12.0, )",
"resolved": "10.12.0",
"contentHash": "ns+2tJTXTpNzNA9YV2mjR4EJOZl2vBFWnGUTSIl/vyOQMrrU5CbsXQxy2MFBvW0vGrRTlw80nUtBnsT759kwKQ==",
"dependencies": {
"Avalonia": "0.10.11"
"Avalonia": "0.10.12"
}
},
"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.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"
}
},
"DynamicData": {
@ -126,12 +126,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": {
@ -186,43 +186,43 @@
},
"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.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",
@ -233,10 +233,10 @@
},
"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"
@ -244,39 +244,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": {
@ -488,10 +488,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": {
@ -730,8 +730,8 @@
},
"ShimSkiaSharp": {
"type": "Transitive",
"resolved": "0.5.11",
"contentHash": "a04YHHKRK1xY8ccSgpa6HOmOw9Kuivo2b2qejp9CK00ykdCBK3Mmc+ekBx954+zPQBksN6aLhvn1SEL7QG2s8Q=="
"resolved": "0.5.12",
"contentHash": "oUGM7gQHRzbGPRs3E1pe5e8VwML21YyEz9xdo+r2ov1mAqSDPyXErVQP6pN4gnfYMVf5ADR7BVkVzt4R9Iz3gQ=="
},
"SkiaSharp.HarfBuzz": {
"type": "Transitive",
@ -772,11 +772,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"
@ -784,22 +783,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": {
@ -991,10 +990,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": {
@ -1757,17 +1757,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"
}