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 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<LightbarSpecialPart>();
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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)
|
||||
@ -129,9 +129,9 @@
|
||||
<Compile Include="AudioProcessing\VisualizationProvider\IVisualizationProvider.cs" />
|
||||
<Compile Include="AudioProcessing\VisualizationProvider\LevelVisualizationProvider.cs" />
|
||||
<Compile Include="AudioProcessing\Spectrum\RawSpectrumProvider.cs" />
|
||||
<Compile Include="Brushes\BeatBrush.cs" />
|
||||
<Compile Include="Brushes\FrequencyBarsBrush.cs" />
|
||||
<Compile Include="Brushes\LevelBarBrush.cs" />
|
||||
<Compile Include="Decorators\BeatDecorator.cs" />
|
||||
<Compile Include="Decorators\FrequencyBarsDecorator.cs" />
|
||||
<Compile Include="Decorators\LevelBarDecorator.cs" />
|
||||
<Compile Include="Configuration\AbstractConfiguration.cs" />
|
||||
<Compile Include="Configuration\EqualizerConfiguration.cs" />
|
||||
<Compile Include="Configuration\IConfiguration.cs" />
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user