diff --git a/src/Artemis.Core/Artemis.Core.csproj b/src/Artemis.Core/Artemis.Core.csproj
index 9a4159779..8ba0ca831 100644
--- a/src/Artemis.Core/Artemis.Core.csproj
+++ b/src/Artemis.Core/Artemis.Core.csproj
@@ -139,6 +139,7 @@
+
diff --git a/src/Artemis.Core/Events/LayerPropertyEventArgs.cs b/src/Artemis.Core/Events/LayerPropertyEventArgs.cs
new file mode 100644
index 000000000..9f16dc690
--- /dev/null
+++ b/src/Artemis.Core/Events/LayerPropertyEventArgs.cs
@@ -0,0 +1,15 @@
+using System;
+using Artemis.Core.Models.Profile.LayerProperties;
+
+namespace Artemis.Core.Events
+{
+ public class LayerPropertyEventArgs : EventArgs
+ {
+ public LayerPropertyEventArgs(BaseLayerProperty layerProperty)
+ {
+ LayerProperty = layerProperty;
+ }
+
+ public BaseLayerProperty LayerProperty { get; }
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.Core/Models/Profile/Layer.cs b/src/Artemis.Core/Models/Profile/Layer.cs
index 81b2d5b8b..9306fe3ec 100644
--- a/src/Artemis.Core/Models/Profile/Layer.cs
+++ b/src/Artemis.Core/Models/Profile/Layer.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
+using Artemis.Core.Events;
using Artemis.Core.Exceptions;
using Artemis.Core.Extensions;
using Artemis.Core.Models.Profile.LayerProperties;
@@ -449,7 +450,7 @@ namespace Artemis.Core.Models.Profile
layerProperty.ApplyToProperty(propertyEntity);
_properties.Add((layerProperty.PluginInfo.Guid, layerProperty.Id), layerProperty);
- OnLayerPropertyRegistered();
+ OnLayerPropertyRegistered(new LayerPropertyEventArgs(layerProperty));
return propertyEntity != null;
}
@@ -471,12 +472,12 @@ namespace Artemis.Core.Models.Profile
{
if (!_properties.ContainsKey((layerProperty.PluginInfo.Guid, layerProperty.Id)))
throw new ArtemisCoreException($"Could not find a property with ID {layerProperty.Id}.");
-
+
var property = _properties[(layerProperty.PluginInfo.Guid, layerProperty.Id)];
property.Parent?.Children.Remove(property);
_properties.Remove((layerProperty.PluginInfo.Guid, layerProperty.Id));
- OnLayerPropertyRemoved();
+ OnLayerPropertyRemoved(new LayerPropertyEventArgs(property));
}
///
@@ -541,8 +542,8 @@ namespace Artemis.Core.Models.Profile
public event EventHandler RenderPropertiesUpdated;
public event EventHandler ShapePropertiesUpdated;
- public event EventHandler LayerPropertyRegistered;
- public event EventHandler LayerPropertyRemoved;
+ public event EventHandler LayerPropertyRegistered;
+ public event EventHandler LayerPropertyRemoved;
private void OnRenderPropertiesUpdated()
{
@@ -561,14 +562,14 @@ namespace Artemis.Core.Models.Profile
return $"[Layer] {nameof(Name)}: {Name}, {nameof(Order)}: {Order}";
}
- private void OnLayerPropertyRegistered()
+ private void OnLayerPropertyRegistered(LayerPropertyEventArgs e)
{
- LayerPropertyRegistered?.Invoke(this, EventArgs.Empty);
+ LayerPropertyRegistered?.Invoke(this, e);
}
- private void OnLayerPropertyRemoved()
+ private void OnLayerPropertyRemoved(LayerPropertyEventArgs e)
{
- LayerPropertyRemoved?.Invoke(this, EventArgs.Empty);
+ LayerPropertyRemoved?.Invoke(this, e);
}
}
diff --git a/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs b/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs
index d66caa98e..87503927a 100644
--- a/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs
+++ b/src/Artemis.Plugins.LayerBrushes.Noise/NoiseBrush.cs
@@ -9,7 +9,6 @@ namespace Artemis.Plugins.LayerBrushes.Noise
{
public class NoiseBrush : LayerBrush
{
- private const int Scale = 6;
private static readonly Random Rand = new Random();
private readonly OpenSimplexNoise _noise;
private float _z;
@@ -42,12 +41,13 @@ namespace Artemis.Plugins.LayerBrushes.Noise
public override void Render(SKCanvas canvas, SKPath path, SKPaint paint)
{
+ return;
var mainColor = MainColorProperty.CurrentValue;
var scale = ScaleProperty.CurrentValue;
// Scale down the render path to avoid computing a value for every pixel
- var width = (int) (Math.Max(path.Bounds.Width, path.Bounds.Height) / Scale);
- var height = (int) (Math.Max(path.Bounds.Width, path.Bounds.Height) / Scale);
+ var width = (int) (Math.Max(path.Bounds.Width, path.Bounds.Height) / scale.Width);
+ var height = (int) (Math.Max(path.Bounds.Width, path.Bounds.Height) / scale.Height);
var opacity = (float) Math.Round(mainColor.Alpha / 255.0, 2, MidpointRounding.AwayFromZero);
using (var bitmap = new SKBitmap(new SKImageInfo(width, height)))
{
@@ -55,10 +55,10 @@ namespace Artemis.Plugins.LayerBrushes.Noise
// Only compute pixels inside LEDs, due to scaling there may be some rounding issues but it's neglect-able
foreach (var artemisLed in Layer.Leds)
{
- var xStart = artemisLed.AbsoluteRenderRectangle.Left / Scale;
- var xEnd = artemisLed.AbsoluteRenderRectangle.Right / Scale;
- var yStart = artemisLed.AbsoluteRenderRectangle.Top / Scale;
- var yEnd = artemisLed.AbsoluteRenderRectangle.Bottom / Scale;
+ var xStart = artemisLed.AbsoluteRenderRectangle.Left / scale.Width;
+ var xEnd = artemisLed.AbsoluteRenderRectangle.Right / scale.Width;
+ var yStart = artemisLed.AbsoluteRenderRectangle.Top / scale.Height;
+ var yEnd = artemisLed.AbsoluteRenderRectangle.Bottom / scale.Height;
for (var x = xStart; x < xEnd; x++)
{
@@ -76,7 +76,7 @@ namespace Artemis.Plugins.LayerBrushes.Noise
}
}
- using (var sh = SKShader.CreateBitmap(bitmap, SKShaderTileMode.Mirror, SKShaderTileMode.Mirror, SKMatrix.MakeScale(Scale, Scale)))
+ using (var sh = SKShader.CreateBitmap(bitmap, SKShaderTileMode.Mirror, SKShaderTileMode.Mirror, SKMatrix.MakeScale(scale.Width, scale.Height)))
{
paint.Shader = sh;
canvas.DrawPath(Layer.LayerShape.Path, paint);
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs
index 2c06a0b91..eef1fbe50 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertyViewModel.cs
@@ -35,7 +35,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
public BaseLayerProperty LayerProperty { get; }
public LayerPropertyViewModel Parent { get; }
- public List Children { get; set; }
+ public List Children { get; }
public bool IsExpanded { get; set; }
@@ -78,5 +78,15 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
match.Initialize(this);
return match;
}
+
+ public IEnumerable GetAllChildren()
+ {
+ var children = new List();
+ children.AddRange(Children);
+ foreach (var layerPropertyViewModel in children)
+ children.AddRange(layerPropertyViewModel.GetAllChildren());
+
+ return children;
+ }
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeChildViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeChildViewModel.cs
index 61b373af3..b14b98ce5 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeChildViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeChildViewModel.cs
@@ -4,13 +4,11 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
{
public class PropertyTreeChildViewModel : PropertyTreeItemViewModel
{
- public PropertyTreeChildViewModel(LayerPropertyViewModel layerPropertyViewModel)
+ public PropertyTreeChildViewModel(LayerPropertyViewModel layerPropertyViewModel) : base(layerPropertyViewModel)
{
- LayerPropertyViewModel = layerPropertyViewModel;
PropertyInputViewModel = layerPropertyViewModel.GetPropertyInputViewModel();
}
- public LayerPropertyViewModel LayerPropertyViewModel { get; }
public PropertyInputViewModel PropertyInputViewModel { get; set; }
public override void Update(bool forceUpdate)
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs
index 0cafdd660..f82cc0018 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeItemViewModel.cs
@@ -4,6 +4,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
{
public abstract class PropertyTreeItemViewModel : PropertyChangedBase
{
+ public LayerPropertyViewModel LayerPropertyViewModel { get; }
+
+ protected PropertyTreeItemViewModel(LayerPropertyViewModel layerPropertyViewModel)
+ {
+ LayerPropertyViewModel = layerPropertyViewModel;
+ }
+
///
/// Updates the tree item's input if it is visible and has keyframes enabled
///
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs
index 91e357e9c..3c1e7df49 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeParentViewModel.cs
@@ -1,13 +1,13 @@
using System.Linq;
+using Artemis.Core.Events;
using Stylet;
namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
{
public class PropertyTreeParentViewModel : PropertyTreeItemViewModel
{
- public PropertyTreeParentViewModel(LayerPropertyViewModel layerPropertyViewModel)
+ public PropertyTreeParentViewModel(LayerPropertyViewModel layerPropertyViewModel) : base(layerPropertyViewModel)
{
- LayerPropertyViewModel = layerPropertyViewModel;
Children = new BindableCollection();
foreach (var childProperty in layerPropertyViewModel.Children)
@@ -17,9 +17,37 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
else
Children.Add(new PropertyTreeChildViewModel(childProperty));
}
+
+ LayerPropertyViewModel.LayerProperty.Layer.LayerPropertyRegistered += LayerOnLayerPropertyRegistered;
+ LayerPropertyViewModel.LayerProperty.Layer.LayerPropertyRemoved += LayerOnLayerPropertyRemoved;
+ }
+
+ private void LayerOnLayerPropertyRegistered(object sender, LayerPropertyEventArgs e)
+ {
+ if (e.LayerProperty.Parent == LayerPropertyViewModel.LayerProperty)
+ {
+ // Problem is we don't have a LayerPropertyViewModel here..
+ }
+ }
+
+ private void LayerOnLayerPropertyRemoved(object sender, LayerPropertyEventArgs e)
+ {
+ // Remove self
+ if (e.LayerProperty == LayerPropertyViewModel.LayerProperty)
+ {
+ LayerPropertyViewModel.LayerProperty.Layer.LayerPropertyRemoved -= LayerOnLayerPropertyRegistered;
+ LayerPropertyViewModel.LayerProperty.Layer.LayerPropertyRemoved -= LayerOnLayerPropertyRemoved;
+ }
+
+ // Remove child
+ if (e.LayerProperty.Parent == LayerPropertyViewModel.LayerProperty)
+ {
+ var child = Children.FirstOrDefault(c => c.LayerPropertyViewModel.LayerProperty == e.LayerProperty);
+ if (child != null)
+ Children.Remove(child);
+ }
}
- public LayerPropertyViewModel LayerPropertyViewModel { get; }
public BindableCollection Children { get; set; }
public override void Update(bool forceUpdate)
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeViewModel.cs
index 286556895..b0dc9f66f 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/PropertyTree/PropertyTreeViewModel.cs
@@ -3,6 +3,7 @@ using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using Artemis.Core.Models.Profile.LayerProperties;
using Artemis.UI.Services.Interfaces;
using Stylet;
@@ -43,6 +44,11 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
PropertyTreeItemViewModels.Clear();
}
+ public void AddLayerProperty(BaseLayerProperty layerProperty)
+ {
+
+ }
+
///
/// Updates the tree item's input if it is visible and has keyframes enabled
///
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs
index e532471fd..8ba70e788 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTimelineViewModel.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using Artemis.Core.Models.Profile.LayerProperties;
using Artemis.UI.Ninject.Factories;
using Artemis.UI.Services.Interfaces;
using Stylet;
@@ -60,6 +61,11 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
CreateViewModels(child);
}
+ public void AddLayerProperty(BaseLayerProperty layerProperty)
+ {
+ throw new NotImplementedException();
+ }
+
public void ClearProperties()
{
PropertyTrackViewModels.Clear();
diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs
index 164463723..3c7bc1480 100644
--- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs
+++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/PropertyTrackViewModel.cs
@@ -1,4 +1,5 @@
using System.Linq;
+using Artemis.Core.Events;
using Artemis.UI.Ninject.Factories;
using Stylet;
@@ -21,6 +22,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
UpdateKeyframes(PropertyTimelineViewModel.LayerPropertiesViewModel.PixelsPerSecond);
}
+
public PropertyTimelineViewModel PropertyTimelineViewModel { get; }
public LayerPropertyViewModel LayerPropertyViewModel { get; }
public BindableCollection KeyframeViewModels { get; set; }