mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Profile editor - Started implementing property add/remove handling
This commit is contained in:
parent
c3b296726e
commit
4f66d09755
@ -139,6 +139,7 @@
|
||||
<Compile Include="Events\DeviceEventArgs.cs" />
|
||||
<Compile Include="Events\FrameRenderedEventArgs.cs" />
|
||||
<Compile Include="Events\FrameRenderingEventArgs.cs" />
|
||||
<Compile Include="Events\LayerPropertyEventArgs.cs" />
|
||||
<Compile Include="Exceptions\ArtemisCoreException.cs" />
|
||||
<Compile Include="Extensions\DirectoryInfoExtensions.cs" />
|
||||
<Compile Include="Extensions\DoubleExtensions.cs" />
|
||||
|
||||
15
src/Artemis.Core/Events/LayerPropertyEventArgs.cs
Normal file
15
src/Artemis.Core/Events/LayerPropertyEventArgs.cs
Normal file
@ -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; }
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -476,7 +477,7 @@ namespace Artemis.Core.Models.Profile
|
||||
property.Parent?.Children.Remove(property);
|
||||
_properties.Remove((layerProperty.PluginInfo.Guid, layerProperty.Id));
|
||||
|
||||
OnLayerPropertyRemoved();
|
||||
OnLayerPropertyRemoved(new LayerPropertyEventArgs(property));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -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<LayerPropertyEventArgs> LayerPropertyRegistered;
|
||||
public event EventHandler<LayerPropertyEventArgs> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -35,7 +35,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties
|
||||
public BaseLayerProperty LayerProperty { get; }
|
||||
|
||||
public LayerPropertyViewModel Parent { get; }
|
||||
public List<LayerPropertyViewModel> Children { get; set; }
|
||||
public List<LayerPropertyViewModel> 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<LayerPropertyViewModel> GetAllChildren()
|
||||
{
|
||||
var children = new List<LayerPropertyViewModel>();
|
||||
children.AddRange(Children);
|
||||
foreach (var layerPropertyViewModel in children)
|
||||
children.AddRange(layerPropertyViewModel.GetAllChildren());
|
||||
|
||||
return children;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates the tree item's input if it is visible and has keyframes enabled
|
||||
/// </summary>
|
||||
|
||||
@ -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<PropertyTreeItemViewModel>();
|
||||
|
||||
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<PropertyTreeItemViewModel> Children { get; set; }
|
||||
|
||||
public override void Update(bool forceUpdate)
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates the tree item's input if it is visible and has keyframes enabled
|
||||
/// </summary>
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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<PropertyTrackKeyframeViewModel> KeyframeViewModels { get; set; }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user