Reimplemented specific brushes as decorators

This commit is contained in:
Darth Affe 2017-09-06 14:42:33 +02:00
parent 9b84bfcba3
commit 44c0cc59fa
5 changed files with 39 additions and 38 deletions

View File

@ -1,7 +1,7 @@
using System.Windows; using System.Windows;
using KeyboardAudioVisualizer.AudioProcessing; using KeyboardAudioVisualizer.AudioProcessing;
using KeyboardAudioVisualizer.Brushes;
using KeyboardAudioVisualizer.Configuration; using KeyboardAudioVisualizer.Configuration;
using KeyboardAudioVisualizer.Decorators;
using KeyboardAudioVisualizer.Helper; using KeyboardAudioVisualizer.Helper;
using KeyboardAudioVisualizer.UI; using KeyboardAudioVisualizer.UI;
using RGB.NET.Brushes; using RGB.NET.Brushes;
@ -12,6 +12,7 @@ using RGB.NET.Devices.Corsair;
using RGB.NET.Devices.Corsair.SpecialParts; using RGB.NET.Devices.Corsair.SpecialParts;
using RGB.NET.Devices.Logitech; using RGB.NET.Devices.Logitech;
using RGB.NET.Groups; using RGB.NET.Groups;
using Point = RGB.NET.Core.Point;
namespace KeyboardAudioVisualizer namespace KeyboardAudioVisualizer
{ {
@ -65,26 +66,30 @@ namespace KeyboardAudioVisualizer
{ {
case RGBDeviceType.Keyboard: case RGBDeviceType.Keyboard:
case RGBDeviceType.LedMatrix: case RGBDeviceType.LedMatrix:
ListLedGroup primary = new ListLedGroup(device);
LightbarSpecialPart lightbar = device.GetSpecialDevicePart<LightbarSpecialPart>(); LightbarSpecialPart lightbar = device.GetSpecialDevicePart<LightbarSpecialPart>();
if (lightbar != null) if (lightbar != null)
{ {
ListLedGroup primary = new ListLedGroup(device);
primary.RemoveLeds(lightbar.Leds); 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))); 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); 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); 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); 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; break;
case RGBDeviceType.Mousepad: 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))); 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)); 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)); 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; break;
case RGBDeviceType.Mouse: case RGBDeviceType.Mouse:
case RGBDeviceType.Headset: case RGBDeviceType.Headset:
ILedGroup deviceGroup = new ListLedGroup(device); 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; break;
} }

View File

@ -1,34 +1,30 @@
using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider; using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider;
using RGB.NET.Core; using RGB.NET.Core;
namespace KeyboardAudioVisualizer.Brushes namespace KeyboardAudioVisualizer.Decorators
{ {
public class BeatBrush : AbstractBrush public class BeatDecorator : AbstractDecorator, IBrushDecorator
{ {
#region Properties & Fields #region Properties & Fields
private readonly IVisualizationProvider _visualizationProvider; private readonly IVisualizationProvider _visualizationProvider;
private readonly Color _color;
#endregion #endregion
#region Constructors #region Constructors
public BeatBrush(IVisualizationProvider visualizationProvider, Color color) public BeatDecorator(IVisualizationProvider visualizationProvider)
{ {
this._visualizationProvider = visualizationProvider; this._visualizationProvider = visualizationProvider;
this._color = color;
} }
#endregion #endregion
#region Methods #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]; color.APercent *= _visualizationProvider.VisualizationData[0];
return color;
} }
#endregion #endregion

View File

@ -1,14 +1,12 @@
using System; using System;
using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider; using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider;
using RGB.NET.Brushes;
using RGB.NET.Brushes.Gradients;
using RGB.NET.Core; using RGB.NET.Core;
using Color = RGB.NET.Core.Color; using Color = RGB.NET.Core.Color;
using Rectangle = RGB.NET.Core.Rectangle; using Rectangle = RGB.NET.Core.Rectangle;
namespace KeyboardAudioVisualizer.Brushes namespace KeyboardAudioVisualizer.Decorators
{ {
public class FrequencyBarsBrush : LinearGradientBrush public class FrequencyBarsDecorator : AbstractDecorator, IBrushDecorator
{ {
#region Properties & Fields #region Properties & Fields
@ -18,8 +16,7 @@ namespace KeyboardAudioVisualizer.Brushes
#region Constructors #region Constructors
public FrequencyBarsBrush(IVisualizationProvider visualizationProvider, IGradient gradient) public FrequencyBarsDecorator(IVisualizationProvider visualizationProvider)
: base(gradient)
{ {
this._visualizationProvider = visualizationProvider; this._visualizationProvider = visualizationProvider;
} }
@ -28,13 +25,14 @@ namespace KeyboardAudioVisualizer.Brushes
#region Methods #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))); 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 curBarHeight = 1.0 - Math.Max(0f, _visualizationProvider.VisualizationData[barSampleIndex]);
double verticalPos = (renderTarget.Point.Y / rectangle.Size.Height); double verticalPos = (renderTarget.Point.Y / rectangle.Size.Height);
return curBarHeight <= verticalPos ? base.GetColorAtPoint(rectangle, renderTarget) : Color.Transparent; if (curBarHeight > verticalPos)
color.A = 0;
} }
#endregion #endregion

View File

@ -1,11 +1,9 @@
using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider; using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider;
using RGB.NET.Brushes;
using RGB.NET.Brushes.Gradients;
using RGB.NET.Core; using RGB.NET.Core;
namespace KeyboardAudioVisualizer.Brushes namespace KeyboardAudioVisualizer.Decorators
{ {
public class LevelBarBrush : LinearGradientBrush public class LevelBarDecorator : AbstractDecorator, IBrushDecorator
{ {
#region Properties & Fields #region Properties & Fields
@ -17,8 +15,7 @@ namespace KeyboardAudioVisualizer.Brushes
#region Constructors #region Constructors
public LevelBarBrush(IVisualizationProvider visualizationProvider, IGradient gradient, LevelBarDirection direction, int dataIndex) public LevelBarDecorator(IVisualizationProvider visualizationProvider, LevelBarDirection direction, int dataIndex)
: base(gradient)
{ {
this._visualizationProvider = visualizationProvider; this._visualizationProvider = visualizationProvider;
this.Direction = direction; this.Direction = direction;
@ -29,10 +26,12 @@ namespace KeyboardAudioVisualizer.Brushes
#region Methods #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); 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) private double CalculateOffset(Rectangle rectangle, BrushRenderTarget renderTarget)

View File

@ -129,9 +129,9 @@
<Compile Include="AudioProcessing\VisualizationProvider\IVisualizationProvider.cs" /> <Compile Include="AudioProcessing\VisualizationProvider\IVisualizationProvider.cs" />
<Compile Include="AudioProcessing\VisualizationProvider\LevelVisualizationProvider.cs" /> <Compile Include="AudioProcessing\VisualizationProvider\LevelVisualizationProvider.cs" />
<Compile Include="AudioProcessing\Spectrum\RawSpectrumProvider.cs" /> <Compile Include="AudioProcessing\Spectrum\RawSpectrumProvider.cs" />
<Compile Include="Brushes\BeatBrush.cs" /> <Compile Include="Decorators\BeatDecorator.cs" />
<Compile Include="Brushes\FrequencyBarsBrush.cs" /> <Compile Include="Decorators\FrequencyBarsDecorator.cs" />
<Compile Include="Brushes\LevelBarBrush.cs" /> <Compile Include="Decorators\LevelBarDecorator.cs" />
<Compile Include="Configuration\AbstractConfiguration.cs" /> <Compile Include="Configuration\AbstractConfiguration.cs" />
<Compile Include="Configuration\EqualizerConfiguration.cs" /> <Compile Include="Configuration\EqualizerConfiguration.cs" />
<Compile Include="Configuration\IConfiguration.cs" /> <Compile Include="Configuration\IConfiguration.cs" />