mirror of
https://github.com/DarthAffe/KeyboardAudioVisualizer.git
synced 2025-12-12 15:18:30 +00:00
Reimplemented specific brushes as decorators
This commit is contained in:
parent
9b84bfcba3
commit
44c0cc59fa
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
@ -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
|
||||||
@ -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)
|
||||||
@ -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" />
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user