From 1e92d19c2f0ebd42d9653261b17def49b529891f Mon Sep 17 00:00:00 2001 From: Diogo Trindade Date: Fri, 7 Jan 2022 23:16:30 +0000 Subject: [PATCH 1/7] Documentation - Removed dead links from wiki --- docfx/docfx_project/index.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docfx/docfx_project/index.md b/docfx/docfx_project/index.md index 0cad893cf..0d7007d2d 100644 --- a/docfx/docfx_project/index.md +++ b/docfx/docfx_project/index.md @@ -6,16 +6,12 @@ A large part of this documentation is being generated based on code but over tim ## Plugins Artemis 2.0 has been developed from the ground up with plugins in mind. This means almost all functionality can be expanded. The following plugin types are currently available and fully implemented: - - [DataModelExpansion\](api/Artemis.Core.DataModelExpansions.DataModelExpansion-1.html) - [DeviceProvider](api/Artemis.Core.DeviceProviders.DeviceProvider.html) - [LayerBrush\](api/Artemis.Core.LayerBrushes.LayerBrush-1.html) - [PerLedLayerBrush\](api/Artemis.Core.LayerBrushes.PerLedLayerBrush-1.html) - - [RgbNetLayerBrush\](api/Artemis.Core.LayerBrushes.RgbNetLayerBrush-1.html) - [LayerEffect](api/Artemis.Core.LayerEffects.LayerEffect-1.html) - [Module](api/Artemis.Core.Modules.Module.html) - [Module\](api/Artemis.Core.Modules.Module-1.html) - - [ProfileModule](api/Artemis.Core.Modules.ProfileModule.html), - - [ProfileModule\](api/Artemis.Core.Modules.ProfileModule-1.html) These allow you to expand on Artemis's functionality. For quick and interactive plugin creation, use the [Visual Studio template extension](https://marketplace.visualstudio.com/items?itemName=SpoinkyNL.ArtemisTemplates). @@ -25,6 +21,6 @@ Example implementations of these plugins can be found on [GitHub](https://github Artemis provides plugins with an API through a range of services. All the services are available to plugins by using dependency injection in your plugin's constructor. Dependency injection is also available for the different view models plugins may provide. -- [Core Services](api/Artemis.Core.Services.Interfaces.html) -- [UI Services](api/Artemis.UI.Shared.Services.Interfaces.html) +- [Core Services](api/Artemis.Core.Services.html#interfaces) +- [UI Services](api/Artemis.UI.Shared.Services.html#interfaces) From 5b9d3e783aa34b3ca4f2086b339c0cc5da026063 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 5 Feb 2022 12:11:14 +0100 Subject: [PATCH 2/7] Debugger - Add FPS and other metrics to performance tab as well Debugger - Add RGB.NET delta to rendering tab --- src/Artemis.Core/Services/CoreService.cs | 1 + .../Performance/PerformanceDebugView.xaml | 14 ++- .../Performance/PerformanceDebugViewModel.cs | 91 ++++++++++++++++++- .../Settings/Debug/Tabs/RenderDebugView.xaml | 2 + .../Debug/Tabs/RenderDebugViewModel.cs | 18 +++- 5 files changed, 120 insertions(+), 6 deletions(-) diff --git a/src/Artemis.Core/Services/CoreService.cs b/src/Artemis.Core/Services/CoreService.cs index 8f9bfdbd5..0b3ca3fe8 100644 --- a/src/Artemis.Core/Services/CoreService.cs +++ b/src/Artemis.Core/Services/CoreService.cs @@ -208,6 +208,7 @@ namespace Artemis.Core.Services ); _logger.Information("Startup arguments: {args}", StartupArguments); _logger.Information("Elevated permissions: {perms}", IsElevated); + _logger.Information("Stopwatch high resolution: {perms}", Stopwatch.IsHighResolution); ApplyLoggingLevel(); diff --git a/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugView.xaml b/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugView.xaml index a63321f76..2d677e599 100644 --- a/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugView.xaml +++ b/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugView.xaml @@ -11,6 +11,7 @@ d:DataContext="{d:DesignInstance local:PerformanceDebugViewModel}"> + @@ -19,7 +20,18 @@ If you are having performance issues, below you can find out which plugin might be the culprit. - + + + + + + + + + + + + diff --git a/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugViewModel.cs b/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugViewModel.cs index 8b439619e..376d1edc7 100644 --- a/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugViewModel.cs +++ b/src/Artemis.UI/Screens/Settings/Debug/Tabs/Performance/PerformanceDebugViewModel.cs @@ -1,7 +1,13 @@ -using System.Linq; +using System.Diagnostics; +using System.IO; +using System.Linq; using System.Timers; +using System.Windows; +using System.Windows.Media.Imaging; using Artemis.Core; using Artemis.Core.Services; +using SkiaSharp; +using SkiaSharp.Views.WPF; using Stylet; namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance @@ -10,14 +16,56 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance { private readonly IPluginManagementService _pluginManagementService; private readonly Timer _updateTimer; + private readonly ICoreService _coreService; + private readonly Timer _fpsTimer; + private double _currentFps; + private int _renderWidth; + private int _renderHeight; + private string _renderer; + private int _frames; + private double _delta; + private double _lastDelta; - public PerformanceDebugViewModel(IPluginManagementService pluginManagementService) + public PerformanceDebugViewModel(ICoreService coreService, IPluginManagementService pluginManagementService) { + _coreService = coreService; _pluginManagementService = pluginManagementService; _updateTimer = new Timer(500); - + _fpsTimer = new Timer(1000); + DisplayName = "PERFORMANCE"; _updateTimer.Elapsed += UpdateTimerOnElapsed; + _fpsTimer.Start(); + } + + public double CurrentFps + { + get => _currentFps; + set => SetAndNotify(ref _currentFps, value); + } + + public int RenderWidth + { + get => _renderWidth; + set => SetAndNotify(ref _renderWidth, value); + } + + public int RenderHeight + { + get => _renderHeight; + set => SetAndNotify(ref _renderHeight, value); + } + + public string Renderer + { + get => _renderer; + set => SetAndNotify(ref _renderer, value); + } + + public double Delta + { + get => _delta; + set => SetAndNotify(ref _delta, value); } private void UpdateTimerOnElapsed(object sender, ElapsedEventArgs e) @@ -57,6 +105,10 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance _pluginManagementService.PluginDisabled += PluginToggled; _pluginManagementService.PluginFeatureEnabled += FeatureToggled; _pluginManagementService.PluginFeatureDisabled += FeatureToggled; + _coreService.FrameRendering += CoreServiceOnFrameRendering; + _coreService.FrameRendered += CoreServiceOnFrameRendered; + _fpsTimer.Elapsed += FpsTimerOnElapsed; + base.OnActivate(); } @@ -68,10 +120,43 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance _pluginManagementService.PluginDisabled -= PluginToggled; _pluginManagementService.PluginFeatureEnabled -= FeatureToggled; _pluginManagementService.PluginFeatureDisabled -= FeatureToggled; + _coreService.FrameRendering -= CoreServiceOnFrameRendering; + _coreService.FrameRendered -= CoreServiceOnFrameRendered; + _fpsTimer.Elapsed -= FpsTimerOnElapsed; + Items.Clear(); base.OnDeactivate(); } + /// + protected override void OnClose() + { + _fpsTimer.Dispose(); + base.OnClose(); + } + #endregion + + private void FpsTimerOnElapsed(object sender, ElapsedEventArgs e) + { + Delta = _lastDelta; + CurrentFps = _frames; + Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software"; + _frames = 0; + } + + private void CoreServiceOnFrameRendering(object? sender, FrameRenderingEventArgs e) + { + _lastDelta = e.DeltaTime; + } + + private void CoreServiceOnFrameRendered(object sender, FrameRenderedEventArgs e) + { + _frames++; + + SKImageInfo bitmapInfo = e.Texture.ImageInfo; + RenderHeight = bitmapInfo.Height; + RenderWidth = bitmapInfo.Width; + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugView.xaml b/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugView.xaml index 4a5c4205d..36aa6340a 100644 --- a/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugView.xaml +++ b/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugView.xaml @@ -36,6 +36,8 @@ + + diff --git a/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugViewModel.cs b/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugViewModel.cs index c1de5b041..72dab52c0 100644 --- a/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugViewModel.cs +++ b/src/Artemis.UI/Screens/Settings/Debug/Tabs/RenderDebugViewModel.cs @@ -25,6 +25,8 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs private string _frameTargetPath; private string _renderer; private int _frames; + private double _delta; + private double _lastDelta; public RenderDebugViewModel(ICoreService coreService) { @@ -64,6 +66,12 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs set => SetAndNotify(ref _renderer, value); } + public double Delta + { + get => _delta; + set => SetAndNotify(ref _delta, value); + } + public void SaveFrame() { VistaSaveFileDialog dialog = new VistaSaveFileDialog {Filter = "Portable network graphic (*.png)|*.png", Title = "Save render frame"}; @@ -80,6 +88,7 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs protected override void OnActivate() { + _coreService.FrameRendering += CoreServiceOnFrameRendering; _coreService.FrameRendered += CoreServiceOnFrameRendered; _fpsTimer.Elapsed += FpsTimerOnElapsed; base.OnActivate(); @@ -87,6 +96,7 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs protected override void OnDeactivate() { + _coreService.FrameRendering -= CoreServiceOnFrameRendering; _coreService.FrameRendered -= CoreServiceOnFrameRendered; _fpsTimer.Elapsed -= FpsTimerOnElapsed; base.OnDeactivate(); @@ -98,6 +108,10 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs base.OnClose(); } + private void CoreServiceOnFrameRendering(object? sender, FrameRenderingEventArgs e) + { + _lastDelta = e.DeltaTime; + } private void CoreServiceOnFrameRendered(object sender, FrameRenderedEventArgs e) { @@ -145,9 +159,9 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs private void FpsTimerOnElapsed(object sender, ElapsedEventArgs e) { + Delta = _lastDelta; CurrentFps = _frames; - // Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software"; - Renderer = $"HighAccuracyTimers: {Stopwatch.IsHighResolution}"; + Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software"; _frames = 0; } } From 72689f28d3dc99fb450b205da2a49fc539389bdf Mon Sep 17 00:00:00 2001 From: Elias* <31409841+EliasStar@users.noreply.github.com> Date: Mon, 21 Feb 2022 20:54:05 +0100 Subject: [PATCH 3/7] Add LED Location to DeviceLedsView (#688) --- .../Screens/Settings/Device/Tabs/DeviceLedsTabView.xaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Artemis.UI/Screens/Settings/Device/Tabs/DeviceLedsTabView.xaml b/src/Artemis.UI/Screens/Settings/Device/Tabs/DeviceLedsTabView.xaml index 52ad107fe..76fbbca3b 100644 --- a/src/Artemis.UI/Screens/Settings/Device/Tabs/DeviceLedsTabView.xaml +++ b/src/Artemis.UI/Screens/Settings/Device/Tabs/DeviceLedsTabView.xaml @@ -36,6 +36,7 @@ + From 517185f4b163444b2e5654ce0ab0a9158fa1da67 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 7 May 2022 17:09:44 +0200 Subject: [PATCH 4/7] General - Updated RGB.NET Core - Artemis should now always stick to the configured framerate (even 144) Plugins - Added many layouts from our Discord users, thanks everyone! Plugins - Fixed Logitech losing control after PC sleep --- src/Artemis.ConsoleUI/packages.lock.json | 22 +++++++-------- src/Artemis.Core/Artemis.Core.csproj | 6 ++-- src/Artemis.Core/packages.lock.json | 22 +++++++-------- .../Artemis.UI.Shared.csproj | 4 +-- src/Artemis.UI.Shared/packages.lock.json | 24 ++++++++-------- src/Artemis.UI/Artemis.UI.csproj | 6 ++-- src/Artemis.UI/packages.lock.json | 28 +++++++++---------- 7 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/Artemis.ConsoleUI/packages.lock.json b/src/Artemis.ConsoleUI/packages.lock.json index f88410446..26b849fed 100644 --- a/src/Artemis.ConsoleUI/packages.lock.json +++ b/src/Artemis.ConsoleUI/packages.lock.json @@ -206,23 +206,23 @@ }, "RGB.NET.Core": { "type": "Transitive", - "resolved": "1.0.0-prerelease7", - "contentHash": "IIja5sC4QZ5pbSNckRCG7TlY4U6j/dRbrl4e2FZqsTGgsevaVB3IqonUQLFY1GGst4xNSl2oh0A23coXQxXGbQ==" + "resolved": "1.0.0-prerelease.32", + "contentHash": "HlhhikrkV7OQIRszn6RT6+6N4QGGHaN6NDHK1YssZEJTtE2MIdeRajeQFFziPc4OVOvMgxY13unw/v25r/YALw==" }, "RGB.NET.Layout": { "type": "Transitive", - "resolved": "1.0.0-prerelease7", - "contentHash": "S0kfWVa8EfMOAl2WPHsq98dwaO+SNz9TWr1AtMkdo8aZuYIVhaJ1c+mSAMMnH1V+mSbxDWPHWkNzi9ITszJucA==", + "resolved": "1.0.0-prerelease.32", + "contentHash": "O7I8zR5Hy+joSLCJW10lkIPNMDS1gXe8hQuwm+T5DEDDpykVyc4tnO55WlO5GDmDCS/cXhcwq+qNpLez5Th4Xw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "RGB.NET.Presets": { "type": "Transitive", - "resolved": "1.0.0-prerelease7", - "contentHash": "NgShvOPQM0miOsdqMKjkNunngJUZMwr8KR8ME2/Ksir7wgIQfgJj1YwZy8aIj+ar7fDo6VZJZenAshs/Ul+04A==", + "resolved": "1.0.0-prerelease.32", + "contentHash": "tqPUA/KUG1hw5pT4D7OLXI6buXxpUIUYNET90gHnVXbadYi0C0OJZ703XDsaPpj4Db8/B2k8f1T4tM4s2KCJhw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { @@ -1244,9 +1244,9 @@ "Ninject": "3.3.4", "Ninject.Extensions.ChildKernel": "3.3.0", "Ninject.Extensions.Conventions": "3.3.0", - "RGB.NET.Core": "1.0.0-prerelease7", - "RGB.NET.Layout": "1.0.0-prerelease7", - "RGB.NET.Presets": "1.0.0-prerelease7", + "RGB.NET.Core": "1.0.0-prerelease.32", + "RGB.NET.Layout": "1.0.0-prerelease.32", + "RGB.NET.Presets": "1.0.0-prerelease.32", "Serilog": "2.10.0", "Serilog.Sinks.Console": "4.0.0", "Serilog.Sinks.Debug": "2.0.0", diff --git a/src/Artemis.Core/Artemis.Core.csproj b/src/Artemis.Core/Artemis.Core.csproj index 4a860799e..57ca5d067 100644 --- a/src/Artemis.Core/Artemis.Core.csproj +++ b/src/Artemis.Core/Artemis.Core.csproj @@ -47,9 +47,9 @@ - - - + + + diff --git a/src/Artemis.Core/packages.lock.json b/src/Artemis.Core/packages.lock.json index 6461c9b8c..ded219049 100644 --- a/src/Artemis.Core/packages.lock.json +++ b/src/Artemis.Core/packages.lock.json @@ -75,26 +75,26 @@ }, "RGB.NET.Core": { "type": "Direct", - "requested": "[1.0.0-prerelease7, )", - "resolved": "1.0.0-prerelease7", - "contentHash": "IIja5sC4QZ5pbSNckRCG7TlY4U6j/dRbrl4e2FZqsTGgsevaVB3IqonUQLFY1GGst4xNSl2oh0A23coXQxXGbQ==" + "requested": "[1.0.0-prerelease.32, )", + "resolved": "1.0.0-prerelease.32", + "contentHash": "HlhhikrkV7OQIRszn6RT6+6N4QGGHaN6NDHK1YssZEJTtE2MIdeRajeQFFziPc4OVOvMgxY13unw/v25r/YALw==" }, "RGB.NET.Layout": { "type": "Direct", - "requested": "[1.0.0-prerelease7, )", - "resolved": "1.0.0-prerelease7", - "contentHash": "S0kfWVa8EfMOAl2WPHsq98dwaO+SNz9TWr1AtMkdo8aZuYIVhaJ1c+mSAMMnH1V+mSbxDWPHWkNzi9ITszJucA==", + "requested": "[1.0.0-prerelease.32, )", + "resolved": "1.0.0-prerelease.32", + "contentHash": "O7I8zR5Hy+joSLCJW10lkIPNMDS1gXe8hQuwm+T5DEDDpykVyc4tnO55WlO5GDmDCS/cXhcwq+qNpLez5Th4Xw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "RGB.NET.Presets": { "type": "Direct", - "requested": "[1.0.0-prerelease7, )", - "resolved": "1.0.0-prerelease7", - "contentHash": "NgShvOPQM0miOsdqMKjkNunngJUZMwr8KR8ME2/Ksir7wgIQfgJj1YwZy8aIj+ar7fDo6VZJZenAshs/Ul+04A==", + "requested": "[1.0.0-prerelease.32, )", + "resolved": "1.0.0-prerelease.32", + "contentHash": "tqPUA/KUG1hw5pT4D7OLXI6buXxpUIUYNET90gHnVXbadYi0C0OJZ703XDsaPpj4Db8/B2k8f1T4tM4s2KCJhw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "Serilog": { diff --git a/src/Artemis.UI.Shared/Artemis.UI.Shared.csproj b/src/Artemis.UI.Shared/Artemis.UI.Shared.csproj index c6849d64f..d2e159850 100644 --- a/src/Artemis.UI.Shared/Artemis.UI.Shared.csproj +++ b/src/Artemis.UI.Shared/Artemis.UI.Shared.csproj @@ -1,4 +1,4 @@ - + net5.0-windows false @@ -39,7 +39,7 @@ - + diff --git a/src/Artemis.UI.Shared/packages.lock.json b/src/Artemis.UI.Shared/packages.lock.json index d31dcf1f7..d912a2956 100644 --- a/src/Artemis.UI.Shared/packages.lock.json +++ b/src/Artemis.UI.Shared/packages.lock.json @@ -54,9 +54,9 @@ }, "RGB.NET.Core": { "type": "Direct", - "requested": "[1.0.0-prerelease7, )", - "resolved": "1.0.0-prerelease7", - "contentHash": "IIja5sC4QZ5pbSNckRCG7TlY4U6j/dRbrl4e2FZqsTGgsevaVB3IqonUQLFY1GGst4xNSl2oh0A23coXQxXGbQ==" + "requested": "[1.0.0-prerelease.32, )", + "resolved": "1.0.0-prerelease.32", + "contentHash": "HlhhikrkV7OQIRszn6RT6+6N4QGGHaN6NDHK1YssZEJTtE2MIdeRajeQFFziPc4OVOvMgxY13unw/v25r/YALw==" }, "SharpVectors.Reloaded": { "type": "Direct", @@ -272,18 +272,18 @@ }, "RGB.NET.Layout": { "type": "Transitive", - "resolved": "1.0.0-prerelease7", - "contentHash": "S0kfWVa8EfMOAl2WPHsq98dwaO+SNz9TWr1AtMkdo8aZuYIVhaJ1c+mSAMMnH1V+mSbxDWPHWkNzi9ITszJucA==", + "resolved": "1.0.0-prerelease.32", + "contentHash": "O7I8zR5Hy+joSLCJW10lkIPNMDS1gXe8hQuwm+T5DEDDpykVyc4tnO55WlO5GDmDCS/cXhcwq+qNpLez5Th4Xw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "RGB.NET.Presets": { "type": "Transitive", - "resolved": "1.0.0-prerelease7", - "contentHash": "NgShvOPQM0miOsdqMKjkNunngJUZMwr8KR8ME2/Ksir7wgIQfgJj1YwZy8aIj+ar7fDo6VZJZenAshs/Ul+04A==", + "resolved": "1.0.0-prerelease.32", + "contentHash": "tqPUA/KUG1hw5pT4D7OLXI6buXxpUIUYNET90gHnVXbadYi0C0OJZ703XDsaPpj4Db8/B2k8f1T4tM4s2KCJhw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { @@ -1325,9 +1325,9 @@ "Ninject": "3.3.4", "Ninject.Extensions.ChildKernel": "3.3.0", "Ninject.Extensions.Conventions": "3.3.0", - "RGB.NET.Core": "1.0.0-prerelease7", - "RGB.NET.Layout": "1.0.0-prerelease7", - "RGB.NET.Presets": "1.0.0-prerelease7", + "RGB.NET.Core": "1.0.0-prerelease.32", + "RGB.NET.Layout": "1.0.0-prerelease.32", + "RGB.NET.Presets": "1.0.0-prerelease.32", "Serilog": "2.10.0", "Serilog.Sinks.Console": "4.0.0", "Serilog.Sinks.Debug": "2.0.0", diff --git a/src/Artemis.UI/Artemis.UI.csproj b/src/Artemis.UI/Artemis.UI.csproj index 1bb9d0780..d54e03885 100644 --- a/src/Artemis.UI/Artemis.UI.csproj +++ b/src/Artemis.UI/Artemis.UI.csproj @@ -1,4 +1,4 @@ - + WinExe net5.0-windows10.0.17763.0 @@ -145,8 +145,8 @@ - - + + diff --git a/src/Artemis.UI/packages.lock.json b/src/Artemis.UI/packages.lock.json index 34aad11eb..8e50c3991 100644 --- a/src/Artemis.UI/packages.lock.json +++ b/src/Artemis.UI/packages.lock.json @@ -124,17 +124,17 @@ }, "RGB.NET.Core": { "type": "Direct", - "requested": "[1.0.0-prerelease7, )", - "resolved": "1.0.0-prerelease7", - "contentHash": "IIja5sC4QZ5pbSNckRCG7TlY4U6j/dRbrl4e2FZqsTGgsevaVB3IqonUQLFY1GGst4xNSl2oh0A23coXQxXGbQ==" + "requested": "[1.0.0-prerelease.32, )", + "resolved": "1.0.0-prerelease.32", + "contentHash": "HlhhikrkV7OQIRszn6RT6+6N4QGGHaN6NDHK1YssZEJTtE2MIdeRajeQFFziPc4OVOvMgxY13unw/v25r/YALw==" }, "RGB.NET.Layout": { "type": "Direct", - "requested": "[1.0.0-prerelease7, )", - "resolved": "1.0.0-prerelease7", - "contentHash": "S0kfWVa8EfMOAl2WPHsq98dwaO+SNz9TWr1AtMkdo8aZuYIVhaJ1c+mSAMMnH1V+mSbxDWPHWkNzi9ITszJucA==", + "requested": "[1.0.0-prerelease.32, )", + "resolved": "1.0.0-prerelease.32", + "contentHash": "O7I8zR5Hy+joSLCJW10lkIPNMDS1gXe8hQuwm+T5DEDDpykVyc4tnO55WlO5GDmDCS/cXhcwq+qNpLez5Th4Xw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "Serilog": { @@ -394,10 +394,10 @@ }, "RGB.NET.Presets": { "type": "Transitive", - "resolved": "1.0.0-prerelease7", - "contentHash": "NgShvOPQM0miOsdqMKjkNunngJUZMwr8KR8ME2/Ksir7wgIQfgJj1YwZy8aIj+ar7fDo6VZJZenAshs/Ul+04A==", + "resolved": "1.0.0-prerelease.32", + "contentHash": "tqPUA/KUG1hw5pT4D7OLXI6buXxpUIUYNET90gHnVXbadYi0C0OJZ703XDsaPpj4Db8/B2k8f1T4tM4s2KCJhw==", "dependencies": { - "RGB.NET.Core": "1.0.0-prerelease7" + "RGB.NET.Core": "1.0.0-prerelease.32" } }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { @@ -1454,9 +1454,9 @@ "Ninject": "3.3.4", "Ninject.Extensions.ChildKernel": "3.3.0", "Ninject.Extensions.Conventions": "3.3.0", - "RGB.NET.Core": "1.0.0-prerelease7", - "RGB.NET.Layout": "1.0.0-prerelease7", - "RGB.NET.Presets": "1.0.0-prerelease7", + "RGB.NET.Core": "1.0.0-prerelease.32", + "RGB.NET.Layout": "1.0.0-prerelease.32", + "RGB.NET.Presets": "1.0.0-prerelease.32", "Serilog": "2.10.0", "Serilog.Sinks.Console": "4.0.0", "Serilog.Sinks.Debug": "2.0.0", @@ -1486,7 +1486,7 @@ "Microsoft.Xaml.Behaviors.Wpf": "1.1.31", "Ninject": "3.3.4", "Ninject.Extensions.Conventions": "3.3.0", - "RGB.NET.Core": "1.0.0-prerelease7", + "RGB.NET.Core": "1.0.0-prerelease.32", "SharpVectors.Reloaded": "1.7.5", "SkiaSharp": "2.80.3", "SkiaSharp.Views.WPF": "2.80.3", From 4ee4857b105798f9eeeacfd44722df6ea31a4849 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 12 May 2022 23:01:45 +0200 Subject: [PATCH 5/7] Core - Added timesToRepeat and seamless arguments to GetColor Core - Optimized GetColorsArray --- .../Models/Profile/Colors/ColorGradient.cs | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/src/Artemis.Core/Models/Profile/Colors/ColorGradient.cs b/src/Artemis.Core/Models/Profile/Colors/ColorGradient.cs index c621eb5c7..bdda754a0 100644 --- a/src/Artemis.Core/Models/Profile/Colors/ColorGradient.cs +++ b/src/Artemis.Core/Models/Profile/Colors/ColorGradient.cs @@ -54,9 +54,8 @@ namespace Artemis.Core } else { - List colors = this.Select(c => c.Color).ToList(); for (int i = 0; i <= timesToRepeat; i++) - result.AddRange(colors); + result.AddRange(this.Select(c => c.Color)); } if (seamless && !IsSeamless()) @@ -68,9 +67,7 @@ namespace Artemis.Core /// /// Gets all the positions in the color gradient /// - /// - /// The amount of times to repeat the positions - /// + /// The amount of times to repeat the positions /// /// A boolean indicating whether to make the gradient seamless by adding the first color behind the /// last color @@ -113,19 +110,30 @@ namespace Artemis.Core /// Gets a color at any position between 0.0 and 1.0 using interpolation /// /// A position between 0.0 and 1.0 - public SKColor GetColor(float position) + /// The amount of times to repeat the positions + /// + /// A boolean indicating whether to make the gradient seamless by adding the first color behind the + /// last color + /// + public SKColor GetColor(float position, int timesToRepeat = 0, bool seamless = false) { if (!this.Any()) - return SKColor.Empty; + return new SKColor(255, 255, 255); - ColorGradientStop[] stops = this.ToArray(); - if (position <= 0) return stops[0].Color; - if (position >= 1) return stops[^1].Color; - ColorGradientStop left = stops[0]; - ColorGradientStop? right = null; - foreach (ColorGradientStop stop in stops) + SKColor[] colors = GetColorsArray(timesToRepeat, seamless); + float[] stops = GetPositionsArray(timesToRepeat, seamless); + + // If at or over the edges, return the corresponding edge + if (position <= 0) return colors[0]; + if (position >= 1) return colors[^1]; + + // Walk through the stops until we find the one at or after the requested position, that becomes the right stop + // The left stop is the previous stop before the right one was found. + float left = stops[0]; + float? right = null; + foreach (float stop in stops) { - if (stop.Position >= position) + if (stop >= position) { right = stop; break; @@ -134,14 +142,22 @@ namespace Artemis.Core left = stop; } - if (right == null || left == right) - return left.Color; + // Get the left stop's color + SKColor leftColor = colors[Array.IndexOf(stops, left)]; - position = (float) Math.Round((position - left.Position) / (right.Position - left.Position), 2); - byte a = (byte) ((right.Color.Alpha - left.Color.Alpha) * position + left.Color.Alpha); - byte r = (byte) ((right.Color.Red - left.Color.Red) * position + left.Color.Red); - byte g = (byte) ((right.Color.Green - left.Color.Green) * position + left.Color.Green); - byte b = (byte) ((right.Color.Blue - left.Color.Blue) * position + left.Color.Blue); + // If no right stop was found or the left and right stops are on the same spot, return the left stop's color + if (right == null || left == right) + return leftColor; + + // Get the right stop's color + SKColor rightColor = colors[Array.IndexOf(stops, right)]; + + // Interpolate the position between the left and right color + position = MathF.Round((position - left) / (right.Value - left), 2); + byte a = (byte) ((rightColor.Alpha - leftColor.Alpha) * position + leftColor.Alpha); + byte r = (byte) ((rightColor.Red - leftColor.Red) * position + leftColor.Red); + byte g = (byte) ((rightColor.Green - leftColor.Green) * position + leftColor.Green); + byte b = (byte) ((rightColor.Blue - leftColor.Blue) * position + leftColor.Blue); return new SKColor(r, g, b, a); } From 16c6447bf9ae90fd9c256bb5797b04ebbb78489e Mon Sep 17 00:00:00 2001 From: Tony Langhammer Date: Tue, 28 Jun 2022 22:21:27 +0200 Subject: [PATCH 6/7] Fix LayerEffect order double variable assignment This fixes the accidental double assignment of the LayerEffect order messing up more complex profiles. Closes #669 --- src/Artemis.Core/Models/Profile/RenderProfileElement.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs index 6d70fa31a..b518ec1f7 100644 --- a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs +++ b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs @@ -273,7 +273,7 @@ namespace Artemis.Core int index = 0; foreach (BaseLayerEffect baseLayerEffect in LayerEffects.OrderBy(e => e.Order)) { - baseLayerEffect.Order = Order = index + 1; + baseLayerEffect.Order = index + 1; index++; } @@ -437,4 +437,4 @@ namespace Artemis.Core #endregion } -} \ No newline at end of file +} From 94826e85983040150568a531f4a7bb643869bb07 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 15 Jul 2022 21:46:51 +0200 Subject: [PATCH 7/7] Debugger - Added the ability to copy data model paths --- .../Shared/DataModelVisualizationViewModel.cs | 7 +++++++ .../Screens/Settings/Debug/Tabs/DataModelDebugView.xaml | 7 +++++++ .../Screens/Settings/Debug/Tabs/DataModelDebugViewModel.cs | 5 +++++ 3 files changed, 19 insertions(+) diff --git a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs index 47f3341d2..c7b16dbed 100644 --- a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs +++ b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs @@ -4,6 +4,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Reflection; using System.Text; +using System.Windows; using Artemis.Core; using Artemis.Core.Modules; using Artemis.UI.Shared.Services; @@ -194,6 +195,12 @@ namespace Artemis.UI.Shared IsMatchingFilteredTypes = filteredTypes.Any(t => t == type || t == typeof(Enum) && type.IsEnum); } + public void CopyPath() + { + if (Path != null) + Clipboard.SetText(Path); + } + internal virtual int GetChildDepth() { return 0; diff --git a/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugView.xaml b/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugView.xaml index f178ca853..5be27c2e5 100644 --- a/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugView.xaml +++ b/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugView.xaml @@ -73,6 +73,13 @@ diff --git a/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugViewModel.cs b/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugViewModel.cs index 7825cc03b..3588aada4 100644 --- a/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugViewModel.cs +++ b/src/Artemis.UI/Screens/Settings/Debug/Tabs/DataModelDebugViewModel.cs @@ -81,6 +81,11 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs } } + public void CopyPath(DataModelVisualizationViewModel viewModel) + { + viewModel.CopyPath(); + } + #region Overrides of Screen ///