From 44c0cc59faef2143ecf5b59fc70d53a482fe1dee Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Wed, 6 Sep 2017 14:42:33 +0200 Subject: [PATCH] Reimplemented specific brushes as decorators --- KeyboardAudioVisualizer/ApplicationManager.cs | 30 ++++++++++++------- .../BeatDecorator.cs} | 12 +++----- .../FrequencyBarsDecorator.cs} | 14 ++++----- .../LevelBarDecorator.cs} | 15 +++++----- .../KeyboardAudioVisualizer.csproj | 6 ++-- 5 files changed, 39 insertions(+), 38 deletions(-) rename KeyboardAudioVisualizer/{Brushes/BeatBrush.cs => Decorators/BeatDecorator.cs} (55%) rename KeyboardAudioVisualizer/{Brushes/FrequencyBarsBrush.cs => Decorators/FrequencyBarsDecorator.cs} (64%) rename KeyboardAudioVisualizer/{Brushes/LevelBarBrush.cs => Decorators/LevelBarDecorator.cs} (74%) diff --git a/KeyboardAudioVisualizer/ApplicationManager.cs b/KeyboardAudioVisualizer/ApplicationManager.cs index 55b2939..3cf44bf 100644 --- a/KeyboardAudioVisualizer/ApplicationManager.cs +++ b/KeyboardAudioVisualizer/ApplicationManager.cs @@ -1,7 +1,7 @@ using System.Windows; using KeyboardAudioVisualizer.AudioProcessing; -using KeyboardAudioVisualizer.Brushes; using KeyboardAudioVisualizer.Configuration; +using KeyboardAudioVisualizer.Decorators; using KeyboardAudioVisualizer.Helper; using KeyboardAudioVisualizer.UI; using RGB.NET.Brushes; @@ -12,6 +12,7 @@ using RGB.NET.Devices.Corsair; using RGB.NET.Devices.Corsair.SpecialParts; using RGB.NET.Devices.Logitech; using RGB.NET.Groups; +using Point = RGB.NET.Core.Point; namespace KeyboardAudioVisualizer { @@ -65,26 +66,30 @@ namespace KeyboardAudioVisualizer { case RGBDeviceType.Keyboard: case RGBDeviceType.LedMatrix: + ListLedGroup primary = new ListLedGroup(device); + LightbarSpecialPart lightbar = device.GetSpecialDevicePart(); if (lightbar != null) { - ListLedGroup primary = new ListLedGroup(device); primary.RemoveLeds(lightbar.Leds); - primary.Brush = new FrequencyBarsBrush(AudioProcessor.Instance.PrimaryVisualizationProvider, new RainbowGradient(300, -14)); IGradient keyboardLevelGradient = new LinearGradient(new GradientStop(0, new Color(0, 0, 255)), new GradientStop(1, new Color(255, 0, 0))); ILedGroup lightbarLeft = new ListLedGroup(lightbar.Left); - lightbarLeft.Brush = new LevelBarBrush(AudioProcessor.Instance.TertiaryVisualizationProvider, keyboardLevelGradient, LevelBarDirection.Left, 0); + lightbarLeft.Brush = new LinearGradientBrush(keyboardLevelGradient); + lightbarLeft.Brush.AddDecorator(new LevelBarDecorator(AudioProcessor.Instance.TertiaryVisualizationProvider, LevelBarDirection.Left, 0)); ILedGroup lightbarRight = new ListLedGroup(lightbar.Right); - lightbarRight.Brush = new LevelBarBrush(AudioProcessor.Instance.TertiaryVisualizationProvider, keyboardLevelGradient, LevelBarDirection.Right, 1); + lightbarRight.Brush = new LinearGradientBrush(keyboardLevelGradient); + lightbarRight.Brush.AddDecorator(new LevelBarDecorator(AudioProcessor.Instance.TertiaryVisualizationProvider, LevelBarDirection.Right, 1)); ILedGroup lightbarCenter = new ListLedGroup(lightbar.Center); - lightbarCenter.Brush = new BeatBrush(AudioProcessor.Instance.SecondaryVisualizationProvider, new Color(255, 255, 255)); + lightbarCenter.Brush = new SolidColorBrush(new Color(255, 255, 255)); + lightbarCenter.Brush.AddDecorator(new BeatDecorator(AudioProcessor.Instance.SecondaryVisualizationProvider)); } - else - new ListLedGroup(device).Brush = new FrequencyBarsBrush(AudioProcessor.Instance.PrimaryVisualizationProvider, new RainbowGradient(300, -14)); + + primary.Brush = new LinearGradientBrush(new RainbowGradient(300, -14)); + primary.Brush.AddDecorator(new FrequencyBarsDecorator(AudioProcessor.Instance.PrimaryVisualizationProvider)); break; case RGBDeviceType.Mousepad: @@ -93,16 +98,19 @@ namespace KeyboardAudioVisualizer IGradient mousepadLevelGradient = new LinearGradient(new GradientStop(0, new Color(0, 0, 255)), new GradientStop(1, new Color(255, 0, 0))); ILedGroup left = new RectangleLedGroup(new Rectangle(device.Location.X, device.Location.Y, device.Size.Width / 2.0, device.Size.Height)); - left.Brush = new LevelBarBrush(AudioProcessor.Instance.TertiaryVisualizationProvider, mousepadLevelGradient, LevelBarDirection.Top, 0); + left.Brush = new LinearGradientBrush(new Point(0.5, 1), new Point(0.5, 0), mousepadLevelGradient); + left.Brush.AddDecorator(new LevelBarDecorator(AudioProcessor.Instance.TertiaryVisualizationProvider, LevelBarDirection.Top, 0)); ILedGroup right = new RectangleLedGroup(new Rectangle(device.Location.X + (device.Size.Width / 2.0), device.Location.Y, device.Size.Width / 2.0, device.Size.Height)); - right.Brush = new LevelBarBrush(AudioProcessor.Instance.TertiaryVisualizationProvider, mousepadLevelGradient, LevelBarDirection.Top, 1); + right.Brush = new LinearGradientBrush(new Point(0.5, 1), new Point(0.5, 0), mousepadLevelGradient); + right.Brush.AddDecorator(new LevelBarDecorator(AudioProcessor.Instance.TertiaryVisualizationProvider, LevelBarDirection.Top, 1)); break; case RGBDeviceType.Mouse: case RGBDeviceType.Headset: ILedGroup deviceGroup = new ListLedGroup(device); - deviceGroup.Brush = new BeatBrush(AudioProcessor.Instance.SecondaryVisualizationProvider, new Color(255, 255, 255)); + deviceGroup.Brush = new SolidColorBrush(new Color(255, 255, 255)); + deviceGroup.Brush.AddDecorator(new BeatDecorator(AudioProcessor.Instance.SecondaryVisualizationProvider)); break; } diff --git a/KeyboardAudioVisualizer/Brushes/BeatBrush.cs b/KeyboardAudioVisualizer/Decorators/BeatDecorator.cs similarity index 55% rename from KeyboardAudioVisualizer/Brushes/BeatBrush.cs rename to KeyboardAudioVisualizer/Decorators/BeatDecorator.cs index 71901c6..b4fe90a 100644 --- a/KeyboardAudioVisualizer/Brushes/BeatBrush.cs +++ b/KeyboardAudioVisualizer/Decorators/BeatDecorator.cs @@ -1,34 +1,30 @@ using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider; using RGB.NET.Core; -namespace KeyboardAudioVisualizer.Brushes +namespace KeyboardAudioVisualizer.Decorators { - public class BeatBrush : AbstractBrush + public class BeatDecorator : AbstractDecorator, IBrushDecorator { #region Properties & Fields private readonly IVisualizationProvider _visualizationProvider; - private readonly Color _color; #endregion #region Constructors - public BeatBrush(IVisualizationProvider visualizationProvider, Color color) + public BeatDecorator(IVisualizationProvider visualizationProvider) { this._visualizationProvider = visualizationProvider; - this._color = color; } #endregion #region Methods - protected override Color GetColorAtPoint(Rectangle rectangle, BrushRenderTarget renderTarget) + public void ManipulateColor(Rectangle rectangle, BrushRenderTarget renderTarget, ref Color color) { - Color color = new Color(_color); color.APercent *= _visualizationProvider.VisualizationData[0]; - return color; } #endregion diff --git a/KeyboardAudioVisualizer/Brushes/FrequencyBarsBrush.cs b/KeyboardAudioVisualizer/Decorators/FrequencyBarsDecorator.cs similarity index 64% rename from KeyboardAudioVisualizer/Brushes/FrequencyBarsBrush.cs rename to KeyboardAudioVisualizer/Decorators/FrequencyBarsDecorator.cs index e9c6909..d398089 100644 --- a/KeyboardAudioVisualizer/Brushes/FrequencyBarsBrush.cs +++ b/KeyboardAudioVisualizer/Decorators/FrequencyBarsDecorator.cs @@ -1,14 +1,12 @@ using System; using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider; -using RGB.NET.Brushes; -using RGB.NET.Brushes.Gradients; using RGB.NET.Core; using Color = RGB.NET.Core.Color; using Rectangle = RGB.NET.Core.Rectangle; -namespace KeyboardAudioVisualizer.Brushes +namespace KeyboardAudioVisualizer.Decorators { - public class FrequencyBarsBrush : LinearGradientBrush + public class FrequencyBarsDecorator : AbstractDecorator, IBrushDecorator { #region Properties & Fields @@ -18,8 +16,7 @@ namespace KeyboardAudioVisualizer.Brushes #region Constructors - public FrequencyBarsBrush(IVisualizationProvider visualizationProvider, IGradient gradient) - : base(gradient) + public FrequencyBarsDecorator(IVisualizationProvider visualizationProvider) { this._visualizationProvider = visualizationProvider; } @@ -28,13 +25,14 @@ namespace KeyboardAudioVisualizer.Brushes #region Methods - protected override Color GetColorAtPoint(Rectangle rectangle, BrushRenderTarget renderTarget) + public void ManipulateColor(Rectangle rectangle, BrushRenderTarget renderTarget, ref Color color) { int barSampleIndex = (int)Math.Floor(_visualizationProvider.VisualizationData.Length * (renderTarget.Point.X / (rectangle.Location.X + rectangle.Size.Width))); double curBarHeight = 1.0 - Math.Max(0f, _visualizationProvider.VisualizationData[barSampleIndex]); double verticalPos = (renderTarget.Point.Y / rectangle.Size.Height); - return curBarHeight <= verticalPos ? base.GetColorAtPoint(rectangle, renderTarget) : Color.Transparent; + if (curBarHeight > verticalPos) + color.A = 0; } #endregion diff --git a/KeyboardAudioVisualizer/Brushes/LevelBarBrush.cs b/KeyboardAudioVisualizer/Decorators/LevelBarDecorator.cs similarity index 74% rename from KeyboardAudioVisualizer/Brushes/LevelBarBrush.cs rename to KeyboardAudioVisualizer/Decorators/LevelBarDecorator.cs index 5878f47..ded9918 100644 --- a/KeyboardAudioVisualizer/Brushes/LevelBarBrush.cs +++ b/KeyboardAudioVisualizer/Decorators/LevelBarDecorator.cs @@ -1,11 +1,9 @@ using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider; -using RGB.NET.Brushes; -using RGB.NET.Brushes.Gradients; using RGB.NET.Core; -namespace KeyboardAudioVisualizer.Brushes +namespace KeyboardAudioVisualizer.Decorators { - public class LevelBarBrush : LinearGradientBrush + public class LevelBarDecorator : AbstractDecorator, IBrushDecorator { #region Properties & Fields @@ -17,8 +15,7 @@ namespace KeyboardAudioVisualizer.Brushes #region Constructors - public LevelBarBrush(IVisualizationProvider visualizationProvider, IGradient gradient, LevelBarDirection direction, int dataIndex) - : base(gradient) + public LevelBarDecorator(IVisualizationProvider visualizationProvider, LevelBarDirection direction, int dataIndex) { this._visualizationProvider = visualizationProvider; this.Direction = direction; @@ -29,10 +26,12 @@ namespace KeyboardAudioVisualizer.Brushes #region Methods - protected override Color GetColorAtPoint(Rectangle rectangle, BrushRenderTarget renderTarget) + public void ManipulateColor(Rectangle rectangle, BrushRenderTarget renderTarget, ref Color color) { double offset = CalculateOffset(rectangle, renderTarget); - return offset < _visualizationProvider.VisualizationData[DataIndex] ? Gradient.GetColor(offset) : Color.Transparent; + + if (offset >= _visualizationProvider.VisualizationData[DataIndex]) + color.A = 0; } private double CalculateOffset(Rectangle rectangle, BrushRenderTarget renderTarget) diff --git a/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj b/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj index c4bebcc..b58bec1 100644 --- a/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj +++ b/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj @@ -129,9 +129,9 @@ - - - + + +