diff --git a/Devices/Keyboard/CorsairKeyboard.cs b/Devices/Keyboard/CorsairKeyboard.cs index 365a6d5..a48dc75 100644 --- a/Devices/Keyboard/CorsairKeyboard.cs +++ b/Devices/Keyboard/CorsairKeyboard.cs @@ -51,6 +51,7 @@ namespace CUE.NET.Devices.Keyboard public CorsairKeyboardDeviceInfo KeyboardDeviceInfo { get; } public RectangleF KeyboardRectangle { get; private set; } public IBrush Brush { get; set; } + public int ZIndex { get; set; } = 0; protected override bool HasEffect { @@ -89,13 +90,25 @@ namespace CUE.NET.Devices.Keyboard base.Update(flushLeds); } + private void UpdateKeyGroups() + { + if (Brush != null) + ApplyBrush(this.ToList(), Brush); + + lock (_keyGroups) + { + foreach (IKeyGroup keyGroup in _keyGroups.OrderBy(x => x.ZIndex)) + ApplyBrush(keyGroup.Keys.ToList(), keyGroup.Brush); + } + } + private void UpdateEffects() { List effectsToRemove = new List(); lock (_effects) { long currentTicks = DateTime.Now.Ticks; - foreach (EffectTimeContainer effect in _effects) + foreach (EffectTimeContainer effect in _effects.OrderBy(x => x.ZIndex)) { try { @@ -116,6 +129,7 @@ namespace CUE.NET.Devices.Keyboard if (effect.Effect.IsDone) effectsToRemove.Add(effect.Effect); } + // ReSharper disable once CatchAllClause catch (Exception ex) { ManageException(ex); } } } @@ -124,19 +138,6 @@ namespace CUE.NET.Devices.Keyboard DetachEffect(effect); } - private void UpdateKeyGroups() - { - if (Brush != null) - ApplyBrush(this.ToList(), Brush); - - lock (_keyGroups) - { - //TODO DarthAffe 20.09.2015: Add some sort of priority - foreach (IKeyGroup keyGroup in _keyGroups) - ApplyBrush(keyGroup.Keys.ToList(), keyGroup.Brush); - } - } - // ReSharper disable once MemberCanBeMadeStatic.Local - idc private void ApplyBrush(ICollection keys, IBrush brush) { @@ -146,6 +147,7 @@ namespace CUE.NET.Devices.Keyboard foreach (CorsairKey key in keys) key.Led.Color = brush.GetColorAtPoint(brushRectangle, key.KeyRectangle.GetCenter()); } + // ReSharper disable once CatchAllClause catch (Exception ex) { ManageException(ex); } } diff --git a/Devices/Keyboard/Effects/AbstractEffect.cs b/Devices/Keyboard/Effects/AbstractEffect.cs index 25268b0..ebc8bf7 100644 --- a/Devices/Keyboard/Effects/AbstractEffect.cs +++ b/Devices/Keyboard/Effects/AbstractEffect.cs @@ -11,9 +11,11 @@ namespace CUE.NET.Devices.Keyboard.Effects { #region Properties & Fields + public IEnumerable KeyList { get; protected set; } + public abstract IBrush EffectBrush { get; } - public IEnumerable KeyList { get; protected set; } + public int ZIndex { get; set; } = 0; public bool IsDone { get; protected set; } diff --git a/Devices/Keyboard/Effects/EffectTimeContainer.cs b/Devices/Keyboard/Effects/EffectTimeContainer.cs index ea32de4..643d9f3 100644 --- a/Devices/Keyboard/Effects/EffectTimeContainer.cs +++ b/Devices/Keyboard/Effects/EffectTimeContainer.cs @@ -11,6 +11,8 @@ namespace CUE.NET.Devices.Keyboard.Effects internal long TicksAtLastUpdate { get; set; } + internal int ZIndex => Effect?.ZIndex ?? 0; + #endregion #region Constructors diff --git a/Devices/Keyboard/Effects/IEffect.cs b/Devices/Keyboard/Effects/IEffect.cs index 9f166aa..1805ba6 100644 --- a/Devices/Keyboard/Effects/IEffect.cs +++ b/Devices/Keyboard/Effects/IEffect.cs @@ -8,9 +8,11 @@ namespace CUE.NET.Devices.Keyboard.Effects { #region Properties & Fields + IEnumerable KeyList { get; } + IBrush EffectBrush { get; } - IEnumerable KeyList { get; } + int ZIndex { get; set; } bool IsDone { get; } diff --git a/Devices/Keyboard/Keys/BaseKeyGroup.cs b/Devices/Keyboard/Keys/BaseKeyGroup.cs index bb39884..6e8eb70 100644 --- a/Devices/Keyboard/Keys/BaseKeyGroup.cs +++ b/Devices/Keyboard/Keys/BaseKeyGroup.cs @@ -15,6 +15,8 @@ namespace CUE.NET.Devices.Keyboard.Keys public IBrush Brush { get; set; } + public int ZIndex { get; set; } = 0; + #endregion #region Constructors diff --git a/Devices/Keyboard/Keys/IKeyGroup.cs b/Devices/Keyboard/Keys/IKeyGroup.cs index 4fbc569..eb270e9 100644 --- a/Devices/Keyboard/Keys/IKeyGroup.cs +++ b/Devices/Keyboard/Keys/IKeyGroup.cs @@ -8,5 +8,7 @@ namespace CUE.NET.Devices.Keyboard.Keys IEnumerable Keys { get; } IBrush Brush { get; set; } + + int ZIndex { get; set; } } }