From eec2419005d0e5215afab11ec0823d17861db465 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 30 Jul 2022 21:55:28 +0200 Subject: [PATCH] Profiles - Fix brush properties being carried over from previous brush --- src/Artemis.Core/Models/Profile/Layer.cs | 3 +-- .../Profile/LayerProperties/LayerProperty.cs | 15 +++++++++++++-- .../LayerBrushes/Internal/PropertiesLayerBrush.cs | 4 ++-- .../Plugins/LayerBrushes/LayerBrush.cs | 2 +- .../Plugins/LayerBrushes/PerLedLayerBrush.cs | 2 +- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/Artemis.Core/Models/Profile/Layer.cs b/src/Artemis.Core/Models/Profile/Layer.cs index 3fcc54155..6966ff44c 100644 --- a/src/Artemis.Core/Models/Profile/Layer.cs +++ b/src/Artemis.Core/Models/Profile/Layer.cs @@ -793,8 +793,7 @@ namespace Artemis.Core General.BrushReference.SetCurrentValue(layerBrush != null ? new LayerBrushReference(layerBrush.Descriptor) : null, null); LayerBrush = layerBrush; - LayerEntity.LayerBrush = new LayerBrushEntity(); - + oldLayerBrush?.InternalDisable(); if (LayerBrush != null) diff --git a/src/Artemis.Core/Models/Profile/LayerProperties/LayerProperty.cs b/src/Artemis.Core/Models/Profile/LayerProperties/LayerProperty.cs index 63ce526bd..b419263f5 100644 --- a/src/Artemis.Core/Models/Profile/LayerProperties/LayerProperty.cs +++ b/src/Artemis.Core/Models/Profile/LayerProperties/LayerProperty.cs @@ -235,9 +235,20 @@ namespace Artemis.Core if (_disposed) throw new ObjectDisposedException("LayerProperty"); - string json = CoreJson.SerializeObject(DefaultValue, true); + if (DefaultValue == null) + return; + KeyframesEnabled = false; - SetCurrentValue(CoreJson.DeserializeObject(json)!, null); + + // For value types there's no need to make a copy + if (DefaultValue.GetType().IsValueType) + SetCurrentValue(DefaultValue); + // Reference types make a deep clone (ab)using JSON + else + { + string json = CoreJson.SerializeObject(DefaultValue, true); + SetCurrentValue(CoreJson.DeserializeObject(json)!); + } } internal void ReapplyUpdate() diff --git a/src/Artemis.Core/Plugins/LayerBrushes/Internal/PropertiesLayerBrush.cs b/src/Artemis.Core/Plugins/LayerBrushes/Internal/PropertiesLayerBrush.cs index 258b16220..52b6c3ab4 100644 --- a/src/Artemis.Core/Plugins/LayerBrushes/Internal/PropertiesLayerBrush.cs +++ b/src/Artemis.Core/Plugins/LayerBrushes/Internal/PropertiesLayerBrush.cs @@ -33,11 +33,11 @@ namespace Artemis.Core.LayerBrushes internal set => _properties = value; } - internal void InitializeProperties(PropertyGroupEntity? propertyGroupEntity) + internal void InitializeProperties() { Properties = new T(); PropertyGroupDescriptionAttribute groupDescription = new() {Identifier = "Brush", Name = Descriptor.DisplayName, Description = Descriptor.Description}; - Properties.Initialize(Layer, null, groupDescription, propertyGroupEntity); + Properties.Initialize(Layer, null, groupDescription, LayerBrushEntity.PropertyGroup); PropertiesInitialized = true; } } diff --git a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs index 9cfc502b3..4db8f176e 100644 --- a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs +++ b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs @@ -33,7 +33,7 @@ namespace Artemis.Core.LayerBrushes internal override void Initialize() { - TryOrBreak(() => InitializeProperties(Layer.LayerEntity.LayerBrush?.PropertyGroup), "Failed to initialize"); + TryOrBreak(InitializeProperties, "Failed to initialize"); } } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs b/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs index 5133d119b..cc8805173 100644 --- a/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs +++ b/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs @@ -76,7 +76,7 @@ namespace Artemis.Core.LayerBrushes internal override void Initialize() { - TryOrBreak(() => InitializeProperties(Layer.LayerEntity.LayerBrush?.PropertyGroup), "Failed to initialize"); + TryOrBreak(InitializeProperties, "Failed to initialize"); } } } \ No newline at end of file