mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
Layer brushes - Added sample RGB.NET-based color brush Layer properties - Save on gradient edit dialog close Layer properties - Fix layer brush keyframes not working after changing layer brush
79 lines
2.8 KiB
C#
79 lines
2.8 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Artemis.Core.Models.Profile;
|
|
using Artemis.Core.Plugins.LayerBrush;
|
|
using Artemis.Core.Services.Interfaces;
|
|
using Ninject;
|
|
using Ninject.Parameters;
|
|
using Serilog;
|
|
|
|
namespace Artemis.Core.Services
|
|
{
|
|
public class LayerService : ILayerService
|
|
{
|
|
private readonly IKernel _kernel;
|
|
private readonly ILogger _logger;
|
|
private readonly IPluginService _pluginService;
|
|
|
|
public LayerService(IKernel kernel, ILogger logger, IPluginService pluginService)
|
|
{
|
|
_kernel = kernel;
|
|
_logger = logger;
|
|
_pluginService = pluginService;
|
|
}
|
|
|
|
public Layer CreateLayer(Profile profile, ProfileElement parent, string name)
|
|
{
|
|
var layer = new Layer(profile, parent, name);
|
|
|
|
// Layers have two hardcoded property groups, instantiate them
|
|
layer.General.InitializeProperties(this, layer, "General.");
|
|
layer.Transform.InitializeProperties(this, layer, "Transform.");
|
|
|
|
// With the properties loaded, the layer brush can be instantiated
|
|
InstantiateLayerBrush(layer);
|
|
|
|
return layer;
|
|
}
|
|
|
|
public BaseLayerBrush InstantiateLayerBrush(Layer layer)
|
|
{
|
|
RemoveLayerBrush(layer);
|
|
|
|
var descriptorReference = layer.General.BrushReference?.CurrentValue;
|
|
if (descriptorReference == null)
|
|
return null;
|
|
|
|
// Get a matching descriptor
|
|
var layerBrushProviders = _pluginService.GetPluginsOfType<LayerBrushProvider>();
|
|
var descriptors = layerBrushProviders.SelectMany(l => l.LayerBrushDescriptors).ToList();
|
|
var descriptor = descriptors.FirstOrDefault(d => d.LayerBrushProvider.PluginInfo.Guid == descriptorReference.BrushPluginGuid &&
|
|
d.LayerBrushType.Name == descriptorReference.BrushType);
|
|
|
|
if (descriptor == null)
|
|
return null;
|
|
|
|
var arguments = new IParameter[]
|
|
{
|
|
new ConstructorArgument("layer", layer),
|
|
new ConstructorArgument("descriptor", descriptor)
|
|
};
|
|
layer.LayerBrush = (BaseLayerBrush) _kernel.Get(descriptor.LayerBrushType, arguments);
|
|
layer.LayerBrush.Initialize(this);
|
|
layer.OnLayerBrushUpdated();
|
|
return layer.LayerBrush;
|
|
}
|
|
|
|
public void RemoveLayerBrush(Layer layer)
|
|
{
|
|
if (layer.LayerBrush == null)
|
|
return;
|
|
|
|
var brush = layer.LayerBrush;
|
|
layer.LayerBrush = null;
|
|
brush.Dispose();
|
|
|
|
layer.LayerEntity.PropertyEntities.RemoveAll(p => p.PluginGuid == brush.PluginInfo.Guid);
|
|
}
|
|
}
|
|
} |