mirror of
https://github.com/DarthAffe/CUE.NET.git
synced 2026-11-11 13:06:24 +00:00
Changed color-control to brushes, improved keygroups
This commit is contained in:
1 parent
02aaf24c41
commit
0a47642c38
11 files changed
+106
-73
No files matched your search
@@ -4,6 +4,6 @@ namespace CUE.NET.Devices.Keyboard.ColorBrushes
|
||||
{
|
||||
public interface IBrush
|
||||
{
|
||||
Color GetColorAtPoint(Point point);
|
||||
Color GetColorAtPoint(RectangleF rectangle, PointF point);
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ namespace CUE.NET.Devices.Keyboard.ColorBrushes
|
||||
|
||||
#region Methods
|
||||
|
||||
public Color GetColorAtPoint(Point point)
|
||||
public Color GetColorAtPoint(RectangleF rectangle, PointF point)
|
||||
{
|
||||
return Color; // A solid color brush returns the same color no matter the point
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using CUE.NET.Devices.Generic;
|
||||
using CUE.NET.Devices.Keyboard.ColorBrushes;
|
||||
using CUE.NET.Devices.Keyboard.Enums;
|
||||
using CUE.NET.Devices.Keyboard.Keys;
|
||||
using CUE.NET.Helper;
|
||||
@@ -52,7 +53,7 @@ namespace CUE.NET.Devices.Keyboard
|
||||
|
||||
public IEnumerable<CorsairKey> Keys => new ReadOnlyCollection<CorsairKey>(_keys.Values.ToList());
|
||||
|
||||
public Color Color { get; set; } = Color.Transparent;
|
||||
public IBrush Brush { get; set; }
|
||||
|
||||
private readonly IList<IKeyGroup> _keyGroups = new List<IKeyGroup>();
|
||||
|
||||
@@ -66,7 +67,7 @@ namespace CUE.NET.Devices.Keyboard
|
||||
this.KeyboardDeviceInfo = info;
|
||||
|
||||
InitializeKeys();
|
||||
CalculateKeyboardRectangle();
|
||||
KeyboardRectangle = RectangleHelper.CreateRectangleFromRectangles(this.Select(x => x.KeyRectangle));
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -75,23 +76,26 @@ namespace CUE.NET.Devices.Keyboard
|
||||
|
||||
public override void UpdateLeds(bool forceUpdate = false)
|
||||
{
|
||||
// Apply all KeyGroups first
|
||||
// Update only 'clean' leds, manual set should always override groups
|
||||
IEnumerable<CorsairKey> cleanKeys = this.Where(x => !x.Led.IsUpdated).ToList();
|
||||
// Apply all KeyGroups
|
||||
|
||||
if (Color != Color.Transparent)
|
||||
foreach (CorsairKey key in cleanKeys)
|
||||
key.Led.Color = Color;
|
||||
if (Brush != null)
|
||||
ApplyBrush(this.ToList(), Brush);
|
||||
|
||||
//TODO DarthAffe 20.09.2015: Add some sort of priority
|
||||
foreach (IKeyGroup keyGroup in _keyGroups)
|
||||
foreach (CorsairKey key in keyGroup.Keys.Where(key => cleanKeys.Contains(key)))
|
||||
key.Led.Color = keyGroup.Color;
|
||||
ApplyBrush(keyGroup.Keys.ToList(), keyGroup.Brush);
|
||||
|
||||
// Perform 'real' update
|
||||
base.UpdateLeds(forceUpdate);
|
||||
}
|
||||
|
||||
private void ApplyBrush(ICollection<CorsairKey> keys, IBrush brush)
|
||||
{
|
||||
RectangleF brushRectangle = RectangleHelper.CreateRectangleFromRectangles(keys.Select(x => x.KeyRectangle));
|
||||
foreach (CorsairKey key in keys)
|
||||
key.Led.Color = brush.GetColorAtPoint(brushRectangle, key.KeyRectangle.GetCenter());
|
||||
}
|
||||
|
||||
public bool AttachKeyGroup(IKeyGroup keyGroup)
|
||||
{
|
||||
if (keyGroup == null || _keyGroups.Contains(keyGroup)) return false;
|
||||
@@ -124,24 +128,6 @@ namespace CUE.NET.Devices.Keyboard
|
||||
}
|
||||
}
|
||||
|
||||
private void CalculateKeyboardRectangle()
|
||||
{
|
||||
float posX = float.MaxValue;
|
||||
float posY = float.MaxValue;
|
||||
float posX2 = float.MinValue;
|
||||
float posY2 = float.MinValue;
|
||||
|
||||
foreach (CorsairKey key in this)
|
||||
{
|
||||
posX = Math.Min(posX, key.KeyRectangle.X);
|
||||
posY = Math.Min(posY, key.KeyRectangle.Y);
|
||||
posX2 = Math.Max(posX2, key.KeyRectangle.X + key.KeyRectangle.Width);
|
||||
posY2 = Math.Max(posY2, key.KeyRectangle.Y + key.KeyRectangle.Height);
|
||||
}
|
||||
|
||||
KeyboardRectangle = RectangleHelper.CreateRectangleFromPoints(new PointF(posX, posY), new PointF(posX2, posY2));
|
||||
}
|
||||
|
||||
#region IEnumerable
|
||||
|
||||
public IEnumerator<CorsairKey> GetEnumerator()
|
||||
|
||||
@@ -6,28 +6,28 @@ namespace CUE.NET.Devices.Keyboard.Extensions
|
||||
{
|
||||
public static class KeyGroupExtension
|
||||
{
|
||||
public static SimpleKeyGroup ToSimpleKeyGroup(this BaseKeyGroup keyGroup)
|
||||
public static ListKeyGroup ToSimpleKeyGroup(this BaseKeyGroup keyGroup)
|
||||
{
|
||||
SimpleKeyGroup simpleKeyGroup = keyGroup as SimpleKeyGroup;
|
||||
ListKeyGroup simpleKeyGroup = keyGroup as ListKeyGroup;
|
||||
if (simpleKeyGroup == null)
|
||||
{
|
||||
bool wasAttached = keyGroup.Detach();
|
||||
simpleKeyGroup = new SimpleKeyGroup(keyGroup.Keyboard, wasAttached, keyGroup.Keys.ToArray()) { Color = keyGroup.Color };
|
||||
simpleKeyGroup = new ListKeyGroup(keyGroup.Keyboard, wasAttached, keyGroup.Keys.ToArray()) { Brush = keyGroup.Brush };
|
||||
}
|
||||
return simpleKeyGroup;
|
||||
}
|
||||
|
||||
public static SimpleKeyGroup Exclude(this BaseKeyGroup keyGroup, params CorsairKeyboardKeyId[] keyIds)
|
||||
public static ListKeyGroup Exclude(this BaseKeyGroup keyGroup, params CorsairKeyboardKeyId[] keyIds)
|
||||
{
|
||||
SimpleKeyGroup simpleKeyGroup = keyGroup.ToSimpleKeyGroup();
|
||||
ListKeyGroup simpleKeyGroup = keyGroup.ToSimpleKeyGroup();
|
||||
foreach (CorsairKeyboardKeyId keyId in keyIds)
|
||||
simpleKeyGroup.RemoveKey(keyId);
|
||||
return simpleKeyGroup;
|
||||
}
|
||||
|
||||
public static SimpleKeyGroup Exclude(this BaseKeyGroup keyGroup, params CorsairKey[] keyIds)
|
||||
public static ListKeyGroup Exclude(this BaseKeyGroup keyGroup, params CorsairKey[] keyIds)
|
||||
{
|
||||
SimpleKeyGroup simpleKeyGroup = keyGroup.ToSimpleKeyGroup();
|
||||
ListKeyGroup simpleKeyGroup = keyGroup.ToSimpleKeyGroup();
|
||||
foreach (CorsairKey key in keyIds)
|
||||
simpleKeyGroup.RemoveKey(key);
|
||||
return simpleKeyGroup;
|
||||
|
||||
@@ -1,20 +1,19 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Drawing;
|
||||
using CUE.NET.Devices.Keyboard.ColorBrushes;
|
||||
using CUE.NET.Devices.Keyboard.Extensions;
|
||||
|
||||
namespace CUE.NET.Devices.Keyboard.Keys
|
||||
{
|
||||
public class BaseKeyGroup : IKeyGroup
|
||||
public abstract class BaseKeyGroup : IKeyGroup
|
||||
{
|
||||
#region Properties & Fields
|
||||
|
||||
internal CorsairKeyboard Keyboard { get; }
|
||||
|
||||
public IEnumerable<CorsairKey> Keys => new ReadOnlyCollection<CorsairKey>(GroupKeys);
|
||||
protected IList<CorsairKey> GroupKeys { get; } = new List<CorsairKey>();
|
||||
public IEnumerable<CorsairKey> Keys => new ReadOnlyCollection<CorsairKey>(GetGroupKeys());
|
||||
|
||||
public Color Color { get; set; } = Color.Transparent;
|
||||
public IBrush Brush { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -28,6 +27,8 @@ namespace CUE.NET.Devices.Keyboard.Keys
|
||||
this.Attach();
|
||||
}
|
||||
|
||||
protected abstract IList<CorsairKey> GetGroupKeys();
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using CUE.NET.Devices.Keyboard.ColorBrushes;
|
||||
|
||||
namespace CUE.NET.Devices.Keyboard.Keys
|
||||
{
|
||||
@@ -7,6 +7,6 @@ namespace CUE.NET.Devices.Keyboard.Keys
|
||||
{
|
||||
IEnumerable<CorsairKey> Keys { get; }
|
||||
|
||||
Color Color { get; set; }
|
||||
IBrush Brush { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,30 +1,37 @@
|
||||
using CUE.NET.Devices.Keyboard.Enums;
|
||||
using System.Collections.Generic;
|
||||
using CUE.NET.Devices.Keyboard.Enums;
|
||||
|
||||
namespace CUE.NET.Devices.Keyboard.Keys
|
||||
{
|
||||
public class SimpleKeyGroup : BaseKeyGroup
|
||||
public class ListKeyGroup : BaseKeyGroup
|
||||
{
|
||||
#region Properties & Fields
|
||||
|
||||
protected IList<CorsairKey> GroupKeys { get; } = new List<CorsairKey>();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public SimpleKeyGroup(CorsairKeyboard keyboard, bool autoAttach = true)
|
||||
public ListKeyGroup(CorsairKeyboard keyboard, bool autoAttach = true)
|
||||
: base(keyboard, autoAttach)
|
||||
{ }
|
||||
|
||||
public SimpleKeyGroup(CorsairKeyboard keyboard, params CorsairKey[] keys)
|
||||
public ListKeyGroup(CorsairKeyboard keyboard, params CorsairKey[] keys)
|
||||
: this(keyboard, true, keys)
|
||||
{ }
|
||||
|
||||
public SimpleKeyGroup(CorsairKeyboard keyboard, bool autoAttach, params CorsairKey[] keys)
|
||||
public ListKeyGroup(CorsairKeyboard keyboard, bool autoAttach, params CorsairKey[] keys)
|
||||
: base(keyboard, autoAttach)
|
||||
{
|
||||
AddKey(keys);
|
||||
}
|
||||
|
||||
public SimpleKeyGroup(CorsairKeyboard keyboard, params CorsairKeyboardKeyId[] keys)
|
||||
public ListKeyGroup(CorsairKeyboard keyboard, params CorsairKeyboardKeyId[] keys)
|
||||
: this(keyboard, true, keys)
|
||||
{ }
|
||||
|
||||
public SimpleKeyGroup(CorsairKeyboard keyboard, bool autoAttach, params CorsairKeyboardKeyId[] keys)
|
||||
public ListKeyGroup(CorsairKeyboard keyboard, bool autoAttach, params CorsairKeyboardKeyId[] keys)
|
||||
: base(keyboard, autoAttach)
|
||||
{
|
||||
AddKey(keys);
|
||||
@@ -82,6 +89,12 @@ namespace CUE.NET.Devices.Keyboard.Keys
|
||||
GroupKeys.Add(key);
|
||||
}
|
||||
|
||||
|
||||
protected override IList<CorsairKey> GetGroupKeys()
|
||||
{
|
||||
return GroupKeys;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Drawing;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using CUE.NET.Devices.Keyboard.Enums;
|
||||
using CUE.NET.Helper;
|
||||
@@ -9,8 +10,8 @@ namespace CUE.NET.Devices.Keyboard.Keys
|
||||
{
|
||||
#region Properties & Fields
|
||||
|
||||
public RectangleF RequestedRectangle { get; }
|
||||
public float MinOverlayPercentage { get; }
|
||||
public RectangleF Rectangle { get; set; }
|
||||
public float MinOverlayPercentage { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -28,20 +29,22 @@ namespace CUE.NET.Devices.Keyboard.Keys
|
||||
: this(keyboard, RectangleHelper.CreateRectangleFromPoints(fromPoint, toPoint), minOverlayPercentage, autoAttach)
|
||||
{ }
|
||||
|
||||
public RectangleKeyGroup(CorsairKeyboard keyboard, RectangleF requestedRectangle, float minOverlayPercentage = 0.5f, bool autoAttach = true)
|
||||
public RectangleKeyGroup(CorsairKeyboard keyboard, RectangleF rectangle, float minOverlayPercentage = 0.5f, bool autoAttach = true)
|
||||
: base(keyboard, autoAttach)
|
||||
{
|
||||
this.RequestedRectangle = requestedRectangle;
|
||||
this.Rectangle = rectangle;
|
||||
this.MinOverlayPercentage = minOverlayPercentage;
|
||||
|
||||
foreach (CorsairKey key in Keyboard.Where(x => RectangleHelper.CalculateIntersectPercentage(x.KeyRectangle, requestedRectangle) >= minOverlayPercentage))
|
||||
GroupKeys.Add(key);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
protected override IList<CorsairKey> GetGroupKeys()
|
||||
{
|
||||
return Keyboard.Where(x => RectangleHelper.CalculateIntersectPercentage(x.KeyRectangle, Rectangle) >= MinOverlayPercentage).ToList();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user