diff --git a/NuGet/RGB.NET.Effects.nuspec b/NuGet/RGB.NET.Decorators.nuspec
similarity index 56%
rename from NuGet/RGB.NET.Effects.nuspec
rename to NuGet/RGB.NET.Decorators.nuspec
index 2bfb076..cde82c9 100644
--- a/NuGet/RGB.NET.Effects.nuspec
+++ b/NuGet/RGB.NET.Decorators.nuspec
@@ -1,17 +1,17 @@
- RGB.NET.Effects
- RGB.NET.Effects
+ RGB.NET.Decorators
+ RGB.NET.Decorators
1.0.0.0
Darth Affe
Darth Affe
https://github.com/DarthAffe/RGB.NET
https://raw.githubusercontent.com/DarthAffe/RGB.NET/master/LICENSE
true
- Effects-Presets of RGB.NET
+ Decorators-Presets of RGB.NET
- Effects-Presets of RGB.NET, a C# (.NET) library for accessing various RGB-peripherals
+ Decorators-Presets of RGB.NET, a C# (.NET) library for accessing various RGB-peripherals
Copyright © Wyrez 2017
en-US
@@ -21,9 +21,9 @@
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/RGB.NET.Brushes/Decorators/IGradientDecorator.cs b/RGB.NET.Brushes/Decorators/IGradientDecorator.cs
new file mode 100644
index 0000000..e504306
--- /dev/null
+++ b/RGB.NET.Brushes/Decorators/IGradientDecorator.cs
@@ -0,0 +1,11 @@
+using RGB.NET.Brushes.Gradients;
+using RGB.NET.Core;
+
+namespace RGB.NET.Brushes
+{
+ ///
+ /// Represents a basic decorator decorating a .
+ ///
+ public interface IGradientDecorator : IDecorator
+ { }
+}
diff --git a/RGB.NET.Brushes/Gradients/AbstractGradient.cs b/RGB.NET.Brushes/Gradients/AbstractGradient.cs
index dcd50ce..6cdb4e8 100644
--- a/RGB.NET.Brushes/Gradients/AbstractGradient.cs
+++ b/RGB.NET.Brushes/Gradients/AbstractGradient.cs
@@ -11,7 +11,7 @@ namespace RGB.NET.Brushes.Gradients
///
/// Represents a basic gradient.
///
- public abstract class AbstractGradient : IGradient
+ public abstract class AbstractGradient : AbstractDecoratable, IGradient
{
#region Properties & Fields
diff --git a/RGB.NET.Brushes/Gradients/IGradient.cs b/RGB.NET.Brushes/Gradients/IGradient.cs
index 2f30fb8..17f8e8d 100644
--- a/RGB.NET.Brushes/Gradients/IGradient.cs
+++ b/RGB.NET.Brushes/Gradients/IGradient.cs
@@ -5,7 +5,7 @@ namespace RGB.NET.Brushes.Gradients
///
/// Represents a basic gradient.
///
- public interface IGradient
+ public interface IGradient : IDecoratable
{
///
/// Gets the of the on the specified offset.
diff --git a/RGB.NET.Brushes/Gradients/RainbowGradient.cs b/RGB.NET.Brushes/Gradients/RainbowGradient.cs
index a254a62..8deabfd 100644
--- a/RGB.NET.Brushes/Gradients/RainbowGradient.cs
+++ b/RGB.NET.Brushes/Gradients/RainbowGradient.cs
@@ -9,7 +9,7 @@ namespace RGB.NET.Brushes.Gradients
/// Represents a rainbow gradient which circles through all colors of the HUE-color-space.
/// See as reference.
///
- public class RainbowGradient : IGradient
+ public class RainbowGradient : AbstractDecoratable, IGradient
{
#region Properties & Fields
diff --git a/RGB.NET.Brushes/RGB.NET.Brushes.csproj b/RGB.NET.Brushes/RGB.NET.Brushes.csproj
index 101b715..7b7b67e 100644
--- a/RGB.NET.Brushes/RGB.NET.Brushes.csproj
+++ b/RGB.NET.Brushes/RGB.NET.Brushes.csproj
@@ -53,6 +53,7 @@
+
diff --git a/RGB.NET.Brushes/RGB.NET.Brushes.csproj.DotSettings b/RGB.NET.Brushes/RGB.NET.Brushes.csproj.DotSettings
index f6b747e..c25ceff 100644
--- a/RGB.NET.Brushes/RGB.NET.Brushes.csproj.DotSettings
+++ b/RGB.NET.Brushes/RGB.NET.Brushes.csproj.DotSettings
@@ -1,2 +1,3 @@
- True
\ No newline at end of file
+ True
+ True
\ No newline at end of file
diff --git a/RGB.NET.Core/Brushes/AbstractBrush.cs b/RGB.NET.Core/Brushes/AbstractBrush.cs
index a2b71e1..25e02ec 100644
--- a/RGB.NET.Core/Brushes/AbstractBrush.cs
+++ b/RGB.NET.Core/Brushes/AbstractBrush.cs
@@ -2,6 +2,7 @@
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable VirtualMemberNeverOverridden.Global
+using System;
using System.Collections.Generic;
using System.Linq;
@@ -10,7 +11,7 @@ namespace RGB.NET.Core
///
/// Represents a basic brush.
///
- public abstract class AbstractBrush : AbstractEffectTarget, IBrush
+ public abstract class AbstractBrush : AbstractDecoratable, IBrush
{
#region Properties & Fields
@@ -35,9 +36,6 @@ namespace RGB.NET.Core
///
public Dictionary RenderedTargets { get; } = new Dictionary();
- ///
- protected override IBrush EffectTarget => this;
-
#endregion
#region Constructors
@@ -57,23 +55,34 @@ namespace RGB.NET.Core
#region Methods
- ///
- /// Performas the render pass of the brush and calculates the raw colors for all requested points.
- ///
- /// The rectangle in which the brush should be drawn.
- /// The targets (keys/points) of which the color should be calculated.
+ ///
public virtual void PerformRender(Rectangle rectangle, IEnumerable renderTargets)
{
RenderedRectangle = rectangle;
RenderedTargets.Clear();
- foreach (BrushRenderTarget point in renderTargets)
- RenderedTargets[point] = new Color(GetColorAtPoint(rectangle, point)); // Clone the color, we don't want to have reference issues here and brushes might return the same color multiple times!
+ foreach (BrushRenderTarget renderTarget in renderTargets)
+ {
+ Color color = new Color(GetColorAtPoint(rectangle, renderTarget)); // Clone the color, we don't want to have reference issues here and brushes might return the same color multiple times!}
+ ApplyDecorators(rectangle, renderTarget, ref color);
+ RenderedTargets[renderTarget] = color;
+ }
}
///
- /// Performs the finalize pass of the brush and calculates the final colors for all previously calculated points.
+ /// Applies all attached and enabled decorators to the brush.
///
+ /// The rectangle in which the brush should be drawn.
+ /// The target (key/point) from which the color should be taken.
+ /// The to be modified.
+ protected virtual void ApplyDecorators(Rectangle rectangle, BrushRenderTarget renderTarget, ref Color color)
+ {
+ foreach (IBrushDecorator decorator in Decorators)
+ if (decorator.IsEnabled)
+ decorator.ManipulateColor(rectangle, renderTarget, ref color);
+ }
+
+ ///
public virtual void PerformFinalize()
{
List renderTargets = RenderedTargets.Keys.ToList();
diff --git a/RGB.NET.Core/Brushes/IBrush.cs b/RGB.NET.Core/Brushes/IBrush.cs
index c890b5a..7d7f2c0 100644
--- a/RGB.NET.Core/Brushes/IBrush.cs
+++ b/RGB.NET.Core/Brushes/IBrush.cs
@@ -9,7 +9,7 @@ namespace RGB.NET.Core
///
/// Represents a basic brush.
///
- public interface IBrush : IEffectTarget
+ public interface IBrush : IDecoratable
{
///
/// Gets or sets if the is enabled and will be drawn on an update.
diff --git a/RGB.NET.Core/Decorators/AbstractDecorator.cs b/RGB.NET.Core/Decorators/AbstractDecorator.cs
new file mode 100644
index 0000000..f1dc67e
--- /dev/null
+++ b/RGB.NET.Core/Decorators/AbstractDecorator.cs
@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+
+namespace RGB.NET.Core
+{
+ ///
+ public abstract class AbstractDecorator : AbstractBindable, IDecorator
+ {
+ #region Properties & Fields
+
+ private bool _isEnabled = true;
+ ///
+ public bool IsEnabled
+ {
+ get => _isEnabled;
+ set => SetProperty(ref _isEnabled, value);
+ }
+
+ private int _order;
+ ///
+ public int Order
+ {
+ get => _order;
+ set => SetProperty(ref _order, value);
+ }
+
+ ///
+ /// Gets a readonly-list of all this decorator is attached to.
+ ///
+ protected List DecoratedObjects { get; } = new List();
+
+ #endregion
+
+ #region Methods
+
+ ///
+ public virtual void OnAttached(IDecoratable decoratable) => DecoratedObjects.Add(decoratable);
+
+ ///
+ public virtual void OnDetached(IDecoratable decoratable) => DecoratedObjects.Remove(decoratable);
+
+ ///
+ /// Detaches the decorator from all it is currently attached to.
+ ///
+ /// The type of the this decorator is attached to.
+ /// The type of this .
+ protected virtual void Detach()
+ where TDecoratable : IDecoratable
+ where TDecorator : AbstractDecorator
+ {
+ List decoratables = new List(DecoratedObjects);
+ foreach (IDecoratable decoratable in decoratables)
+ if (decoratable is TDecoratable typedDecoratable)
+ typedDecoratable.RemoveDecorator((TDecorator)this);
+ }
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Core/Decorators/AbstractIDecorateable.cs b/RGB.NET.Core/Decorators/AbstractIDecorateable.cs
new file mode 100644
index 0000000..aa7996d
--- /dev/null
+++ b/RGB.NET.Core/Decorators/AbstractIDecorateable.cs
@@ -0,0 +1,42 @@
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+
+namespace RGB.NET.Core
+{
+ ///
+ public abstract class AbstractDecoratable : AbstractBindable, IDecoratable
+ where T : IDecorator
+ {
+ #region Properties & Fields
+
+ private List _decorators = new List();
+ ///
+ /// Gets a readonly-list of all attached to this .
+ ///
+ protected IReadOnlyCollection Decorators => new ReadOnlyCollection(_decorators);
+
+ #endregion
+
+ #region Methods
+
+ ///
+ public void AddDecorator(T decorator)
+ {
+ _decorators.Add(decorator);
+ _decorators = _decorators.OrderByDescending(x => x.Order).ToList();
+
+ decorator.OnAttached(this);
+ }
+
+ ///
+ public void RemoveDecorator(T decorator)
+ {
+ _decorators.Remove(decorator);
+
+ decorator.OnDetached(this);
+ }
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Core/Decorators/AbstractUpdateAwareDecorator.cs b/RGB.NET.Core/Decorators/AbstractUpdateAwareDecorator.cs
new file mode 100644
index 0000000..6035a0b
--- /dev/null
+++ b/RGB.NET.Core/Decorators/AbstractUpdateAwareDecorator.cs
@@ -0,0 +1,64 @@
+namespace RGB.NET.Core
+{
+ ///
+ /// Represents a basic decorator which is aware of the event.
+ ///
+ public abstract class AbstractUpdateAwareDecorator : AbstractDecorator
+ {
+ #region Properties & Fields
+
+ ///
+ /// Gets or sets if the should call even if the Decorator is disabled.
+ ///
+ protected bool UpdateIfDisabled { get; set; }
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Bool indicating if the should call even if the Decorator is disabled.
+ public AbstractUpdateAwareDecorator(bool updateIfDisabled = false)
+ {
+ this.UpdateIfDisabled = updateIfDisabled;
+ }
+
+ #endregion
+
+ #region Methods
+
+ ///
+ public override void OnAttached(IDecoratable decoratable)
+ {
+ if (DecoratedObjects.Count == 0)
+ RGBSurface.Instance.Updating += OnSurfaceUpdating;
+
+ base.OnAttached(decoratable);
+ }
+
+ ///
+ public override void OnDetached(IDecoratable decoratable)
+ {
+ base.OnDetached(decoratable);
+
+ if (DecoratedObjects.Count == 0)
+ RGBSurface.Instance.Updating -= OnSurfaceUpdating;
+ }
+
+ private void OnSurfaceUpdating(UpdatingEventArgs args)
+ {
+ if (IsEnabled || UpdateIfDisabled)
+ Update(args.DeltaTime);
+ }
+
+ ///
+ /// Updates this .
+ ///
+ /// The elapsed time (in seconds) since the last update.
+ protected abstract void Update(double deltaTime);
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Core/Decorators/IBrushDecorator.cs b/RGB.NET.Core/Decorators/IBrushDecorator.cs
new file mode 100644
index 0000000..aef4f2c
--- /dev/null
+++ b/RGB.NET.Core/Decorators/IBrushDecorator.cs
@@ -0,0 +1,17 @@
+namespace RGB.NET.Core
+{
+ ///
+ ///
+ /// Represents a decorating a .
+ ///
+ public interface IBrushDecorator : IDecorator
+ {
+ ///
+ /// Decorator-Method called by the .
+ ///
+ /// The rectangle in which the should be drawn.
+ /// The target (key/point) from which the should be taken.
+ /// The to be modified.
+ void ManipulateColor(Rectangle rectangle, BrushRenderTarget renderTarget, ref Color color);
+ }
+}
diff --git a/RGB.NET.Core/Decorators/IDecoratable.cs b/RGB.NET.Core/Decorators/IDecoratable.cs
new file mode 100644
index 0000000..898efb1
--- /dev/null
+++ b/RGB.NET.Core/Decorators/IDecoratable.cs
@@ -0,0 +1,29 @@
+namespace RGB.NET.Core
+{
+ ///
+ /// Represents a basic decoratable.
+ ///
+ public interface IDecoratable
+ { }
+
+ ///
+ ///
+ /// Represents a basic decoratable for a specific type of
+ ///
+ ///
+ public interface IDecoratable : IDecoratable
+ where T : IDecorator
+ {
+ ///
+ /// Adds an to the .
+ ///
+ /// The to be added.
+ void AddDecorator(T decorator);
+
+ ///
+ /// Removes an from the .
+ ///
+ /// The to be removed.
+ void RemoveDecorator(T decorator);
+ }
+}
diff --git a/RGB.NET.Core/Decorators/IDecorator.cs b/RGB.NET.Core/Decorators/IDecorator.cs
new file mode 100644
index 0000000..1e9acdd
--- /dev/null
+++ b/RGB.NET.Core/Decorators/IDecorator.cs
@@ -0,0 +1,39 @@
+namespace RGB.NET.Core
+{
+ ///
+ /// Represents a basic decorator.
+ ///
+ public interface IDecorator
+ {
+ #region Properties & Fields
+
+ ///
+ /// Gets or sets if the is enabled and will be used.
+ ///
+ bool IsEnabled { get; set; }
+
+ ///
+ /// Gets or sets the order in which multiple decorators should be applied on the same object.
+ /// Higher orders are processed first.
+ ///
+ int Order { get; set; }
+
+ #endregion
+
+ #region Methods
+
+ ///
+ /// Attaches this to the given target.
+ ///
+ /// The object this should be attached to.
+ void OnAttached(IDecoratable decoratable);
+
+ ///
+ /// Detaches this from the given target.
+ ///
+ /// The object this should be detached from.
+ void OnDetached(IDecoratable decoratable);
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Core/Decorators/ILedGroupDecorator.cs b/RGB.NET.Core/Decorators/ILedGroupDecorator.cs
new file mode 100644
index 0000000..15b30bf
--- /dev/null
+++ b/RGB.NET.Core/Decorators/ILedGroupDecorator.cs
@@ -0,0 +1,8 @@
+namespace RGB.NET.Core
+{
+ ///
+ /// Represents a basic decorator decorating a .
+ ///
+ public interface ILedGroupDecorator : IDecorator
+ { }
+}
diff --git a/RGB.NET.Core/Effects/AbstractBrushEffect.cs b/RGB.NET.Core/Effects/AbstractBrushEffect.cs
deleted file mode 100644
index 7ae06f5..0000000
--- a/RGB.NET.Core/Effects/AbstractBrushEffect.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-// ReSharper disable MemberCanBePrivate.Global
-
-namespace RGB.NET.Core
-{
- ///
- /// Represents a basic effect targeting an .
- ///
- public abstract class AbstractBrushEffect : IEffect
- where T : IBrush
- {
- #region Properties & Fields
-
- ///
- public bool IsEnabled { get; set; } = true;
-
- ///
- public bool IsDone { get; protected set; }
-
- ///
- /// Gets the this effect is targeting.
- ///
- protected T Brush { get; set; }
-
- #endregion
-
- #region Methods
-
- ///
- public abstract void Update(double deltaTime);
-
- ///
- public virtual bool CanBeAppliedTo(IBrush target)
- {
- return target is T;
- }
-
- ///
- public virtual void OnAttach(IBrush target)
- {
- Brush = (T)target;
- }
-
- ///
- public virtual void OnDetach(IBrush target)
- {
- Brush = default(T);
- }
-
- #endregion
- }
-
- ///
- /// Represents a basic effect targeting an .
- ///
- public abstract class AbstractBrushEffect : AbstractBrushEffect
- { }
-}
diff --git a/RGB.NET.Core/Effects/AbstractEffectTarget.cs b/RGB.NET.Core/Effects/AbstractEffectTarget.cs
deleted file mode 100644
index 9ca4d42..0000000
--- a/RGB.NET.Core/Effects/AbstractEffectTarget.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-// ReSharper disable MemberCanBePrivate.Global
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using RGB.NET.Core.Exceptions;
-
-namespace RGB.NET.Core
-{
- ///
- /// Represents an generic effect-target.
- ///
- ///
- public abstract class AbstractEffectTarget : IEffectTarget
- where T : IEffectTarget
- {
- #region Properties & Fields
-
- ///
- /// Gets a list of storing the attached effects.
- ///
- protected IList EffectTimes { get; } = new List();
-
- ///
- /// Gets all attached to this .
- ///
- protected IList> InternalEffects => EffectTimes.Select(x => x.Effect).Cast>().ToList();
-
- ///
- public IEnumerable> Effects => new ReadOnlyCollection>(InternalEffects);
-
- ///
- /// Gets the strongly-typed target used for the .
- ///
- protected abstract T EffectTarget { get; }
-
- #endregion
-
- #region Methods
-
- ///
- /// Updates all added to this .
- ///
- public virtual void UpdateEffects()
- {
- lock (InternalEffects)
- {
- for (int i = EffectTimes.Count - 1; i >= 0; i--)
- {
- long currentTicks = DateTime.Now.Ticks;
-
- EffectTimeContainer effectTime = EffectTimes[i];
- if (!effectTime.Effect.IsEnabled)
- {
- effectTime.TicksAtLastUpdate = currentTicks;
- continue;
- }
-
- double deltaTime;
- if (effectTime.TicksAtLastUpdate < 0)
- {
- effectTime.TicksAtLastUpdate = currentTicks;
- deltaTime = 0;
- }
- else
- deltaTime = (currentTicks - effectTime.TicksAtLastUpdate) / 10000000.0;
-
- effectTime.TicksAtLastUpdate = currentTicks;
- effectTime.Effect.Update(deltaTime);
-
- if (effectTime.Effect.IsDone)
- EffectTimes.RemoveAt(i);
- }
- }
- }
-
- ///
- /// Adds an .
- ///
- /// The to add.
- public virtual void AddEffect(IEffect effect)
- {
- if (EffectTimes.Any(x => x.Effect == effect)) return;
-
- if (!effect.CanBeAppliedTo(EffectTarget))
- throw new EffectException($"Failed to add effect.\r\n" +
- $"The effect of type '{effect.GetType()}' can't be applied to the target of type '{EffectTarget.GetType()}'.");
-
- effect.OnAttach(EffectTarget);
- EffectTimes.Add(new EffectTimeContainer(effect, -1));
- }
-
- ///
- /// Removes an .
- ///
- /// The to remove.
- public virtual void RemoveEffect(IEffect effect)
- {
- EffectTimeContainer effectTimeToRemove = EffectTimes.FirstOrDefault(x => x.Effect == effect);
- if (effectTimeToRemove == null) return;
-
- effect.OnDetach(EffectTarget);
- EffectTimes.Remove(effectTimeToRemove);
- }
-
- ///
- public bool HasEffect(IEffect effect)
- {
- return InternalEffects.Contains(effect);
- }
-
- ///
- public bool HasEffect()
- where TEffect : IEffect
- {
- return InternalEffects.Any(x => x.GetType() == typeof(TEffect));
- }
-
- #endregion
- }
-}
diff --git a/RGB.NET.Core/Effects/AbstractLedGroupEffect.cs b/RGB.NET.Core/Effects/AbstractLedGroupEffect.cs
deleted file mode 100644
index e53707a..0000000
--- a/RGB.NET.Core/Effects/AbstractLedGroupEffect.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-// ReSharper disable MemberCanBePrivate.Global
-// ReSharper disable UnusedAutoPropertyAccessor.Global
-// ReSharper disable UnusedMember.Global
-
-namespace RGB.NET.Core
-{
- ///
- /// Represents a basic effect targeting an .
- ///
- public abstract class AbstractLedGroupEffect : IEffect
- where T : ILedGroup
- {
- #region Properties & Fields
-
- ///
- public bool IsEnabled { get; set; } = true;
-
- ///
- public bool IsDone { get; protected set; }
-
- ///
- /// Gets the this effect is targeting.
- ///
- protected T LedGroup { get; set; }
-
- #endregion
-
- #region Methods
-
- ///
- public abstract void Update(double deltaTime);
-
- ///
- public virtual bool CanBeAppliedTo(ILedGroup target)
- {
- return target is T;
- }
-
- ///
- public virtual void OnAttach(ILedGroup target)
- {
- LedGroup = (T)target;
- }
-
- ///
- public virtual void OnDetach(ILedGroup target)
- {
- LedGroup = default(T);
- }
-
- #endregion
- }
-
- ///
- /// Represents a basic effect targeting an .
- ///
- public abstract class AbstractLedGroupEffect : AbstractLedGroupEffect
- { }
-}
diff --git a/RGB.NET.Core/Effects/EffectTimeContainer.cs b/RGB.NET.Core/Effects/EffectTimeContainer.cs
deleted file mode 100644
index 35d2991..0000000
--- a/RGB.NET.Core/Effects/EffectTimeContainer.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// ReSharper disable MemberCanBePrivate.Global
-// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
-
-namespace RGB.NET.Core
-{
- ///
- /// Represents a wrapped effect with additional time information.
- ///
- public class EffectTimeContainer
- {
- #region Properties & Fields
-
- ///
- /// Gets or sets the wrapped .
- ///
- public IEffect Effect { get; }
-
- ///
- /// Gets or sets the tick-count from the last time the was updated.
- ///
- public long TicksAtLastUpdate { get; set; }
-
- #endregion
-
- #region Constructors
-
- ///
- /// Initializes a new instance of the class.
- ///
- /// The wrapped .
- /// The tick-count from the last time the was updated.
- public EffectTimeContainer(IEffect effect, long ticksAtLastUpdate)
- {
- this.Effect = effect;
- this.TicksAtLastUpdate = ticksAtLastUpdate;
- }
-
- #endregion
- }
-}
diff --git a/RGB.NET.Core/Effects/IEffect.cs b/RGB.NET.Core/Effects/IEffect.cs
deleted file mode 100644
index f0bc7bd..0000000
--- a/RGB.NET.Core/Effects/IEffect.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-// ReSharper disable UnusedMember.Global
-// ReSharper disable UnusedMemberInSuper.Global
-// ReSharper disable UnusedParameter.Global
-
-namespace RGB.NET.Core
-{
- ///
- /// Represents a basic effect.
- ///
- public interface IEffect
- {
- #region Properties & Fields
-
- ///
- /// Gets or sets if the is enabled and will be updated.
- ///
- bool IsEnabled { get; set; }
-
- ///
- /// Gets if this has finished all of his work.
- ///
- bool IsDone { get; }
-
- #endregion
-
- #region Methods
-
- ///
- /// Updates this .
- ///
- /// The elapsed time (in seconds) since the last update.
- void Update(double deltaTime);
-
- #endregion
- }
-
- ///
- /// Represents a basic effect.
- ///
- /// The type of this effect can be attached to.
- public interface IEffect : IEffect
- where T : IEffectTarget
- {
- #region Methods
-
- ///
- /// Checks if the can be applied to the target object.
- ///
- /// The this effect is attached to.
- /// true if the can be attached; otherwise, false.
- bool CanBeAppliedTo(T target);
-
- ///
- /// Hook which is called when the is attached to a .
- ///
- /// The this effect is attached to.
- void OnAttach(T target);
-
- ///
- /// Hook which is called when the is detached from a .
- ///
- /// The this effect is detached from.
- void OnDetach(T target);
-
- #endregion
- }
-}
diff --git a/RGB.NET.Core/Effects/IEffectTarget.cs b/RGB.NET.Core/Effects/IEffectTarget.cs
deleted file mode 100644
index 777d513..0000000
--- a/RGB.NET.Core/Effects/IEffectTarget.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-// ReSharper disable UnusedMember.Global
-
-using System.Collections.Generic;
-
-namespace RGB.NET.Core
-{
- ///
- /// Represents a basic effect-target.
- ///
- /// The type this target represents.
- public interface IEffectTarget
- where T : IEffectTarget
- {
- #region Properties & Fields
-
- ///
- /// Gets a readonly collection of all of this .
- ///
- IEnumerable> Effects { get; }
-
- #endregion
-
- #region Methods
-
- ///
- /// Updates all added to this target.
- ///
- void UpdateEffects();
-
- ///
- /// Adds an .
- ///
- /// The to add.
- void AddEffect(IEffect effect);
-
- ///
- /// Removes an .
- ///
- /// The to remove.
- void RemoveEffect(IEffect effect);
-
- ///
- /// Checks if the is added to this .
- ///
- /// The to check.
- /// true if the is added to this .; otherwise, false.
- bool HasEffect(IEffect effect);
-
- ///
- /// Checks if any of the provided generic type is added to this .
- ///
- /// The generic type of the to check.
- /// true if any of the provided type is added to this .; otherwise, false.
- bool HasEffect() where TEffect : IEffect;
-
- #endregion
- }
-}
diff --git a/RGB.NET.Core/Exceptions/EffectException.cs b/RGB.NET.Core/Exceptions/EffectException.cs
deleted file mode 100644
index 46d3280..0000000
--- a/RGB.NET.Core/Exceptions/EffectException.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-
-namespace RGB.NET.Core.Exceptions
-{
- ///
- /// Represents an exception thrown by an .
- ///
- public class EffectException : ApplicationException
- {
- #region Constructors
-
- ///
- /// Initializes a new instance of the class.
- ///
- /// The message which describes the reason of throwing this exception.
- /// Optional inner exception, which lead to this exception.
- public EffectException(string message, Exception innerException = null)
- : base(message, innerException)
- { }
-
- #endregion
- }
-}
diff --git a/RGB.NET.Core/Groups/AbstractLedGroup.cs b/RGB.NET.Core/Groups/AbstractLedGroup.cs
index 52891d4..336cdfd 100644
--- a/RGB.NET.Core/Groups/AbstractLedGroup.cs
+++ b/RGB.NET.Core/Groups/AbstractLedGroup.cs
@@ -5,15 +5,10 @@ namespace RGB.NET.Core
///
/// Represents a generic .
///
- public abstract class AbstractLedGroup : AbstractEffectTarget, ILedGroup
+ public abstract class AbstractLedGroup : AbstractDecoratable, ILedGroup
{
#region Properties & Fields
- ///
- /// Gets the strongly-typed target used for the effect.
- ///
- protected override ILedGroup EffectTarget => this;
-
///
public IBrush Brush { get; set; }
diff --git a/RGB.NET.Core/Groups/ILedGroup.cs b/RGB.NET.Core/Groups/ILedGroup.cs
index 177ed89..7efcfe2 100644
--- a/RGB.NET.Core/Groups/ILedGroup.cs
+++ b/RGB.NET.Core/Groups/ILedGroup.cs
@@ -8,7 +8,7 @@ namespace RGB.NET.Core
///
/// Represents a generic ledgroup.
///
- public interface ILedGroup : IEffectTarget
+ public interface ILedGroup : IDecoratable
{
///
/// Gets or sets the which should be drawn over this .
diff --git a/RGB.NET.Core/Positioning/Rectangle.cs b/RGB.NET.Core/Positioning/Rectangle.cs
index 17bb690..3510422 100644
--- a/RGB.NET.Core/Positioning/Rectangle.cs
+++ b/RGB.NET.Core/Positioning/Rectangle.cs
@@ -78,8 +78,19 @@ namespace RGB.NET.Core
#region Events
+ ///
+ /// Occurs when a the of the changes.
+ ///
public event EventHandler LocationChanged;
+
+ ///
+ /// Occurs when a the of the changes.
+ ///
public event EventHandler SizeChanged;
+
+ ///
+ /// Occurs when the or the of the changes.
+ ///
public event EventHandler Changed;
#endregion
diff --git a/RGB.NET.Core/RGB.NET.Core.csproj b/RGB.NET.Core/RGB.NET.Core.csproj
index 5e3a047..ae6c793 100644
--- a/RGB.NET.Core/RGB.NET.Core.csproj
+++ b/RGB.NET.Core/RGB.NET.Core.csproj
@@ -50,6 +50,13 @@
+
+
+
+
+
+
+
@@ -63,17 +70,10 @@
-
-
-
-
-
-
-
diff --git a/RGB.NET.Core/RGB.NET.Core.csproj.DotSettings b/RGB.NET.Core/RGB.NET.Core.csproj.DotSettings
index 80ebec2..3d48c05 100644
--- a/RGB.NET.Core/RGB.NET.Core.csproj.DotSettings
+++ b/RGB.NET.Core/RGB.NET.Core.csproj.DotSettings
@@ -1,6 +1,7 @@
True
True
+ True
True
True
True
diff --git a/RGB.NET.Core/RGBSurface.cs b/RGB.NET.Core/RGBSurface.cs
index 71ca90d..8355bae 100644
--- a/RGB.NET.Core/RGBSurface.cs
+++ b/RGB.NET.Core/RGBSurface.cs
@@ -76,11 +76,6 @@ namespace RGB.NET.Core
lock (_ledGroups)
{
- // Update effects
- foreach (ILedGroup ledGroup in _ledGroups)
- try { ledGroup.UpdateEffects(); }
- catch (Exception ex) { OnException(ex); }
-
// Render brushes
foreach (ILedGroup ledGroup in _ledGroups.OrderBy(x => x.ZIndex))
try { Render(ledGroup); }
@@ -142,7 +137,7 @@ namespace RGB.NET.Core
throw new ArgumentException();
}
- brush.UpdateEffects();
+ //brush.UpdateEffects();
brush.PerformFinalize();
foreach (KeyValuePair renders in brush.RenderedTargets)
diff --git a/RGB.NET.Effects/Effects/FlashEffect.cs b/RGB.NET.Decorators/Brush/FlashDecorator.cs
similarity index 73%
rename from RGB.NET.Effects/Effects/FlashEffect.cs
rename to RGB.NET.Decorators/Brush/FlashDecorator.cs
index daab23a..2c83bf8 100644
--- a/RGB.NET.Effects/Effects/FlashEffect.cs
+++ b/RGB.NET.Decorators/Brush/FlashDecorator.cs
@@ -5,36 +5,36 @@
using System;
using RGB.NET.Core;
-namespace RGB.NET.Effects
+namespace RGB.NET.Decorators.Brush
{
///
- /// Represents an effect which allows to flash an brush by modifying his opacity.
+ /// Represents a decorator which allows to flash a brush by modifying his opacity.
///
- public class FlashEffect : AbstractBrushEffect
+ public class FlashDecorator : AbstractUpdateAwareDecorator, IBrushDecorator
{
#region Properties & Fields
///
- /// Gets or sets the attack-time (in seconds) of the effect. (default: 0.2)
+ /// Gets or sets the attack-time (in seconds) of the decorator. (default: 0.2)
/// This is close to a synthesizer envelope. (See as reference)
///
public double Attack { get; set; } = 0.2;
///
- /// Gets or sets the decay-time (in seconds) of the effect. (default: 0)
+ /// Gets or sets the decay-time (in seconds) of the decorator. (default: 0)
/// This is close to a synthesizer envelope. (See as reference)
///
public double Decay { get; set; } = 0;
///
- /// Gets or sets the sustain-time (in seconds) of the effect. (default: 0.3)
+ /// Gets or sets the sustain-time (in seconds) of the decorator. (default: 0.3)
/// This is close to a synthesizer envelope. (See as reference)
/// Note that this value for naming reasons represents the time NOT the level.
///
public double Sustain { get; set; } = 0.3;
///
- /// Gets or sets the release-time (in seconds) of the effect. (default: 0.2)
+ /// Gets or sets the release-time (in seconds) of the decorator. (default: 0.2)
/// This is close to a synthesizer envelope. (See as reference)
///
public double Release { get; set; } = 0.2;
@@ -50,12 +50,12 @@ namespace RGB.NET.Effects
public double SustainValue { get; set; } = 1;
///
- /// Gets or sets the interval (in seconds) in which the effect should repeat (if repetition is enabled). (default: 1)
+ /// Gets or sets the interval (in seconds) in which the decorator should repeat (if repetition is enabled). (default: 1)
///
public double Interval { get; set; } = 1;
///
- /// Gets or sets the amount of repetitions the effect should do until it's finished. Zero means infinite. (default: 0)
+ /// Gets or sets the amount of repetitions the decorator should do until it's finished. Zero means infinite. (default: 0)
///
public int Repetitions { get; set; } = 0;
@@ -63,12 +63,17 @@ namespace RGB.NET.Effects
private double _currentPhaseValue;
private int _repetitionCount;
+ private double _currentValue;
+
#endregion
#region Methods
///
- public override void Update(double deltaTime)
+ public void ManipulateColor(Rectangle rectangle, BrushRenderTarget renderTarget, ref Color color) => color.APercent = _currentValue;
+
+ ///
+ protected override void Update(double deltaTime)
{
_currentPhaseValue -= deltaTime;
@@ -77,7 +82,7 @@ namespace RGB.NET.Effects
if (_currentPhase == ADSRPhase.Attack)
if (_currentPhaseValue > 0)
- Brush.Opacity = Math.Min(1, (Attack - _currentPhaseValue) / Attack) * AttackValue;
+ _currentValue = Math.Min(1, (Attack - _currentPhaseValue) / Attack) * AttackValue;
else
{
_currentPhaseValue = Decay;
@@ -86,7 +91,7 @@ namespace RGB.NET.Effects
if (_currentPhase == ADSRPhase.Decay)
if (_currentPhaseValue > 0)
- Brush.Opacity = SustainValue + (Math.Min(1, _currentPhaseValue / Decay) * (AttackValue - SustainValue));
+ _currentValue = SustainValue + (Math.Min(1, _currentPhaseValue / Decay) * (AttackValue - SustainValue));
else
{
_currentPhaseValue = Sustain;
@@ -95,7 +100,7 @@ namespace RGB.NET.Effects
if (_currentPhase == ADSRPhase.Sustain)
if (_currentPhaseValue > 0)
- Brush.Opacity = SustainValue;
+ _currentValue = SustainValue;
else
{
_currentPhaseValue = Release;
@@ -104,7 +109,7 @@ namespace RGB.NET.Effects
if (_currentPhase == ADSRPhase.Release)
if (_currentPhaseValue > 0)
- Brush.Opacity = Math.Min(1, _currentPhaseValue / Release) * SustainValue;
+ _currentValue = Math.Min(1, _currentPhaseValue / Release) * SustainValue;
else
{
_currentPhaseValue = Interval;
@@ -113,11 +118,11 @@ namespace RGB.NET.Effects
if (_currentPhase == ADSRPhase.Pause)
if (_currentPhaseValue > 0)
- Brush.Opacity = 0;
+ _currentValue = 0;
else
{
if ((++_repetitionCount >= Repetitions) && (Repetitions > 0))
- IsDone = true;
+ Detach();
_currentPhaseValue = Attack;
_currentPhase = ADSRPhase.Attack;
}
@@ -125,17 +130,15 @@ namespace RGB.NET.Effects
// ReSharper restore InvertIf
}
- ///
- /// Resets the effect.
- ///
- public override void OnAttach(IBrush brush)
+ ///
+ public override void OnAttached(IDecoratable decoratable)
{
- base.OnAttach(brush);
+ base.OnAttached(decoratable);
_currentPhase = ADSRPhase.Attack;
_currentPhaseValue = Attack;
_repetitionCount = 0;
- brush.Opacity = 0;
+ _currentValue = 0;
}
#endregion
diff --git a/RGB.NET.Effects/Effects/MoveGradientEffect.cs b/RGB.NET.Decorators/Gradient/MoveGradientDecorator.cs
similarity index 53%
rename from RGB.NET.Effects/Effects/MoveGradientEffect.cs
rename to RGB.NET.Decorators/Gradient/MoveGradientDecorator.cs
index 634a8fa..100a685 100644
--- a/RGB.NET.Effects/Effects/MoveGradientEffect.cs
+++ b/RGB.NET.Decorators/Gradient/MoveGradientDecorator.cs
@@ -2,26 +2,26 @@
using RGB.NET.Brushes.Gradients;
using RGB.NET.Core;
-namespace RGB.NET.Effects
+namespace RGB.NET.Decorators.Gradient
{
///
- /// Represents an effect which allows to move an by modifying his offset.
+ /// Represents a decorator which allows to move an by modifying his offset.
///
- public class MoveGradientEffect : AbstractBrushEffect
+ public class MoveGradientDecorator : AbstractUpdateAwareDecorator, IGradientDecorator
{
#region Properties & Fields
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
// ReSharper disable MemberCanBePrivate.Global
///
- /// Gets or sets the direction the is moved.
+ /// Gets or sets the direction the is moved.
/// True leads to an offset-increment (normaly moving to the right), false to an offset-decrement (normaly moving to the left).
///
public bool Direction { get; set; }
///
/// Gets or sets the speed of the movement in units per second.
- /// The meaning of units differs for the different , but 360 units will always be one complete cycle:
+ /// The meaning of units differs for the different , but 360 units will always be one complete cycle:
/// : 360 unit = 1 offset.
/// : 1 unit = 1 degree.
///
@@ -34,11 +34,15 @@ namespace RGB.NET.Effects
#region Constructors
///
- ///
+ /// Initializes a new instance of the class.
///
- ///
- ///
- public MoveGradientEffect(double speed = 180.0, bool direction = true)
+ /// The speed of the movement in units per second.
+ /// The meaning of units differs for the different but 360 units will always be one complete cycle:
+ /// : 360 unit = 1 offset.
+ /// : 1 unit = 1 degree.
+ /// The direction the is moved.
+ /// True leads to an offset-increment (normaly moving to the right), false to an offset-decrement (normaly moving to the left).
+ public MoveGradientDecorator(double speed = 180.0, bool direction = true)
{
this.Speed = speed;
this.Direction = direction;
@@ -49,14 +53,16 @@ namespace RGB.NET.Effects
#region Methods
///
- public override void Update(double deltaTime)
+ protected override void Update(double deltaTime)
{
double movement = Speed * deltaTime;
if (!Direction)
movement = -movement;
- Brush?.Gradient?.Move(movement);
+ foreach (IDecoratable decoratedObject in DecoratedObjects)
+ if (decoratedObject is IGradient gradient)
+ gradient.Move(movement);
}
#endregion
diff --git a/RGB.NET.Effects/Properties/AssemblyInfo.cs b/RGB.NET.Decorators/Properties/AssemblyInfo.cs
similarity index 72%
rename from RGB.NET.Effects/Properties/AssemblyInfo.cs
rename to RGB.NET.Decorators/Properties/AssemblyInfo.cs
index fc7a4d5..78471f4 100644
--- a/RGB.NET.Effects/Properties/AssemblyInfo.cs
+++ b/RGB.NET.Decorators/Properties/AssemblyInfo.cs
@@ -1,34 +1,35 @@
using System.Reflection;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
-// General Information about an assembly is controlled through the following
+// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("RGB.NET.Effects")]
-[assembly: AssemblyDescription("Effect-Presets of RGB.NET")]
+[assembly: AssemblyTitle("RGB.NET.Decorators")]
+[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Wyrez")]
-[assembly: AssemblyProduct("RGB.NET.Effects")]
-[assembly: AssemblyCopyright("Copyright © Wyrez 2017")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("RGB.NET.Decorators")]
+[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("e850caf8-3e55-40c1-b0be-30174391e55e")]
+[assembly: Guid("7012c431-244a-453f-b7fd-59e030cdbc44")]
// Version information for an assembly consists of the following four values:
//
// Major Version
-// Minor Version
+// Minor Version
// Build Number
// Revision
//
-// You can specify all the values or you can default the Build and Revision Numbers
+// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
diff --git a/RGB.NET.Effects/RGB.NET.Effects.csproj b/RGB.NET.Decorators/RGB.NET.Decorators.csproj
similarity index 76%
rename from RGB.NET.Effects/RGB.NET.Effects.csproj
rename to RGB.NET.Decorators/RGB.NET.Decorators.csproj
index b4f2ad2..d5210ff 100644
--- a/RGB.NET.Effects/RGB.NET.Effects.csproj
+++ b/RGB.NET.Decorators/RGB.NET.Decorators.csproj
@@ -1,14 +1,14 @@
-
+
Debug
AnyCPU
- {E850CAF8-3E55-40C1-B0BE-30174391E55E}
+ {7012C431-244A-453F-B7FD-59E030CDBC44}
Library
Properties
- RGB.NET.Effects
- RGB.NET.Effects
+ RGB.NET.Decorators
+ RGB.NET.Decorators
v4.5
512
@@ -20,7 +20,7 @@
DEBUG;TRACE
prompt
4
- ..\bin\RGB.NET.Effects.XML
+ ..\bin\RGB.NET.Decorators.xml
pdbonly
@@ -29,7 +29,7 @@
TRACE
prompt
4
- ..\bin\RGB.NET.Effects.XML
+ ..\bin\RGB.NET.Decorators.xml
@@ -45,10 +45,13 @@
-
-
+
+
+
+
+
{347c5f0f-f490-4dec-9c1c-6e84750d838d}
@@ -59,15 +62,5 @@
RGB.NET.Core
-
-
-
-
\ No newline at end of file
diff --git a/RGB.NET.Decorators/packages.config b/RGB.NET.Decorators/packages.config
new file mode 100644
index 0000000..3628d7b
--- /dev/null
+++ b/RGB.NET.Decorators/packages.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/RGB.NET.Effects/RGB.NET.Effects.csproj.DotSettings b/RGB.NET.Effects/RGB.NET.Effects.csproj.DotSettings
deleted file mode 100644
index b54b5f3..0000000
--- a/RGB.NET.Effects/RGB.NET.Effects.csproj.DotSettings
+++ /dev/null
@@ -1,2 +0,0 @@
-
- True
\ No newline at end of file
diff --git a/RGB.NET.Effects/packages.config b/RGB.NET.Effects/packages.config
deleted file mode 100644
index d352211..0000000
--- a/RGB.NET.Effects/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/RGB.NET.Groups/Groups/ListLedGroup.cs b/RGB.NET.Groups/Groups/ListLedGroup.cs
index ccb6062..6c21bff 100644
--- a/RGB.NET.Groups/Groups/ListLedGroup.cs
+++ b/RGB.NET.Groups/Groups/ListLedGroup.cs
@@ -12,10 +12,7 @@ namespace RGB.NET.Groups
public class ListLedGroup : AbstractLedGroup
{
#region Properties & Fields
-
- ///
- protected override ILedGroup EffectTarget => this;
-
+
///
/// Gets the list containing the of this .
///
diff --git a/RGB.NET.sln b/RGB.NET.sln
index f4fde81..5dfc45a 100644
--- a/RGB.NET.sln
+++ b/RGB.NET.sln
@@ -1,14 +1,12 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26430.15
+VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RGB.NET.Core", "RGB.NET.Core\RGB.NET.Core.csproj", "{5A4F9A75-75FE-47CD-90E5-914D5B20D232}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RGB.NET.Brushes", "RGB.NET.Brushes\RGB.NET.Brushes.csproj", "{347C5F0F-F490-4DEC-9C1C-6E84750D838D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RGB.NET.Effects", "RGB.NET.Effects\RGB.NET.Effects.csproj", "{E850CAF8-3E55-40C1-B0BE-30174391E55E}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Devices", "Devices", "{33D5E279-1C4E-4AB6-9D1E-6D18109A6C25}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Presets", "Presets", "{FFBCAF88-6646-43EC-9F24-2D719D3779C8}"
@@ -29,11 +27,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{06416566
NuGet\pack_all.bat = NuGet\pack_all.bat
NuGet\RGB.NET.Brushes.nuspec = NuGet\RGB.NET.Brushes.nuspec
NuGet\RGB.NET.Core.nuspec = NuGet\RGB.NET.Core.nuspec
+ NuGet\RGB.NET.Decorators.nuspec = NuGet\RGB.NET.Decorators.nuspec
NuGet\RGB.NET.Devices.CoolerMaster.nuspec = NuGet\RGB.NET.Devices.CoolerMaster.nuspec
NuGet\RGB.NET.Devices.Corsair.nuspec = NuGet\RGB.NET.Devices.Corsair.nuspec
NuGet\RGB.NET.Devices.Logitech.nuspec = NuGet\RGB.NET.Devices.Logitech.nuspec
NuGet\RGB.NET.Devices.Novation.nuspec = NuGet\RGB.NET.Devices.Novation.nuspec
- NuGet\RGB.NET.Effects.nuspec = NuGet\RGB.NET.Effects.nuspec
NuGet\RGB.NET.Groups.nuspec = NuGet\RGB.NET.Groups.nuspec
NuGet\RGB.NET.Input.Corsair.nuspec = NuGet\RGB.NET.Input.Corsair.nuspec
NuGet\RGB.NET.Input.nuspec = NuGet\RGB.NET.Input.nuspec
@@ -50,6 +48,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RGB.NET.Devices.CoolerMaste
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RGB.NET.Devices.Novation", "RGB.NET.Devices.Novation\RGB.NET.Devices.Novation.csproj", "{DB2911F6-404C-4BC8-B35F-232A7450755F}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RGB.NET.Decorators", "RGB.NET.Decorators\RGB.NET.Decorators.csproj", "{7012C431-244A-453F-B7FD-59E030CDBC44}"
+ ProjectSection(ProjectDependencies) = postProject
+ {347C5F0F-F490-4DEC-9C1C-6E84750D838D} = {347C5F0F-F490-4DEC-9C1C-6E84750D838D}
+ {5A4F9A75-75FE-47CD-90E5-914D5B20D232} = {5A4F9A75-75FE-47CD-90E5-914D5B20D232}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -64,10 +68,6 @@ Global
{347C5F0F-F490-4DEC-9C1C-6E84750D838D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{347C5F0F-F490-4DEC-9C1C-6E84750D838D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{347C5F0F-F490-4DEC-9C1C-6E84750D838D}.Release|Any CPU.Build.0 = Release|Any CPU
- {E850CAF8-3E55-40C1-B0BE-30174391E55E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E850CAF8-3E55-40C1-B0BE-30174391E55E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E850CAF8-3E55-40C1-B0BE-30174391E55E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E850CAF8-3E55-40C1-B0BE-30174391E55E}.Release|Any CPU.Build.0 = Release|Any CPU
{DDA8C4C2-8ABF-4FA0-9AF9-C47AD0BFE47D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DDA8C4C2-8ABF-4FA0-9AF9-C47AD0BFE47D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DDA8C4C2-8ABF-4FA0-9AF9-C47AD0BFE47D}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -100,13 +100,16 @@ Global
{DB2911F6-404C-4BC8-B35F-232A7450755F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DB2911F6-404C-4BC8-B35F-232A7450755F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DB2911F6-404C-4BC8-B35F-232A7450755F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7012C431-244A-453F-B7FD-59E030CDBC44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7012C431-244A-453F-B7FD-59E030CDBC44}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7012C431-244A-453F-B7FD-59E030CDBC44}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7012C431-244A-453F-B7FD-59E030CDBC44}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{347C5F0F-F490-4DEC-9C1C-6E84750D838D} = {FFBCAF88-6646-43EC-9F24-2D719D3779C8}
- {E850CAF8-3E55-40C1-B0BE-30174391E55E} = {FFBCAF88-6646-43EC-9F24-2D719D3779C8}
{DDA8C4C2-8ABF-4FA0-9AF9-C47AD0BFE47D} = {33D5E279-1C4E-4AB6-9D1E-6D18109A6C25}
{C854766D-9C1D-474B-B5B8-249DF4A9E552} = {33D5E279-1C4E-4AB6-9D1E-6D18109A6C25}
{F905C418-76BB-4BA6-88AB-0793BC2681D3} = {C854766D-9C1D-474B-B5B8-249DF4A9E552}
@@ -115,5 +118,9 @@ Global
{E7B2F174-FCC6-4FC7-9970-3138B5F4C921} = {33D5E279-1C4E-4AB6-9D1E-6D18109A6C25}
{85609427-D433-44E2-A249-CE890B66D845} = {33D5E279-1C4E-4AB6-9D1E-6D18109A6C25}
{DB2911F6-404C-4BC8-B35F-232A7450755F} = {33D5E279-1C4E-4AB6-9D1E-6D18109A6C25}
+ {7012C431-244A-453F-B7FD-59E030CDBC44} = {FFBCAF88-6646-43EC-9F24-2D719D3779C8}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {CDECA6C7-8D18-4AF3-94F7-C70A69B8571B}
EndGlobalSection
EndGlobal