Profiles - Finished dispose implementation

Profiles - Added transition between active profiles
Core - Added startup animation
This commit is contained in:
Robert committed 2020-08-10 19:16:21 +02:00
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
}
}
}
@@ -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()
{
}
}
}