From 28640f950284d5ceaac292f398cd0c1265541b69 Mon Sep 17 00:00:00 2001 From: RobertBeekman Date: Sat, 2 Mar 2024 17:38:20 +0100 Subject: [PATCH] Profiles - Avoid unnecessary OnBrokenStateChanged calls Profiles - Fixed int range/float range deserialization Profiles - Use Random.Shared where applicable --- src/Artemis.Core/Models/BreakableModel.cs | 3 +++ src/Artemis.Core/Models/Profile/Layer.cs | 6 ++++-- .../Models/Profile/LayerProperties/FloatRange.cs | 4 +++- src/Artemis.Core/Models/Profile/LayerProperties/IntRange.cs | 4 +++- .../Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs | 2 +- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Artemis.Core/Models/BreakableModel.cs b/src/Artemis.Core/Models/BreakableModel.cs index f0338cd0f..9f2c60ed9 100644 --- a/src/Artemis.Core/Models/BreakableModel.cs +++ b/src/Artemis.Core/Models/BreakableModel.cs @@ -61,6 +61,9 @@ public abstract class BreakableModel : CorePropertyChanged, IBreakableModel /// public void SetBrokenState(string state, Exception? exception = null) { + if (state == BrokenState && BrokenStateException?.StackTrace == exception?.StackTrace) + return; + BrokenState = state ?? throw new ArgumentNullException(nameof(state)); BrokenStateException = exception; OnBrokenStateChanged(); diff --git a/src/Artemis.Core/Models/Profile/Layer.cs b/src/Artemis.Core/Models/Profile/Layer.cs index 66df68a05..41661290d 100644 --- a/src/Artemis.Core/Models/Profile/Layer.cs +++ b/src/Artemis.Core/Models/Profile/Layer.cs @@ -160,10 +160,12 @@ public sealed class Layer : RenderProfileElement public LayerAdapter Adapter { get; } /// - public override bool ShouldBeEnabled => !Suspended && DisplayConditionMet; + public override bool ShouldBeEnabled => !Suspended && DisplayConditionMet && HasBounds; internal override RenderElementEntity RenderElementEntity => LayerEntity; + private bool HasBounds => Bounds.Width > 0 && Bounds.Height > 0; + /// public override List GetAllLayerProperties() { @@ -383,7 +385,7 @@ public sealed class Layer : RenderProfileElement if (ShouldBeEnabled) Enable(); - else if (Suspended || (Timeline.IsFinished && !_renderCopies.Any())) + else if (Suspended || !HasBounds || (Timeline.IsFinished && !_renderCopies.Any())) Disable(); if (!Enabled || Timeline.Delta == TimeSpan.Zero) diff --git a/src/Artemis.Core/Models/Profile/LayerProperties/FloatRange.cs b/src/Artemis.Core/Models/Profile/LayerProperties/FloatRange.cs index 5ecc252c0..a926118b2 100644 --- a/src/Artemis.Core/Models/Profile/LayerProperties/FloatRange.cs +++ b/src/Artemis.Core/Models/Profile/LayerProperties/FloatRange.cs @@ -1,4 +1,5 @@ using System; +using System.Text.Json.Serialization; namespace Artemis.Core; @@ -14,12 +15,13 @@ public readonly struct FloatRange /// /// The start value of the range /// The end value of the range + [JsonConstructor] public FloatRange(float start, float end) { Start = start; End = end; - _rand = new Random(); + _rand = Random.Shared; } /// diff --git a/src/Artemis.Core/Models/Profile/LayerProperties/IntRange.cs b/src/Artemis.Core/Models/Profile/LayerProperties/IntRange.cs index 3b0c2b5a9..a338290db 100644 --- a/src/Artemis.Core/Models/Profile/LayerProperties/IntRange.cs +++ b/src/Artemis.Core/Models/Profile/LayerProperties/IntRange.cs @@ -1,4 +1,5 @@ using System; +using System.Text.Json.Serialization; namespace Artemis.Core; @@ -14,12 +15,13 @@ public readonly struct IntRange /// /// The start value of the range /// The end value of the range + [JsonConstructor] public IntRange(int start, int end) { Start = start; End = end; - _rand = new Random(); + _rand = Random.Shared; } /// diff --git a/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs b/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs index a7ba504ee..1f1c9c500 100644 --- a/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs +++ b/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs @@ -162,7 +162,7 @@ public partial class ProfileConfigurationEditViewModel : DialogViewModelBase m.Icon == enumValue) - : icons.ElementAt(new Random().Next(0, icons.Count - 1)); + : icons.ElementAt(Random.Shared.Next(0, icons.Count - 1)); } private async Task SaveIcon()