From 2086b3729daa75fd3d5cfcb5a95b01e64f20b083 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Tue, 5 Sep 2017 13:44:23 +0200 Subject: [PATCH] Replaced effects with decorators. Decorators should be way more flexible while beeing easy to use. --- ...fects.nuspec => RGB.NET.Decorators.nuspec} | 16 +-- .../Decorators/IGradientDecorator.cs | 11 ++ RGB.NET.Brushes/Gradients/AbstractGradient.cs | 2 +- RGB.NET.Brushes/Gradients/IGradient.cs | 2 +- RGB.NET.Brushes/Gradients/RainbowGradient.cs | 2 +- RGB.NET.Brushes/RGB.NET.Brushes.csproj | 1 + .../RGB.NET.Brushes.csproj.DotSettings | 3 +- RGB.NET.Core/Brushes/AbstractBrush.cs | 33 +++-- RGB.NET.Core/Brushes/IBrush.cs | 2 +- RGB.NET.Core/Decorators/AbstractDecorator.cs | 58 +++++++++ .../Decorators/AbstractIDecorateable.cs | 42 ++++++ .../AbstractUpdateAwareDecorator.cs | 64 +++++++++ RGB.NET.Core/Decorators/IBrushDecorator.cs | 17 +++ RGB.NET.Core/Decorators/IDecoratable.cs | 29 +++++ RGB.NET.Core/Decorators/IDecorator.cs | 39 ++++++ RGB.NET.Core/Decorators/ILedGroupDecorator.cs | 8 ++ RGB.NET.Core/Effects/AbstractBrushEffect.cs | 57 -------- RGB.NET.Core/Effects/AbstractEffectTarget.cs | 122 ------------------ .../Effects/AbstractLedGroupEffect.cs | 59 --------- RGB.NET.Core/Effects/EffectTimeContainer.cs | 40 ------ RGB.NET.Core/Effects/IEffect.cs | 67 ---------- RGB.NET.Core/Effects/IEffectTarget.cs | 58 --------- RGB.NET.Core/Exceptions/EffectException.cs | 23 ---- RGB.NET.Core/Groups/AbstractLedGroup.cs | 7 +- RGB.NET.Core/Groups/ILedGroup.cs | 2 +- RGB.NET.Core/Positioning/Rectangle.cs | 11 ++ RGB.NET.Core/RGB.NET.Core.csproj | 14 +- RGB.NET.Core/RGB.NET.Core.csproj.DotSettings | 1 + RGB.NET.Core/RGBSurface.cs | 7 +- .../Brush/FlashDecorator.cs | 47 +++---- .../Gradient/MoveGradientDecorator.cs | 28 ++-- .../Properties/AssemblyInfo.cs | 23 ++-- .../RGB.NET.Decorators.csproj | 29 ++--- RGB.NET.Decorators/packages.config | 6 + .../RGB.NET.Effects.csproj.DotSettings | 2 - RGB.NET.Effects/packages.config | 4 - RGB.NET.Groups/Groups/ListLedGroup.cs | 5 +- RGB.NET.sln | 25 ++-- 38 files changed, 414 insertions(+), 552 deletions(-) rename NuGet/{RGB.NET.Effects.nuspec => RGB.NET.Decorators.nuspec} (56%) create mode 100644 RGB.NET.Brushes/Decorators/IGradientDecorator.cs create mode 100644 RGB.NET.Core/Decorators/AbstractDecorator.cs create mode 100644 RGB.NET.Core/Decorators/AbstractIDecorateable.cs create mode 100644 RGB.NET.Core/Decorators/AbstractUpdateAwareDecorator.cs create mode 100644 RGB.NET.Core/Decorators/IBrushDecorator.cs create mode 100644 RGB.NET.Core/Decorators/IDecoratable.cs create mode 100644 RGB.NET.Core/Decorators/IDecorator.cs create mode 100644 RGB.NET.Core/Decorators/ILedGroupDecorator.cs delete mode 100644 RGB.NET.Core/Effects/AbstractBrushEffect.cs delete mode 100644 RGB.NET.Core/Effects/AbstractEffectTarget.cs delete mode 100644 RGB.NET.Core/Effects/AbstractLedGroupEffect.cs delete mode 100644 RGB.NET.Core/Effects/EffectTimeContainer.cs delete mode 100644 RGB.NET.Core/Effects/IEffect.cs delete mode 100644 RGB.NET.Core/Effects/IEffectTarget.cs delete mode 100644 RGB.NET.Core/Exceptions/EffectException.cs rename RGB.NET.Effects/Effects/FlashEffect.cs => RGB.NET.Decorators/Brush/FlashDecorator.cs (73%) rename RGB.NET.Effects/Effects/MoveGradientEffect.cs => RGB.NET.Decorators/Gradient/MoveGradientDecorator.cs (53%) rename {RGB.NET.Effects => RGB.NET.Decorators}/Properties/AssemblyInfo.cs (72%) rename RGB.NET.Effects/RGB.NET.Effects.csproj => RGB.NET.Decorators/RGB.NET.Decorators.csproj (76%) create mode 100644 RGB.NET.Decorators/packages.config delete mode 100644 RGB.NET.Effects/RGB.NET.Effects.csproj.DotSettings delete mode 100644 RGB.NET.Effects/packages.config 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