diff --git a/src/Artemis.Plugins.LayerBrushes.Chroma/Artemis.Plugins.LayerBrushes.Chroma.csproj b/src/Artemis.Plugins.LayerBrushes.Chroma/Artemis.Plugins.LayerBrushes.Chroma.csproj
index aa268e2..9d54606 100644
--- a/src/Artemis.Plugins.LayerBrushes.Chroma/Artemis.Plugins.LayerBrushes.Chroma.csproj
+++ b/src/Artemis.Plugins.LayerBrushes.Chroma/Artemis.Plugins.LayerBrushes.Chroma.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/src/Artemis.Plugins.LayerBrushes.Chroma/DefaultChromaLedMap.cs b/src/Artemis.Plugins.LayerBrushes.Chroma/DefaultChromaLedMap.cs
index 9c82ae5..4261a1e 100644
--- a/src/Artemis.Plugins.LayerBrushes.Chroma/DefaultChromaLedMap.cs
+++ b/src/Artemis.Plugins.LayerBrushes.Chroma/DefaultChromaLedMap.cs
@@ -1,341 +1,290 @@
-using RGB.NET.Core;
+using System;
+using RGB.NET.Core;
using System.Collections.Generic;
+using System.Linq;
namespace Artemis.Plugins.LayerBrushes.Chroma;
//https://developer.razer.com/works-with-chroma/razer-chroma-led-profiles/
public static class DefaultChromaLedMap
{
- public static readonly LedId[,] Keyboard =
+ private static readonly LedId[] Keyboard =
{
- {
- LedId.Invalid,
- LedId.Keyboard_Escape,
- LedId.Invalid,
- LedId.Keyboard_F1,
- LedId.Keyboard_F2,
- LedId.Keyboard_F3,
- LedId.Keyboard_F4,
- LedId.Keyboard_F5,
- LedId.Keyboard_F6,
- LedId.Keyboard_F7,
- LedId.Keyboard_F8,
- LedId.Keyboard_F9,
- LedId.Keyboard_F10,
- LedId.Keyboard_F11,
- LedId.Keyboard_F12,
- LedId.Keyboard_PrintScreen,
- LedId.Keyboard_ScrollLock,
- LedId.Keyboard_PauseBreak,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Logo,
- LedId.Invalid
- },
- {
- LedId.Keyboard_Macro1,
- LedId.Keyboard_GraveAccentAndTilde,
- LedId.Keyboard_1,
- LedId.Keyboard_2,
- LedId.Keyboard_3,
- LedId.Keyboard_4,
- LedId.Keyboard_5,
- LedId.Keyboard_6,
- LedId.Keyboard_7,
- LedId.Keyboard_8,
- LedId.Keyboard_9,
- LedId.Keyboard_0,
- LedId.Keyboard_MinusAndUnderscore,
- LedId.Keyboard_EqualsAndPlus,
- LedId.Keyboard_Backspace,
- LedId.Keyboard_Insert,
- LedId.Keyboard_Home,
- LedId.Keyboard_PageUp,
- LedId.Keyboard_NumLock,
- LedId.Keyboard_NumSlash,
- LedId.Keyboard_NumAsterisk,
- LedId.Keyboard_NumMinus
- },
- {
- LedId.Keyboard_Macro2,
- LedId.Keyboard_Tab,
- LedId.Keyboard_Q,
- LedId.Keyboard_W,
- LedId.Keyboard_E,
- LedId.Keyboard_R,
- LedId.Keyboard_T,
- LedId.Keyboard_Y,
- LedId.Keyboard_U,
- LedId.Keyboard_I,
- LedId.Keyboard_O,
- LedId.Keyboard_P,
- LedId.Keyboard_BracketLeft,
- LedId.Keyboard_BracketRight,
- LedId.Keyboard_Backslash,
- LedId.Keyboard_Delete,
- LedId.Keyboard_End,
- LedId.Keyboard_PageDown,
- LedId.Keyboard_Num7,
- LedId.Keyboard_Num8,
- LedId.Keyboard_Num9,
- LedId.Keyboard_NumPlus
- },
- {
- LedId.Keyboard_Macro3,
- LedId.Keyboard_CapsLock,
- LedId.Keyboard_A,
- LedId.Keyboard_S,
- LedId.Keyboard_D,
- LedId.Keyboard_F,
- LedId.Keyboard_G,
- LedId.Keyboard_H,
- LedId.Keyboard_J,
- LedId.Keyboard_K,
- LedId.Keyboard_L,
- LedId.Keyboard_SemicolonAndColon,
- LedId.Keyboard_ApostropheAndDoubleQuote,
- LedId.Keyboard_NonUsTilde,
- LedId.Keyboard_Enter,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Keyboard_Num4,
- LedId.Keyboard_Num5,
- LedId.Keyboard_Num6,
- LedId.Invalid
- },
- {
- LedId.Keyboard_Macro4,
- LedId.Keyboard_LeftShift,
- LedId.Keyboard_NonUsBackslash,
- LedId.Keyboard_Z,
- LedId.Keyboard_X,
- LedId.Keyboard_C,
- LedId.Keyboard_V,
- LedId.Keyboard_B,
- LedId.Keyboard_N,
- LedId.Keyboard_M,
- LedId.Keyboard_CommaAndLessThan,
- LedId.Keyboard_PeriodAndBiggerThan,
- LedId.Keyboard_SlashAndQuestionMark,
- LedId.Invalid,
- LedId.Keyboard_RightShift,
- LedId.Invalid,
- LedId.Keyboard_ArrowUp,
- LedId.Invalid,
- LedId.Keyboard_Num1,
- LedId.Keyboard_Num2,
- LedId.Keyboard_Num3,
- LedId.Keyboard_NumEnter
- },
- {
- LedId.Keyboard_Macro5,
- LedId.Keyboard_LeftCtrl,
- LedId.Keyboard_LeftGui,
- LedId.Keyboard_LeftAlt,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Keyboard_Space,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Keyboard_RightAlt,
- LedId.Keyboard_Function,
- LedId.Keyboard_Application,
- LedId.Keyboard_RightCtrl,
- LedId.Keyboard_ArrowLeft,
- LedId.Keyboard_ArrowDown,
- LedId.Keyboard_ArrowRight,
- LedId.Invalid,
- LedId.Keyboard_Num0,
- LedId.Keyboard_NumPeriodAndDelete,
- LedId.Invalid
- }
+ LedId.Invalid,
+ LedId.Keyboard_Escape,
+ LedId.Invalid,
+ LedId.Keyboard_F1,
+ LedId.Keyboard_F2,
+ LedId.Keyboard_F3,
+ LedId.Keyboard_F4,
+ LedId.Keyboard_F5,
+ LedId.Keyboard_F6,
+ LedId.Keyboard_F7,
+ LedId.Keyboard_F8,
+ LedId.Keyboard_F9,
+ LedId.Keyboard_F10,
+ LedId.Keyboard_F11,
+ LedId.Keyboard_F12,
+ LedId.Keyboard_PrintScreen,
+ LedId.Keyboard_ScrollLock,
+ LedId.Keyboard_PauseBreak,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Logo,
+ LedId.Invalid,
+ LedId.Keyboard_Macro1,
+ LedId.Keyboard_GraveAccentAndTilde,
+ LedId.Keyboard_1,
+ LedId.Keyboard_2,
+ LedId.Keyboard_3,
+ LedId.Keyboard_4,
+ LedId.Keyboard_5,
+ LedId.Keyboard_6,
+ LedId.Keyboard_7,
+ LedId.Keyboard_8,
+ LedId.Keyboard_9,
+ LedId.Keyboard_0,
+ LedId.Keyboard_MinusAndUnderscore,
+ LedId.Keyboard_EqualsAndPlus,
+ LedId.Keyboard_Backspace,
+ LedId.Keyboard_Insert,
+ LedId.Keyboard_Home,
+ LedId.Keyboard_PageUp,
+ LedId.Keyboard_NumLock,
+ LedId.Keyboard_NumSlash,
+ LedId.Keyboard_NumAsterisk,
+ LedId.Keyboard_NumMinus,
+ LedId.Keyboard_Macro2,
+ LedId.Keyboard_Tab,
+ LedId.Keyboard_Q,
+ LedId.Keyboard_W,
+ LedId.Keyboard_E,
+ LedId.Keyboard_R,
+ LedId.Keyboard_T,
+ LedId.Keyboard_Y,
+ LedId.Keyboard_U,
+ LedId.Keyboard_I,
+ LedId.Keyboard_O,
+ LedId.Keyboard_P,
+ LedId.Keyboard_BracketLeft,
+ LedId.Keyboard_BracketRight,
+ LedId.Keyboard_Backslash,
+ LedId.Keyboard_Delete,
+ LedId.Keyboard_End,
+ LedId.Keyboard_PageDown,
+ LedId.Keyboard_Num7,
+ LedId.Keyboard_Num8,
+ LedId.Keyboard_Num9,
+ LedId.Keyboard_NumPlus,
+ LedId.Keyboard_Macro3,
+ LedId.Keyboard_CapsLock,
+ LedId.Keyboard_A,
+ LedId.Keyboard_S,
+ LedId.Keyboard_D,
+ LedId.Keyboard_F,
+ LedId.Keyboard_G,
+ LedId.Keyboard_H,
+ LedId.Keyboard_J,
+ LedId.Keyboard_K,
+ LedId.Keyboard_L,
+ LedId.Keyboard_SemicolonAndColon,
+ LedId.Keyboard_ApostropheAndDoubleQuote,
+ LedId.Keyboard_NonUsTilde,
+ LedId.Keyboard_Enter,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Keyboard_Num4,
+ LedId.Keyboard_Num5,
+ LedId.Keyboard_Num6,
+ LedId.Invalid,
+ LedId.Keyboard_Macro4,
+ LedId.Keyboard_LeftShift,
+ LedId.Keyboard_NonUsBackslash,
+ LedId.Keyboard_Z,
+ LedId.Keyboard_X,
+ LedId.Keyboard_C,
+ LedId.Keyboard_V,
+ LedId.Keyboard_B,
+ LedId.Keyboard_N,
+ LedId.Keyboard_M,
+ LedId.Keyboard_CommaAndLessThan,
+ LedId.Keyboard_PeriodAndBiggerThan,
+ LedId.Keyboard_SlashAndQuestionMark,
+ LedId.Invalid,
+ LedId.Keyboard_RightShift,
+ LedId.Invalid,
+ LedId.Keyboard_ArrowUp,
+ LedId.Invalid,
+ LedId.Keyboard_Num1,
+ LedId.Keyboard_Num2,
+ LedId.Keyboard_Num3,
+ LedId.Keyboard_NumEnter,
+ LedId.Keyboard_Macro5,
+ LedId.Keyboard_LeftCtrl,
+ LedId.Keyboard_LeftGui,
+ LedId.Keyboard_LeftAlt,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Keyboard_Space,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Keyboard_RightAlt,
+ LedId.Keyboard_Function,
+ LedId.Keyboard_Application,
+ LedId.Keyboard_RightCtrl,
+ LedId.Keyboard_ArrowLeft,
+ LedId.Keyboard_ArrowDown,
+ LedId.Keyboard_ArrowRight,
+ LedId.Invalid,
+ LedId.Keyboard_Num0,
+ LedId.Keyboard_NumPeriodAndDelete,
+ LedId.Invalid,
};
- public static readonly LedId[,] Mouse =
+ private static readonly LedId[] Mouse =
{
- {
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid
- },
- {
- LedId.Mouse1,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse2
- },
- {
- LedId.Mouse3,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse4,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse5
- },
- {
- LedId.Mouse6,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse7
- },
- {
- LedId.Mouse8,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse9,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse10
- },
- {
- LedId.Mouse11,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse12
- },
- {
- LedId.Mouse13,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse14
- },
- {
- LedId.Mouse15,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse16,
- LedId.Invalid,
- LedId.Invalid,
- LedId.Mouse17
- },
- {
- LedId.Invalid,
- LedId.Mouse18,
- LedId.Mouse19,
- LedId.Mouse20,
- LedId.Mouse21,
- LedId.Mouse22,
- LedId.Invalid
- }
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse1,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse2,
+ LedId.Mouse3,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse4,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse5,
+ LedId.Mouse6,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse7,
+ LedId.Mouse8,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse9,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse10,
+ LedId.Mouse11,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse12,
+ LedId.Mouse13,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse14,
+ LedId.Mouse15,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse16,
+ LedId.Invalid,
+ LedId.Invalid,
+ LedId.Mouse17,
+ LedId.Invalid,
+ LedId.Mouse18,
+ LedId.Mouse19,
+ LedId.Mouse20,
+ LedId.Mouse21,
+ LedId.Mouse22,
+ LedId.Invalid,
};
- public static readonly LedId[,] Mousepad =
+ private static readonly LedId[] Mousepad =
{
- {
- LedId.Mousepad20,
- LedId.Mousepad19,
- LedId.Mousepad18,
- LedId.Mousepad17,
- LedId.Mousepad16,
- LedId.Mousepad15,
- LedId.Mousepad14,
- LedId.Mousepad13,
- LedId.Mousepad12,
- LedId.Mousepad11,
- LedId.Mousepad10,
- LedId.Mousepad9,
- LedId.Mousepad8,
- LedId.Mousepad7,
- LedId.Mousepad6,
- LedId.Mousepad5,
- LedId.Mousepad4,
- LedId.Mousepad3,
- LedId.Mousepad2,
- LedId.Mousepad1
- }
+ LedId.Mousepad20,
+ LedId.Mousepad19,
+ LedId.Mousepad18,
+ LedId.Mousepad17,
+ LedId.Mousepad16,
+ LedId.Mousepad15,
+ LedId.Mousepad14,
+ LedId.Mousepad13,
+ LedId.Mousepad12,
+ LedId.Mousepad11,
+ LedId.Mousepad10,
+ LedId.Mousepad9,
+ LedId.Mousepad8,
+ LedId.Mousepad7,
+ LedId.Mousepad6,
+ LedId.Mousepad5,
+ LedId.Mousepad4,
+ LedId.Mousepad3,
+ LedId.Mousepad2,
+ LedId.Mousepad1,
};
- public static readonly LedId[,] Headset =
+ private static readonly LedId[] Headset =
{
- {
- LedId.Headset1,
- LedId.Headset2,
- LedId.Headset3,
- LedId.Headset4,
- LedId.Headset5
- }
+ LedId.Headset1,
+ LedId.Headset2,
+ LedId.Headset3,
+ LedId.Headset4,
+ LedId.Headset5,
};
- public static readonly LedId[,] Keypad =
+ private static readonly LedId[] Keypad =
{
- {
- LedId.Keypad1,
- LedId.Keypad2,
- LedId.Keypad3,
- LedId.Keypad4,
- LedId.Keypad5
- },
- {
- LedId.Keypad6,
- LedId.Keypad7,
- LedId.Keypad8,
- LedId.Keypad9,
- LedId.Keypad10
- },
- {
- LedId.Keypad11,
- LedId.Keypad12,
- LedId.Keypad13,
- LedId.Keypad14,
- LedId.Keypad15
- },
- {
- LedId.Keypad16,
- LedId.Keypad17,
- LedId.Keypad18,
- LedId.Keypad19,
- LedId.Keypad20
- }
+ LedId.Keypad1,
+ LedId.Keypad2,
+ LedId.Keypad3,
+ LedId.Keypad4,
+ LedId.Keypad5,
+ LedId.Keypad6,
+ LedId.Keypad7,
+ LedId.Keypad8,
+ LedId.Keypad9,
+ LedId.Keypad10,
+ LedId.Keypad11,
+ LedId.Keypad12,
+ LedId.Keypad13,
+ LedId.Keypad14,
+ LedId.Keypad15,
+ LedId.Keypad16,
+ LedId.Keypad17,
+ LedId.Keypad18,
+ LedId.Keypad19,
+ LedId.Keypad20,
};
- public static readonly LedId[,] ChromaLink =
+ private static readonly LedId[] ChromaLink =
{
- {
- LedId.LedStripe1,
- LedId.LedStripe2,
- LedId.LedStripe3,
- LedId.LedStripe4,
- LedId.LedStripe5
- }
+ LedId.LedStripe1,
+ LedId.LedStripe2,
+ LedId.LedStripe3,
+ LedId.LedStripe4,
+ LedId.LedStripe5,
};
- public static readonly Dictionary DeviceTypes = new()
+ public static LedId[] GetDeviceMap(RzDeviceType r) => r switch
{
- [RzDeviceType.Keyboard] = Keyboard,
- [RzDeviceType.Mouse] = Mouse,
- [RzDeviceType.Mousepad] = Mousepad,
- [RzDeviceType.Headset] = Headset,
- [RzDeviceType.Keypad] = Keypad,
- [RzDeviceType.ChromaLink] = ChromaLink
+ RzDeviceType.Mouse => Mouse,
+ RzDeviceType.Mousepad => Mousepad,
+ RzDeviceType.Headset => Headset,
+ RzDeviceType.Keypad => Keypad,
+ RzDeviceType.Keyboard => Keyboard,
+ RzDeviceType.ChromaLink => ChromaLink,
+ _ => throw new ArgumentOutOfRangeException(nameof(r), r, null)
};
-
- public static Dictionary Clone() => new()
- {
- [RzDeviceType.Keyboard] = (LedId[,])Keyboard.Clone(),
- [RzDeviceType.Mouse] = (LedId[,])Mouse.Clone(),
- [RzDeviceType.Mousepad] = (LedId[,])Mousepad.Clone(),
- [RzDeviceType.Headset] = (LedId[,])Headset.Clone(),
- [RzDeviceType.Keypad] = (LedId[,])Keypad.Clone(),
- [RzDeviceType.ChromaLink] = (LedId[,])ChromaLink.Clone(),
- };
-}
+}
\ No newline at end of file
diff --git a/src/Artemis.Plugins.LayerBrushes.Chroma/LayerBrushes/ChromaLayerBrush.cs b/src/Artemis.Plugins.LayerBrushes.Chroma/LayerBrushes/ChromaLayerBrush.cs
index f5301b5..ca9ac6c 100644
--- a/src/Artemis.Plugins.LayerBrushes.Chroma/LayerBrushes/ChromaLayerBrush.cs
+++ b/src/Artemis.Plugins.LayerBrushes.Chroma/LayerBrushes/ChromaLayerBrush.cs
@@ -12,16 +12,14 @@ namespace Artemis.Plugins.LayerBrushes.Chroma.LayerBrushes;
public class ChromaLayerBrush : PerLedLayerBrush
{
private readonly ChromaService _chroma;
- private readonly PluginSetting> _keyMapSetting;
private readonly Dictionary _colors;
private readonly object _lock;
private bool _shouldRender;
private bool _playingOverwatch;
- public ChromaLayerBrush(ChromaService chroma, PluginSettings pluginSettings)
+ public ChromaLayerBrush(ChromaService chroma)
{
_chroma = chroma;
- _keyMapSetting = pluginSettings.GetSetting("ChromaKeymap", DefaultChromaLedMap.Clone());
_colors = new();
_lock = new();
}
@@ -45,24 +43,23 @@ public override void DisableLayerBrush()
_chroma.AppListUpdated -= OnAppListUpdated;
}
- private void OnMatrixUpdated(object? sender, MatrixUpdatedEventArgs args)
+ private void OnMatrixUpdated(object? sender, RzDeviceType deviceType)
{
- var matrix = args.Matrix;
- var dict = _keyMapSetting.Value![args.DeviceType];
+ var dict = DefaultChromaLedMap.GetDeviceMap(deviceType);
+ var matrix = _chroma.Matrices[(int) deviceType];
lock (_lock)
{
- for (var i = 0; i < matrix.GetLength(0); i++)
+ for (var i = 0; i < matrix.Length; i++)
{
- for (var j = 0; j < matrix.GetLength(1); j++)
- {
- _colors[dict[i, j]] = matrix[i, j];
- }
+ _colors[dict[i]] = matrix[i];
}
}
}
- public override void Update(double deltaTime) { }
+ public override void Update(double deltaTime)
+ {
+ }
public override SKColor GetColor(ArtemisLed led, SKPoint renderPoint)
{
@@ -73,7 +70,7 @@ public override SKColor GetColor(ArtemisLed led, SKPoint renderPoint)
{
if (_colors.TryGetValue(led.RgbLed.Id, out var color))
return ProcessColor(color);
-
+
//According to razer docs, chromaLink1 is the "catchall" ledId. If an LED doesn't have a mapping, use this color.
if (Properties.UseDefaultLed && _colors.TryGetValue(LedId.LedStripe1, out var chromaLink1))
return ProcessColor(chromaLink1);
@@ -86,7 +83,7 @@ private SKColor ProcessColor(SKColor color)
{
if (Properties.TransparentBlack && color == SKColors.Black)
return SKColor.Empty;
-
+
if (_playingOverwatch && Properties.OverwatchEnhanceColors && OverwatchColorCorrection.ColorMap.TryGetValue(color, out var correctedColor))
return correctedColor;
diff --git a/src/Artemis.Plugins.LayerBrushes.Chroma/Module/ChromaModule.cs b/src/Artemis.Plugins.LayerBrushes.Chroma/Module/ChromaModule.cs
index 581a88e..5dcb801 100644
--- a/src/Artemis.Plugins.LayerBrushes.Chroma/Module/ChromaModule.cs
+++ b/src/Artemis.Plugins.LayerBrushes.Chroma/Module/ChromaModule.cs
@@ -66,24 +66,19 @@ private void OnAppListUpdated(object? sender, EventArgs args)
DataModel.PidList = _chroma.AppIds.Select(p => (int)p).ToList();
}
- private void OnMatrixUpdated(object? sender, MatrixUpdatedEventArgs args)
+ private void OnMatrixUpdated(object? sender, RzDeviceType deviceType)
{
- var colors = args.Matrix;
- var deviceType = args.DeviceType;
+ var colors = _chroma.Matrices[(int)deviceType];
- if (!IsPropertyInUse(deviceType.ToStringFast(), true))
- return;
+ var map = DefaultChromaLedMap.GetDeviceMap(deviceType);
- for (var row = 0; row < colors.GetLength(0); row++)
+ for (var i = 0; i < colors.Length; i++)
{
- for (var col = 0; col < colors.GetLength(1); col++)
- {
- var ledId = DefaultChromaLedMap.DeviceTypes[deviceType][row, col];
- if (ledId == LedId.Invalid)
- continue;
- var ledDataModel = _colorsCache[ledId];
- ledDataModel.Value = colors[row, col];
- }
+ var ledId = map[i];
+ if (ledId == LedId.Invalid)
+ continue;
+
+ _colorsCache[ledId].Value = colors[i];
}
}
@@ -92,19 +87,16 @@ private void CreateStructure()
DataModel.ClearDynamicChildren();
foreach (var rzDeviceType in Enum.GetValues())
{
- var deviceDataModel = DataModel.AddDynamicChild(rzDeviceType.ToString(), new ChromaDeviceDataModel());
+ var deviceDataModel = DataModel.AddDynamicChild(rzDeviceType.ToStringFast(), new ChromaDeviceDataModel());
- var map = DefaultChromaLedMap.DeviceTypes[rzDeviceType];
- for (var row = 0; row < map.GetLength(0); row++)
+ var map = DefaultChromaLedMap.GetDeviceMap(rzDeviceType);
+ for (var i = 0; i < map.Length; i++)
{
- for (var col = 0; col < map.GetLength(1); col++)
- {
- var ledId = map[row, col];
- if (ledId == LedId.Invalid)
- continue;
-
- _colorsCache.Add(ledId, deviceDataModel.Value.AddDynamicChild(ledId.ToString(), default));
- }
+ var ledId = map[i];
+ if (ledId == LedId.Invalid)
+ continue;
+
+ _colorsCache.Add(ledId, deviceDataModel.Value.AddDynamicChild(ledId.ToString(), default));
}
}
}
diff --git a/src/Artemis.Plugins.LayerBrushes.Chroma/RzDeviceType.cs b/src/Artemis.Plugins.LayerBrushes.Chroma/RzDeviceType.cs
index 15e0485..0e00e6c 100644
--- a/src/Artemis.Plugins.LayerBrushes.Chroma/RzDeviceType.cs
+++ b/src/Artemis.Plugins.LayerBrushes.Chroma/RzDeviceType.cs
@@ -1,4 +1,6 @@
-namespace Artemis.Plugins.LayerBrushes.Chroma;
+using RazerSdkReader.Structures;
+
+namespace Artemis.Plugins.LayerBrushes.Chroma;
public enum RzDeviceType
{
@@ -7,7 +9,7 @@ public enum RzDeviceType
Keypad,
Keyboard,
Headset,
- ChromaLink
+ ChromaLink,
}
public static class EnumExtensions
@@ -22,4 +24,15 @@ public static class EnumExtensions
RzDeviceType.ChromaLink => nameof(RzDeviceType.ChromaLink),
_ => value.ToString(),
};
+
+ public static int GetLength(this RzDeviceType value) => value switch
+ {
+ RzDeviceType.Mousepad => ChromaMousepad.COUNT,
+ RzDeviceType.Mouse => ChromaMouse.COUNT,
+ RzDeviceType.Keypad => ChromaKeypad.COUNT,
+ RzDeviceType.Keyboard => ChromaKeyboard.COUNT,
+ RzDeviceType.Headset => ChromaHeadset.COUNT,
+ RzDeviceType.ChromaLink => ChromaLink.COUNT,
+ _ => 0,
+ };
}
\ No newline at end of file
diff --git a/src/Artemis.Plugins.LayerBrushes.Chroma/Services/ChromaService.cs b/src/Artemis.Plugins.LayerBrushes.Chroma/Services/ChromaService.cs
index f908365..2cd3da0 100644
--- a/src/Artemis.Plugins.LayerBrushes.Chroma/Services/ChromaService.cs
+++ b/src/Artemis.Plugins.LayerBrushes.Chroma/Services/ChromaService.cs
@@ -2,6 +2,7 @@
using SkiaSharp;
using System;
using System.Collections.Generic;
+using System.Runtime.InteropServices;
using Artemis.Core;
using RazerSdkReader;
using RazerSdkReader.Structures;
@@ -10,14 +11,14 @@ namespace Artemis.Plugins.LayerBrushes.Chroma.Services;
public sealed class ChromaService : IPluginService, IDisposable
{
- private readonly Dictionary _matrices;
+ private readonly SKColor[][] _matrices;
private readonly List _apps;
private readonly List _pids;
private readonly ChromaReader _reader;
private readonly Profiler _profiler;
private readonly object _lock;
- public event EventHandler? MatrixUpdated;
+ public event EventHandler? MatrixUpdated;
public event EventHandler? AppListUpdated;
public bool IsActive => !string.IsNullOrWhiteSpace(CurrentApp) && CurrentApp != "Artemis.UI.Windows.exe";
@@ -26,13 +27,19 @@ public sealed class ChromaService : IPluginService, IDisposable
public IEnumerable AppNames => _apps;
public IEnumerable AppIds => _pids;
+ public SKColor[][] Matrices => _matrices;
+
public ChromaService(Plugin plugin)
{
_profiler = plugin.GetProfiler("Chroma Service");
_lock = new object();
- _matrices = new();
_apps = new();
_pids = new();
+
+ var deviceTypes = Enum.GetValues();
+ _matrices = new SKColor[deviceTypes.Length][];
+ for (var i = 0; i < _matrices.Length; i++)
+ _matrices[i] = new SKColor[deviceTypes[i].GetLength()];
_reader = new();
_reader.KeyboardUpdated += RazerEmulatorReaderOnKeyboardUpdated;
@@ -66,26 +73,19 @@ public ChromaService(Plugin plugin)
_profiler.StartMeasurement(profilerName);
lock (_lock)
{
- if (!_matrices.TryGetValue(deviceType, out var matrix))
- {
- matrix = new SKColor[data.Height, data.Width];
- _matrices.Add(deviceType, matrix);
- }
+ var matrix = _matrices[(int) deviceType];
+
+ Span colors = stackalloc ChromaColor[matrix.Length];
+
+ data.GetColors(colors);
- for (var i = 0; i < data.Height; i++)
+ for (var i = 0; i < colors.Length; i++)
{
- for (var j = 0; j < data.Width; j++)
- {
- // ReSharper disable once PossiblyImpureMethodCallOnReadonlyVariable
- var clr = data.GetColor(i * data.Width + j);
- matrix[i, j] = new SKColor(clr.R, clr.G, clr.B);
- }
+ var rzColor = colors[i];
+ matrix[i] = new SKColor(rzColor.R, rzColor.G, rzColor.B);
}
- MatrixUpdated?.Invoke(this, new MatrixUpdatedEventArgs
- {
- Matrix = matrix,
- DeviceType = deviceType
- });
+
+ MatrixUpdated?.Invoke(this, deviceType);
}
_profiler.StopMeasurement(profilerName);
@@ -98,12 +98,9 @@ private void UpdateAppListData(in ChromaAppData app)
CurrentAppId = app.CurrentAppId;
CurrentApp = app.CurrentAppName;
-
- var span = app.AppInfo.AsSpan();
- for (var i = 0; i < app.AppCount; i++)
+
+ foreach(ref readonly var appInfo in app.AppInfo)
{
- ref var appInfo = ref span[i];
-
_apps.Add(appInfo.AppName);
_pids.Add(appInfo.AppId);
}
diff --git a/src/Artemis.Plugins.LayerBrushes.Chroma/Services/MatrixUpdatedEventArgs.cs b/src/Artemis.Plugins.LayerBrushes.Chroma/Services/MatrixUpdatedEventArgs.cs
deleted file mode 100644
index e657af7..0000000
--- a/src/Artemis.Plugins.LayerBrushes.Chroma/Services/MatrixUpdatedEventArgs.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-using SkiaSharp;
-
-namespace Artemis.Plugins.LayerBrushes.Chroma.Services;
-
-public sealed class MatrixUpdatedEventArgs : EventArgs
-{
- public required RzDeviceType DeviceType { get; init; }
- public required SKColor[,] Matrix { get; init; }
-}
\ No newline at end of file