mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 03:48:56 +00:00
Profiles - Finished dispose implementation
Profiles - Added transition between active profiles Core - Added startup animation
This commit is contained in:
1 parent
c0bdd8cf26
commit
d955bc8635
43 files changed
+1908
-361
No files matched your search
@@ -2,7 +2,9 @@
|
||||
using System.ComponentModel;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Plugins.LayerBrush.Abstract;
|
||||
using Artemis.Plugins.LayerBrushes.Color.PropertyGroups;
|
||||
using SkiaSharp;
|
||||
using static Artemis.Plugins.LayerBrushes.Color.PropertyGroups.ColorBrushProperties;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Color
|
||||
{
|
||||
@@ -18,7 +20,7 @@ namespace Artemis.Plugins.LayerBrushes.Color
|
||||
{
|
||||
Layer.RenderPropertiesUpdated += HandleShaderChange;
|
||||
Properties.LayerPropertyBaseValueChanged += HandleShaderChange;
|
||||
Properties.Gradient.BaseValue.PropertyChanged += BaseValueOnPropertyChanged;
|
||||
Properties.Colors.BaseValue.PropertyChanged += BaseValueOnPropertyChanged;
|
||||
}
|
||||
|
||||
public override void DisableLayerBrush()
|
||||
@@ -26,9 +28,9 @@ namespace Artemis.Plugins.LayerBrushes.Color
|
||||
Layer.RenderPropertiesUpdated -= HandleShaderChange;
|
||||
Properties.GradientType.BaseValueChanged -= HandleShaderChange;
|
||||
Properties.Color.BaseValueChanged -= HandleShaderChange;
|
||||
Properties.GradientTileMode.BaseValueChanged -= HandleShaderChange;
|
||||
Properties.GradientRepeat.BaseValueChanged -= HandleShaderChange;
|
||||
Properties.Gradient.BaseValue.PropertyChanged -= BaseValueOnPropertyChanged;
|
||||
Properties.TileMode.BaseValueChanged -= HandleShaderChange;
|
||||
Properties.ColorsMultiplier.BaseValueChanged -= HandleShaderChange;
|
||||
Properties.Colors.BaseValue.PropertyChanged -= BaseValueOnPropertyChanged;
|
||||
|
||||
_paint?.Dispose();
|
||||
_shader?.Dispose();
|
||||
@@ -39,10 +41,10 @@ namespace Artemis.Plugins.LayerBrushes.Color
|
||||
public override void Update(double deltaTime)
|
||||
{
|
||||
// While rendering a solid, if the color was changed since the last frame, recreate the shader
|
||||
if (Properties.GradientType.BaseValue == GradientType.Solid && _color != Properties.Color.CurrentValue)
|
||||
if (Properties.GradientType.BaseValue == ColorType.Solid && _color != Properties.Color.CurrentValue)
|
||||
CreateSolid();
|
||||
// While rendering a linear gradient, if the rotation was changed since the last frame, recreate the shader
|
||||
else if (Properties.GradientType.BaseValue == GradientType.LinearGradient && Math.Abs(_linearGradientRotation - Properties.LinearGradientRotation.CurrentValue) > 0.01)
|
||||
else if (Properties.GradientType.BaseValue == ColorType.LinearGradient && Math.Abs(_linearGradientRotation - Properties.LinearGradientRotation.CurrentValue) > 0.01)
|
||||
CreateLinearGradient();
|
||||
}
|
||||
|
||||
@@ -84,16 +86,16 @@ namespace Artemis.Plugins.LayerBrushes.Color
|
||||
{
|
||||
switch (Properties.GradientType.CurrentValue)
|
||||
{
|
||||
case GradientType.Solid:
|
||||
case ColorType.Solid:
|
||||
CreateSolid();
|
||||
break;
|
||||
case GradientType.LinearGradient:
|
||||
case ColorType.LinearGradient:
|
||||
CreateLinearGradient();
|
||||
break;
|
||||
case GradientType.RadialGradient:
|
||||
case ColorType.RadialGradient:
|
||||
CreateRadialGradient();
|
||||
break;
|
||||
case GradientType.SweepGradient:
|
||||
case ColorType.SweepGradient:
|
||||
CreateSweepGradient();
|
||||
break;
|
||||
default:
|
||||
@@ -120,16 +122,16 @@ namespace Artemis.Plugins.LayerBrushes.Color
|
||||
|
||||
private void CreateLinearGradient()
|
||||
{
|
||||
var repeat = Properties.GradientRepeat.CurrentValue;
|
||||
var repeat = Properties.ColorsMultiplier.CurrentValue;
|
||||
_linearGradientRotation = Properties.LinearGradientRotation.CurrentValue;
|
||||
|
||||
_shader?.Dispose();
|
||||
_shader = SKShader.CreateLinearGradient(
|
||||
new SKPoint(_shaderBounds.Left, _shaderBounds.Top),
|
||||
new SKPoint(_shaderBounds.Right, _shaderBounds.Top),
|
||||
Properties.Gradient.BaseValue.GetColorsArray(repeat),
|
||||
Properties.Gradient.BaseValue.GetPositionsArray(repeat),
|
||||
Properties.GradientTileMode.CurrentValue,
|
||||
Properties.Colors.BaseValue.GetColorsArray(repeat),
|
||||
Properties.Colors.BaseValue.GetPositionsArray(repeat),
|
||||
Properties.TileMode.CurrentValue,
|
||||
SKMatrix.MakeRotationDegrees(_linearGradientRotation, _shaderBounds.Left, _shaderBounds.MidY)
|
||||
);
|
||||
UpdatePaint();
|
||||
@@ -137,29 +139,29 @@ namespace Artemis.Plugins.LayerBrushes.Color
|
||||
|
||||
private void CreateRadialGradient()
|
||||
{
|
||||
var repeat = Properties.GradientRepeat.CurrentValue;
|
||||
var repeat = Properties.ColorsMultiplier.CurrentValue;
|
||||
|
||||
_shader?.Dispose();
|
||||
_shader = SKShader.CreateRadialGradient(
|
||||
new SKPoint(_shaderBounds.MidX, _shaderBounds.MidY),
|
||||
Math.Max(_shaderBounds.Width, _shaderBounds.Height) / 2f,
|
||||
Properties.Gradient.BaseValue.GetColorsArray(repeat),
|
||||
Properties.Gradient.BaseValue.GetPositionsArray(repeat),
|
||||
Properties.GradientTileMode.CurrentValue
|
||||
Properties.Colors.BaseValue.GetColorsArray(repeat),
|
||||
Properties.Colors.BaseValue.GetPositionsArray(repeat),
|
||||
Properties.TileMode.CurrentValue
|
||||
);
|
||||
UpdatePaint();
|
||||
}
|
||||
|
||||
private void CreateSweepGradient()
|
||||
{
|
||||
var repeat = Properties.GradientRepeat.CurrentValue;
|
||||
var repeat = Properties.ColorsMultiplier.CurrentValue;
|
||||
|
||||
_shader?.Dispose();
|
||||
_shader = SKShader.CreateSweepGradient(
|
||||
new SKPoint(_shaderBounds.MidX, _shaderBounds.MidY),
|
||||
Properties.Gradient.BaseValue.GetColorsArray(repeat),
|
||||
Properties.Gradient.BaseValue.GetPositionsArray(repeat),
|
||||
Properties.GradientTileMode.CurrentValue,
|
||||
Properties.Colors.BaseValue.GetColorsArray(repeat),
|
||||
Properties.Colors.BaseValue.GetPositionsArray(repeat),
|
||||
Properties.TileMode.CurrentValue,
|
||||
0,
|
||||
360
|
||||
);
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
using System.ComponentModel;
|
||||
using Artemis.Core.Events;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Models.Profile.Colors;
|
||||
using Artemis.Core.Models.Profile.LayerProperties.Attributes;
|
||||
using Artemis.Core.Models.Profile.LayerProperties.Types;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Color
|
||||
{
|
||||
public class ColorBrushProperties : LayerPropertyGroup
|
||||
{
|
||||
[PropertyDescription(Description = "The type of color brush to draw")]
|
||||
public EnumLayerProperty<GradientType> GradientType { get; set; }
|
||||
|
||||
[PropertyDescription(Description = "How to handle the layer having to stretch beyond it's regular size")]
|
||||
public EnumLayerProperty<SKShaderTileMode> GradientTileMode { get; set; }
|
||||
|
||||
[PropertyDescription(Description = "The color of the brush")]
|
||||
public SKColorLayerProperty Color { get; set; }
|
||||
|
||||
[PropertyDescription(Description = "The gradient of the brush")]
|
||||
public ColorGradientLayerProperty Gradient { get; set; }
|
||||
|
||||
[PropertyDescription(DisableKeyframes = true, Description = "How many times to repeat the colors in the selected gradient", MinInputValue = 0, MaxInputValue = 10)]
|
||||
public IntLayerProperty GradientRepeat { get; set; }
|
||||
|
||||
#region Linear greadient properties
|
||||
|
||||
[PropertyDescription(Name = "Rotation", Description = "Change the rotation of the linear gradient without affecting the rotation of the shape", InputAffix = "°")]
|
||||
public FloatLayerProperty LinearGradientRotation { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
protected override void PopulateDefaults()
|
||||
{
|
||||
GradientType.DefaultValue = LayerBrushes.Color.GradientType.Solid;
|
||||
Color.DefaultValue = new SKColor(255, 0, 0);
|
||||
Gradient.DefaultValue = ColorGradient.GetUnicornBarf();
|
||||
GradientRepeat.DefaultValue = 0;
|
||||
}
|
||||
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
GradientType.BaseValueChanged += OnBaseValueChanged;
|
||||
if (ProfileElement is Layer layer)
|
||||
layer.General.ResizeMode.BaseValueChanged += OnBaseValueChanged;
|
||||
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
GradientType.BaseValueChanged -= OnBaseValueChanged;
|
||||
if (ProfileElement is Layer layer)
|
||||
layer.General.ResizeMode.BaseValueChanged -= OnBaseValueChanged;
|
||||
}
|
||||
|
||||
private void OnBaseValueChanged(object sender, LayerPropertyEventArgs e)
|
||||
{
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
private void UpdateVisibility()
|
||||
{
|
||||
var normalRender = false;
|
||||
if (ProfileElement is Layer layer)
|
||||
normalRender = layer.General.ResizeMode.CurrentValue == LayerResizeMode.Normal;
|
||||
|
||||
Color.IsHidden = GradientType.BaseValue != LayerBrushes.Color.GradientType.Solid;
|
||||
Gradient.IsHidden = GradientType.BaseValue == LayerBrushes.Color.GradientType.Solid;
|
||||
GradientRepeat.IsHidden = GradientType.BaseValue == LayerBrushes.Color.GradientType.Solid;
|
||||
|
||||
RadialGradientCenterOffset.IsHidden = GradientType.BaseValue != LayerBrushes.Color.GradientType.RadialGradient;
|
||||
RadialGradientResizeMode.IsHidden = GradientType.BaseValue != LayerBrushes.Color.GradientType.RadialGradient;
|
||||
|
||||
GradientTileMode.IsHidden = normalRender;
|
||||
RadialGradientResizeMode.IsHidden = !normalRender || GradientType.BaseValue != LayerBrushes.Color.GradientType.RadialGradient;
|
||||
}
|
||||
|
||||
#region Radial gradient properties
|
||||
|
||||
[PropertyDescription(Name = "Center offset", Description = "Change the position of the gradient by offsetting it from the center of the layer", InputAffix = "%")]
|
||||
public SKPointLayerProperty RadialGradientCenterOffset { get; set; }
|
||||
|
||||
[PropertyDescription(Name = "Resize mode", Description = "How to make the gradient adjust to scale changes")]
|
||||
public EnumLayerProperty<RadialGradientResizeMode> RadialGradientResizeMode { get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public enum GradientType
|
||||
{
|
||||
[Description("Solid")]
|
||||
Solid,
|
||||
|
||||
[Description("Linear Gradient")]
|
||||
LinearGradient,
|
||||
|
||||
[Description("Radial Gradient")]
|
||||
RadialGradient,
|
||||
|
||||
[Description("Sweep Gradient")]
|
||||
SweepGradient
|
||||
}
|
||||
|
||||
public enum RadialGradientResizeMode
|
||||
{
|
||||
[Description("Stretch or shrink")]
|
||||
Stretch,
|
||||
|
||||
[Description("Maintain a circle")]
|
||||
MaintainCircle
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using System.ComponentModel;
|
||||
using Artemis.Core.Events;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Models.Profile.Colors;
|
||||
using Artemis.Core.Models.Profile.LayerProperties.Attributes;
|
||||
using Artemis.Core.Models.Profile.LayerProperties.Types;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Color.PropertyGroups
|
||||
{
|
||||
public class ColorBrushProperties : LayerPropertyGroup
|
||||
{
|
||||
[PropertyDescription(Name = "Type", Description = "The type of color brush to draw")]
|
||||
public EnumLayerProperty<ColorType> GradientType { get; set; }
|
||||
|
||||
[PropertyDescription(Description = "How to handle the layer having to stretch beyond it's regular size")]
|
||||
public EnumLayerProperty<SKShaderTileMode> TileMode { get; set; }
|
||||
|
||||
[PropertyDescription(Description = "The color of the brush")]
|
||||
public SKColorLayerProperty Color { get; set; }
|
||||
|
||||
[PropertyDescription(Description = "The gradient of the brush")]
|
||||
public ColorGradientLayerProperty Colors { get; set; }
|
||||
|
||||
[PropertyDescription(Name = "Colors multiplier", Description = "How many times to repeat the colors in the selected gradient", DisableKeyframes = true, MinInputValue = 0, MaxInputValue = 10)]
|
||||
public IntLayerProperty ColorsMultiplier { get; set; }
|
||||
|
||||
[PropertyDescription(Description = "Change the rotation of the linear gradient without affecting the rotation of the shape", InputAffix = "°")]
|
||||
public FloatLayerProperty LinearGradientRotation { get; set; }
|
||||
|
||||
[PropertyGroupDescription(Description = "Advanced radial gradient controls")]
|
||||
public RadialGradientProperties RadialGradient { get; set; }
|
||||
|
||||
protected override void PopulateDefaults()
|
||||
{
|
||||
GradientType.DefaultValue = ColorType.Solid;
|
||||
Color.DefaultValue = new SKColor(255, 0, 0);
|
||||
Colors.DefaultValue = ColorGradient.GetUnicornBarf();
|
||||
ColorsMultiplier.DefaultValue = 0;
|
||||
}
|
||||
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
GradientType.BaseValueChanged += OnBaseValueChanged;
|
||||
if (ProfileElement is Layer layer)
|
||||
layer.General.ResizeMode.BaseValueChanged += OnBaseValueChanged;
|
||||
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
GradientType.BaseValueChanged -= OnBaseValueChanged;
|
||||
if (ProfileElement is Layer layer)
|
||||
layer.General.ResizeMode.BaseValueChanged -= OnBaseValueChanged;
|
||||
}
|
||||
|
||||
private void OnBaseValueChanged(object sender, LayerPropertyEventArgs e)
|
||||
{
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
private void UpdateVisibility()
|
||||
{
|
||||
var normalRender = false;
|
||||
if (ProfileElement is Layer layer)
|
||||
normalRender = layer.General.ResizeMode.CurrentValue == LayerResizeMode.Normal;
|
||||
|
||||
// Solid settings
|
||||
Color.IsHidden = GradientType.BaseValue != ColorType.Solid;
|
||||
|
||||
// Gradients settings
|
||||
Colors.IsHidden = GradientType.BaseValue == ColorType.Solid;
|
||||
ColorsMultiplier.IsHidden = GradientType.BaseValue == ColorType.Solid;
|
||||
|
||||
// Linear-gradient settings
|
||||
LinearGradientRotation.IsHidden = GradientType.BaseValue != ColorType.LinearGradient;
|
||||
RadialGradient.IsHidden = GradientType.BaseValue != ColorType.RadialGradient;
|
||||
|
||||
// Normal render settings
|
||||
TileMode.IsHidden = normalRender;
|
||||
}
|
||||
|
||||
public enum ColorType
|
||||
{
|
||||
[Description("Solid")]
|
||||
Solid,
|
||||
|
||||
[Description("Linear Gradient")]
|
||||
LinearGradient,
|
||||
|
||||
[Description("Radial Gradient")]
|
||||
RadialGradient,
|
||||
|
||||
[Description("Sweep Gradient")]
|
||||
SweepGradient
|
||||
}
|
||||
}
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
using System.ComponentModel;
|
||||
using Artemis.Core.Events;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Models.Profile.LayerProperties.Attributes;
|
||||
using Artemis.Core.Models.Profile.LayerProperties.Types;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Color.PropertyGroups
|
||||
{
|
||||
public class RadialGradientProperties : LayerPropertyGroup
|
||||
{
|
||||
[PropertyDescription(Name = "Center offset", Description = "Change the position of the gradient by offsetting it from the center of the layer", InputAffix = "%")]
|
||||
public SKPointLayerProperty CenterOffset { get; set; }
|
||||
|
||||
[PropertyDescription(Name = "Resize mode", Description = "How to make the gradient adjust to scale changes")]
|
||||
public EnumLayerProperty<RadialGradientResizeMode> ResizeMode { get; set; }
|
||||
|
||||
protected override void PopulateDefaults()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
if (ProfileElement is Layer layer)
|
||||
layer.General.ResizeMode.BaseValueChanged += OnBaseValueChanged;
|
||||
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
if (ProfileElement is Layer layer)
|
||||
layer.General.ResizeMode.BaseValueChanged -= OnBaseValueChanged;
|
||||
}
|
||||
|
||||
private void OnBaseValueChanged(object sender, LayerPropertyEventArgs e)
|
||||
{
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
private void UpdateVisibility()
|
||||
{
|
||||
var normalRender = false;
|
||||
if (ProfileElement is Layer layer)
|
||||
normalRender = layer.General.ResizeMode.CurrentValue == LayerResizeMode.Normal;
|
||||
|
||||
ResizeMode.IsHidden = !normalRender;
|
||||
}
|
||||
|
||||
public enum RadialGradientResizeMode
|
||||
{
|
||||
[Description("Stretch or shrink")]
|
||||
Stretch,
|
||||
|
||||
[Description("Maintain a circle")]
|
||||
MaintainCircle
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,5 +23,9 @@ namespace Artemis.Plugins.LayerBrushes.ColorRgbNet
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,10 @@ namespace Artemis.Plugins.LayerBrushes.Noise
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
|
||||
private void UpdateVisibility()
|
||||
{
|
||||
GradientColor.IsHidden = ColorType.BaseValue != ColorMappingType.Gradient;
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Artemis.Plugins.LayerEffects.Filter
|
||||
{
|
||||
}
|
||||
|
||||
private void UpdateVisibility()
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,5 +25,9 @@ namespace Artemis.Plugins.LayerEffects.Filter
|
||||
{
|
||||
ColorMatrix.IsHidden = true;
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,5 +16,9 @@ namespace Artemis.Plugins.LayerEffects.Filter
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,5 +16,9 @@ namespace Artemis.Plugins.LayerEffects.Filter
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,5 +25,9 @@ namespace Artemis.Plugins.LayerEffects.Filter
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,5 +16,9 @@ namespace Artemis.Plugins.LayerEffects.Filter
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,5 +43,9 @@ namespace Artemis.Plugins.LayerEffects.Filter
|
||||
protected override void EnableProperties()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DisableProperties()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user