diff --git a/Devices/Generic/AbstractCueDevice.cs b/Devices/Generic/AbstractCueDevice.cs
index 6a71e1f..3cd9340 100644
--- a/Devices/Generic/AbstractCueDevice.cs
+++ b/Devices/Generic/AbstractCueDevice.cs
@@ -104,16 +104,21 @@ namespace CUE.NET.Devices.Generic
#region Methods
///
- /// Gets the LED-Object with the specified id.
+ /// Initializes the LED-Object with the specified id.
///
- /// The LED-Id to look for.
+ /// The LED-Id to initialize.
+ /// The rectangle representing the position of the LED to initialize.
///
- protected CorsairLed GetLed(int ledId)
+ protected CorsairLed InitializeLed(int ledId, RectangleF ledRectangle)
{
if (!Leds.ContainsKey(ledId))
- Leds.Add(ledId, new CorsairLed());
+ {
+ CorsairLed led = new CorsairLed(ledRectangle);
+ Leds.Add(ledId, led);
+ return led;
+ }
- return Leds[ledId];
+ return null;
}
///
@@ -169,7 +174,7 @@ namespace CUE.NET.Devices.Generic
public void Update(bool flushLeds = false)
{
OnUpdating();
-
+
DeviceUpdate();
ICollection ledsToUpdate = (flushLeds ? Leds : Leds.Where(x => x.Value.IsDirty)).Select(x => new LedUpateRequest(x.Key, x.Value.RequestedColor)).ToList();
@@ -186,7 +191,7 @@ namespace CUE.NET.Devices.Generic
/// Performs device specific updates.
///
protected abstract void DeviceUpdate();
-
+
private void UpdateLeds(ICollection updateRequests)
{
updateRequests = updateRequests.Where(x => x.Color != Color.Transparent).ToList();
diff --git a/Devices/Generic/CorsairLed.cs b/Devices/Generic/CorsairLed.cs
index 78f9026..ceec886 100644
--- a/Devices/Generic/CorsairLed.cs
+++ b/Devices/Generic/CorsairLed.cs
@@ -13,6 +13,11 @@ namespace CUE.NET.Devices.Generic
public class CorsairLed
{
#region Properties & Fields
+
+ ///
+ /// Gets a rectangle representing the physical location of the led.
+ ///
+ public RectangleF LedRectangle { get; }
///
/// Indicates whether the LED has changed an internal state.
@@ -55,7 +60,14 @@ namespace CUE.NET.Devices.Generic
#region Constructors
- internal CorsairLed() { }
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The rectangle representing the physical location of the led.
+ internal CorsairLed(RectangleF ledRectangle)
+ {
+ this.LedRectangle = ledRectangle;
+ }
#endregion
diff --git a/Devices/Headset/CorsairHeadset.cs b/Devices/Headset/CorsairHeadset.cs
index 9a66aea..b8bfa91 100644
--- a/Devices/Headset/CorsairHeadset.cs
+++ b/Devices/Headset/CorsairHeadset.cs
@@ -5,6 +5,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Drawing;
using System.Linq;
using CUE.NET.Devices.Generic;
using CUE.NET.Devices.Headset.Enums;
@@ -67,8 +68,8 @@ namespace CUE.NET.Devices.Headset
private void InitializeLeds()
{
- GetLed((int)CorsairHeadsetLedId.LeftLogo);
- GetLed((int)CorsairHeadsetLedId.RightLogo);
+ InitializeLed((int)CorsairHeadsetLedId.LeftLogo, new RectangleF(0, 0, 1, 1));
+ InitializeLed((int)CorsairHeadsetLedId.RightLogo, new RectangleF(1, 0, 1, 1));
}
protected override void DeviceUpdate()
diff --git a/Devices/Keyboard/CorsairKeyboard.cs b/Devices/Keyboard/CorsairKeyboard.cs
index 4aa24e3..1ad7ccb 100644
--- a/Devices/Keyboard/CorsairKeyboard.cs
+++ b/Devices/Keyboard/CorsairKeyboard.cs
@@ -64,7 +64,7 @@ namespace CUE.NET.Devices.Keyboard
///
/// The point to get the key from.
/// The key at the given point or null if no key is found.
- public CorsairKey this[PointF location] => _keys.Values.FirstOrDefault(x => x.KeyRectangle.Contains(location));
+ public CorsairKey this[PointF location] => _keys.Values.FirstOrDefault(x => x.Led.LedRectangle.Contains(location));
///
/// Gets a list of inside the given rectangle.
@@ -72,7 +72,8 @@ namespace CUE.NET.Devices.Keyboard
/// The rectangle to check.
/// The minimal percentage overlay a key must have with the to be taken into the list.
///
- public IEnumerable this[RectangleF referenceRect, float minOverlayPercentage = 0.5f] => _keys.Values.Where(x => RectangleHelper.CalculateIntersectPercentage(x.KeyRectangle, referenceRect) >= minOverlayPercentage);
+ public IEnumerable this[RectangleF referenceRect, float minOverlayPercentage = 0.5f] => _keys.Values
+ .Where(x => RectangleHelper.CalculateIntersectPercentage(x.Led.LedRectangle, referenceRect) >= minOverlayPercentage);
#endregion
@@ -120,7 +121,7 @@ namespace CUE.NET.Devices.Keyboard
this.KeyboardDeviceInfo = info;
InitializeKeys();
- KeyboardRectangle = RectangleHelper.CreateRectangleFromRectangles(this.Select(x => x.KeyRectangle));
+ KeyboardRectangle = RectangleHelper.CreateRectangleFromRectangles(this.Select(x => x.Led.LedRectangle));
}
#endregion
@@ -158,15 +159,15 @@ namespace CUE.NET.Devices.Keyboard
switch (brush.BrushCalculationMode)
{
case BrushCalculationMode.Relative:
- RectangleF brushRectangle = RectangleHelper.CreateRectangleFromRectangles(keys.Select(x => x.KeyRectangle));
+ RectangleF brushRectangle = RectangleHelper.CreateRectangleFromRectangles(keys.Select(x => x.Led.LedRectangle));
float offsetX = -brushRectangle.X;
float offsetY = -brushRectangle.Y;
brushRectangle.X = 0;
brushRectangle.Y = 0;
- brush.PerformRender(brushRectangle, keys.Select(x => new BrushRenderTarget(x.KeyId, x.KeyRectangle.GetCenter(offsetX, offsetY))));
+ brush.PerformRender(brushRectangle, keys.Select(x => new BrushRenderTarget(x.KeyId, x.Led.LedRectangle.GetCenter(offsetX, offsetY))));
break;
case BrushCalculationMode.Absolute:
- brush.PerformRender(KeyboardRectangle, keys.Select(x => new BrushRenderTarget(x.KeyId, x.KeyRectangle.GetCenter())));
+ brush.PerformRender(KeyboardRectangle, keys.Select(x => new BrushRenderTarget(x.KeyId, x.Led.LedRectangle.GetCenter())));
break;
default:
throw new ArgumentException();
@@ -181,7 +182,7 @@ namespace CUE.NET.Devices.Keyboard
// ReSharper disable once CatchAllClause
catch (Exception ex) { OnException(ex); }
}
-
+
///
/// Gets a list containing all LEDs of this group.
///
@@ -236,9 +237,8 @@ namespace CUE.NET.Devices.Keyboard
for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
{
_CorsairLedPosition ledPosition = (_CorsairLedPosition)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
- CorsairLed led = GetLed((int)ledPosition.ledId);
- _keys.Add(ledPosition.ledId, new CorsairKey(ledPosition.ledId, led,
- new RectangleF((float)ledPosition.left, (float)ledPosition.top, (float)ledPosition.width, (float)ledPosition.height)));
+ CorsairLed led = InitializeLed((int)ledPosition.ledId, new RectangleF((float)ledPosition.left, (float)ledPosition.top, (float)ledPosition.width, (float)ledPosition.height));
+ _keys.Add(ledPosition.ledId, new CorsairKey(ledPosition.ledId, led));
ptr = new IntPtr(ptr.ToInt64() + structSize);
}
@@ -273,7 +273,7 @@ namespace CUE.NET.Devices.Keyboard
}
#endregion
-
+
#region IEnumerable
///
diff --git a/Devices/Keyboard/Keys/CorsairKey.cs b/Devices/Keyboard/Keys/CorsairKey.cs
index 1cb799f..3410fd1 100644
--- a/Devices/Keyboard/Keys/CorsairKey.cs
+++ b/Devices/Keyboard/Keys/CorsairKey.cs
@@ -24,11 +24,6 @@ namespace CUE.NET.Devices.Keyboard.Keys
///
public CorsairLed Led { get; }
- ///
- /// Gets a rectangle representing the physical location of the key.
- ///
- public RectangleF KeyRectangle { get; }
-
#endregion
#region Constructors
@@ -38,12 +33,10 @@ namespace CUE.NET.Devices.Keyboard.Keys
///
/// The key-ID of the key.
/// The LED of the key.
- /// The rectangle representing the physical location of the key.
- internal CorsairKey(CorsairKeyboardKeyId keyId, CorsairLed led, RectangleF keyRectangle)
+ internal CorsairKey(CorsairKeyboardKeyId keyId, CorsairLed led)
{
this.KeyId = keyId;
this.Led = led;
- this.KeyRectangle = keyRectangle;
}
#endregion
diff --git a/Devices/Keyboard/Keys/RectangleKeyGroup.cs b/Devices/Keyboard/Keys/RectangleKeyGroup.cs
index c2a175c..45015ba 100644
--- a/Devices/Keyboard/Keys/RectangleKeyGroup.cs
+++ b/Devices/Keyboard/Keys/RectangleKeyGroup.cs
@@ -65,7 +65,7 @@ namespace CUE.NET.Devices.Keyboard.Keys
/// (optional) The minimal percentage overlay a key must have with the to be taken into the keygroup. (default: 0.5f)
/// (optional) Specifies whether this group should be automatically attached or not. (default: true)
public RectangleKeyGroup(CorsairKeyboard keyboard, CorsairKey fromKey, CorsairKey toKey, float minOverlayPercentage = 0.5f, bool autoAttach = true)
- : this(keyboard, RectangleHelper.CreateRectangleFromRectangles(fromKey.KeyRectangle, toKey.KeyRectangle), minOverlayPercentage, autoAttach)
+ : this(keyboard, RectangleHelper.CreateRectangleFromRectangles(fromKey.Led.LedRectangle, toKey.Led.LedRectangle), minOverlayPercentage, autoAttach)
{ }
///
@@ -104,7 +104,7 @@ namespace CUE.NET.Devices.Keyboard.Keys
/// The list containing the keys.
protected override IList GetGroupKeys()
{
- return _keyCache ?? (_keyCache = Keyboard.Where(x => RectangleHelper.CalculateIntersectPercentage(x.KeyRectangle, Rectangle) >= MinOverlayPercentage).ToList());
+ return _keyCache ?? (_keyCache = Keyboard.Where(x => RectangleHelper.CalculateIntersectPercentage(x.Led.LedRectangle, Rectangle) >= MinOverlayPercentage).ToList());
}
#endregion
diff --git a/Devices/Mouse/CorsairMouse.cs b/Devices/Mouse/CorsairMouse.cs
index d063cee..46501b6 100644
--- a/Devices/Mouse/CorsairMouse.cs
+++ b/Devices/Mouse/CorsairMouse.cs
@@ -5,6 +5,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Drawing;
using System.Linq;
using CUE.NET.Devices.Generic;
using CUE.NET.Devices.Mouse.Enums;
@@ -72,22 +73,22 @@ namespace CUE.NET.Devices.Mouse
switch (MouseDeviceInfo.PhysicalLayout)
{
case CorsairPhysicalMouseLayout.Zones1:
- GetLed((int)CorsairMouseLedId.B1);
+ InitializeLed((int)CorsairMouseLedId.B1, new RectangleF(0, 0, 1, 1));
break;
case CorsairPhysicalMouseLayout.Zones2:
- GetLed((int)CorsairMouseLedId.B1);
- GetLed((int)CorsairMouseLedId.B2);
+ InitializeLed((int)CorsairMouseLedId.B1, new RectangleF(0, 0, 1, 1));
+ InitializeLed((int)CorsairMouseLedId.B2, new RectangleF(1, 0, 1, 1));
break;
case CorsairPhysicalMouseLayout.Zones3:
- GetLed((int)CorsairMouseLedId.B1);
- GetLed((int)CorsairMouseLedId.B2);
- GetLed((int)CorsairMouseLedId.B3);
+ InitializeLed((int)CorsairMouseLedId.B1, new RectangleF(0, 0, 1, 1));
+ InitializeLed((int)CorsairMouseLedId.B2, new RectangleF(1, 0, 1, 1));
+ InitializeLed((int)CorsairMouseLedId.B3, new RectangleF(2, 0, 1, 1));
break;
case CorsairPhysicalMouseLayout.Zones4:
- GetLed((int)CorsairMouseLedId.B1);
- GetLed((int)CorsairMouseLedId.B2);
- GetLed((int)CorsairMouseLedId.B3);
- GetLed((int)CorsairMouseLedId.B4);
+ InitializeLed((int)CorsairMouseLedId.B1, new RectangleF(0, 0, 1, 1));
+ InitializeLed((int)CorsairMouseLedId.B2, new RectangleF(1, 0, 1, 1));
+ InitializeLed((int)CorsairMouseLedId.B3, new RectangleF(2, 0, 1, 1));
+ InitializeLed((int)CorsairMouseLedId.B4, new RectangleF(3, 0, 1, 1));
break;
default:
throw new WrapperException($"Can't initial mouse with layout '{MouseDeviceInfo.PhysicalLayout}'");
diff --git a/Devices/Mousemat/CorsairMousemat.cs b/Devices/Mousemat/CorsairMousemat.cs
index 1536dea..cf538ad 100644
--- a/Devices/Mousemat/CorsairMousemat.cs
+++ b/Devices/Mousemat/CorsairMousemat.cs
@@ -12,7 +12,6 @@ using System.Runtime.InteropServices;
using CUE.NET.Devices.Generic;
using CUE.NET.Devices.Generic.Enums;
using CUE.NET.Devices.Mousemat.Enums;
-using CUE.NET.Effects;
using CUE.NET.Exceptions;
using CUE.NET.Native;
@@ -47,7 +46,7 @@ namespace CUE.NET.Devices.Mousemat
/// Gets specific information provided by CUE for the mousemat.
///
public CorsairMousematDeviceInfo MousematDeviceInfo { get; }
-
+
///
/// Gets a read-only collection containing all LEDs of the mousemat.
///
@@ -105,8 +104,8 @@ namespace CUE.NET.Devices.Mousemat
}
// Sort for easy iteration by clients
- foreach (_CorsairLedPosition position in positions.OrderBy(p => p.ledId))
- GetLed((int)position.ledId);
+ foreach (_CorsairLedPosition ledPosition in positions.OrderBy(p => p.ledId))
+ InitializeLed((int)ledPosition.ledId, new RectangleF((float)ledPosition.left, (float)ledPosition.top, (float)ledPosition.width, (float)ledPosition.height));
}
protected override void DeviceUpdate()