mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
Layers - Seperated activation and removal of layers/effects
Effects - Added effects UI, order is still a bit messed up and reordering is missed Effects - Added renaming of effects on the layer
This commit is contained in:
1 parent
692cf806b7
commit
18593853d8
39 files changed
+691
-334
No files matched your search
@@ -3,13 +3,14 @@ using Artemis.Core.Plugins.LayerBrush;
|
||||
using Artemis.Core.Plugins.LayerBrush.Abstract;
|
||||
using Artemis.Core.Plugins.LayerEffect;
|
||||
using Artemis.Core.Plugins.LayerEffect.Abstract;
|
||||
using Artemis.Storage.Entities.Profile;
|
||||
|
||||
namespace Artemis.Core.Services.Interfaces
|
||||
{
|
||||
public interface ILayerService : IArtemisService
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a new layer
|
||||
/// Creates a new layer
|
||||
/// </summary>
|
||||
/// <param name="profile"></param>
|
||||
/// <param name="parent"></param>
|
||||
@@ -28,11 +29,20 @@ namespace Artemis.Core.Services.Interfaces
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates and adds the <see cref="BaseLayerEffect" /> described by the provided
|
||||
/// <see cref="LayerEffectDescriptor" />
|
||||
/// to the <see cref="Layer" />.
|
||||
/// <see cref="LayerEffectDescriptor" /> to the <see cref="Layer" />.
|
||||
/// </summary>
|
||||
/// <param name="layer">The layer to instantiate the effect for</param>
|
||||
void InstantiateLayerEffects(Layer layer);
|
||||
|
||||
/// <summary>
|
||||
/// Adds the <see cref="BaseLayerEffect" /> described by the provided <see cref="LayerEffectDescriptor" /> to the
|
||||
/// <see cref="Layer" />.
|
||||
/// </summary>
|
||||
/// <param name="layer">The layer to instantiate the effect for</param>
|
||||
/// <param name="layerEffectDescriptor"></param>
|
||||
/// <returns></returns>
|
||||
BaseLayerEffect InstantiateLayerEffect(Layer layer);
|
||||
BaseLayerEffect AddLayerEffect(Layer layer, LayerEffectDescriptor layerEffectDescriptor);
|
||||
|
||||
void RemoveLayerEffect(BaseLayerEffect layerEffect);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,17 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Documents;
|
||||
using Artemis.Core.Exceptions;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Plugins.Abstract;
|
||||
using Artemis.Core.Plugins.LayerBrush;
|
||||
using Artemis.Core.Plugins.LayerBrush.Abstract;
|
||||
using Artemis.Core.Plugins.LayerEffect;
|
||||
using Artemis.Core.Plugins.LayerEffect.Abstract;
|
||||
using Artemis.Core.Services.Interfaces;
|
||||
using Artemis.Storage.Entities.Profile;
|
||||
using Ninject;
|
||||
using Ninject.Injection;
|
||||
using Ninject.Parameters;
|
||||
using Serilog;
|
||||
|
||||
@@ -37,14 +41,15 @@ namespace Artemis.Core.Services
|
||||
|
||||
// With the properties loaded, the layer brush and effect can be instantiated
|
||||
InstantiateLayerBrush(layer);
|
||||
InstantiateLayerEffect(layer);
|
||||
InstantiateLayerEffects(layer);
|
||||
|
||||
return layer;
|
||||
}
|
||||
|
||||
public BaseLayerBrush InstantiateLayerBrush(Layer layer)
|
||||
{
|
||||
layer.DeactivateLayerBrush();
|
||||
if (layer.LayerBrush != null)
|
||||
throw new ArtemisCoreException("Layer already has an instantiated layer brush");
|
||||
|
||||
var descriptorReference = layer.General.BrushReference?.CurrentValue;
|
||||
if (descriptorReference == null)
|
||||
@@ -58,46 +63,72 @@ namespace Artemis.Core.Services
|
||||
|
||||
if (descriptor == null)
|
||||
return null;
|
||||
|
||||
|
||||
var brush = (BaseLayerBrush) _kernel.Get(descriptor.LayerBrushType);
|
||||
brush.Layer = layer;
|
||||
brush.Descriptor = descriptor;
|
||||
layer.LayerBrush = brush;
|
||||
|
||||
brush.Initialize(this);
|
||||
brush.Update(0);
|
||||
|
||||
layer.LayerBrush = brush;
|
||||
layer.OnLayerBrushUpdated();
|
||||
|
||||
return brush;
|
||||
}
|
||||
|
||||
public BaseLayerEffect InstantiateLayerEffect(Layer layer)
|
||||
public void InstantiateLayerEffects(Layer layer)
|
||||
{
|
||||
layer.DeactivateLayerEffect();
|
||||
if (layer.LayerEffects.Any())
|
||||
throw new ArtemisCoreException("Layer already has instantiated layer effects");
|
||||
|
||||
var descriptorReference = layer.General.EffectReference?.CurrentValue;
|
||||
if (descriptorReference == null)
|
||||
return null;
|
||||
foreach (var layerEntityLayerEffect in layer.LayerEntity.LayerEffects.OrderByDescending(e => e.Order))
|
||||
{
|
||||
// Get a matching descriptor
|
||||
var layerEffectProviders = _pluginService.GetPluginsOfType<LayerEffectProvider>();
|
||||
var descriptors = layerEffectProviders.SelectMany(l => l.LayerEffectDescriptors).ToList();
|
||||
var descriptor = descriptors.FirstOrDefault(d => d.LayerEffectProvider.PluginInfo.Guid == layerEntityLayerEffect.PluginGuid &&
|
||||
d.LayerEffectType.Name == layerEntityLayerEffect.EffectType);
|
||||
|
||||
// Get a matching descriptor
|
||||
var layerEffectProviders = _pluginService.GetPluginsOfType<LayerEffectProvider>();
|
||||
var descriptors = layerEffectProviders.SelectMany(l => l.LayerEffectDescriptors).ToList();
|
||||
var descriptor = descriptors.FirstOrDefault(d => d.LayerEffectProvider.PluginInfo.Guid == descriptorReference.EffectPluginGuid &&
|
||||
d.LayerEffectType.Name == descriptorReference.EffectType);
|
||||
if (descriptor == null)
|
||||
continue;
|
||||
|
||||
if (descriptor == null)
|
||||
return null;
|
||||
var effect = (BaseLayerEffect) _kernel.Get(descriptor.LayerEffectType);
|
||||
effect.Layer = layer;
|
||||
effect.Order = layerEntityLayerEffect.Order;
|
||||
effect.Name = layerEntityLayerEffect.Name;
|
||||
effect.Descriptor = descriptor;
|
||||
effect.Initialize(this);
|
||||
effect.Update(0);
|
||||
|
||||
var effect = (BaseLayerEffect)_kernel.Get(descriptor.LayerEffectType);
|
||||
layer.AddLayerEffect(effect);
|
||||
_logger.Debug("Added layer effect with root path {rootPath}", effect.PropertyRootPath);
|
||||
}
|
||||
|
||||
layer.OnLayerEffectsUpdated();
|
||||
}
|
||||
|
||||
public BaseLayerEffect AddLayerEffect(Layer layer, LayerEffectDescriptor layerEffectDescriptor)
|
||||
{
|
||||
var effect = (BaseLayerEffect) _kernel.Get(layerEffectDescriptor.LayerEffectType);
|
||||
effect.Layer = layer;
|
||||
effect.Descriptor = descriptor;
|
||||
layer.LayerEffect = effect;
|
||||
effect.Order = layer.LayerEffects.Count + 1;
|
||||
effect.Descriptor = layerEffectDescriptor;
|
||||
|
||||
effect.Initialize(this);
|
||||
effect.Update(0);
|
||||
layer.OnLayerEffectUpdated();
|
||||
|
||||
layer.AddLayerEffect(effect);
|
||||
_logger.Debug("Added layer effect with root path {rootPath}", effect.PropertyRootPath);
|
||||
|
||||
layer.OnLayerEffectsUpdated();
|
||||
return effect;
|
||||
}
|
||||
|
||||
public void RemoveLayerEffect(BaseLayerEffect layerEffect)
|
||||
{
|
||||
// // Make sure the group is collapsed or the effect that gets this effect's order gets expanded
|
||||
// layerEffect.Layer.SetPropertyGroupExpanded(layerEffect.BaseProperties, false);
|
||||
layerEffect.Layer.RemoveLayerEffect(layerEffect);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -179,10 +179,8 @@ namespace Artemis.Core.Services.Storage
|
||||
// Only instantiate brushes for layers without an existing brush/effect instance
|
||||
foreach (var layer in profile.GetAllLayers())
|
||||
{
|
||||
if (layer.LayerBrush == null)
|
||||
_layerService.InstantiateLayerBrush(layer);
|
||||
if (layer.LayerEffect == null)
|
||||
_layerService.InstantiateLayerEffect(layer);
|
||||
_layerService.InstantiateLayerBrush(layer);
|
||||
_layerService.InstantiateLayerEffects(layer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user