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()