From f83b08af5ef586cab8de2ce3bf1e98fbef6e9f39 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Tue, 31 Jan 2017 22:06:22 +0100 Subject: [PATCH] Added layout-functionality to corsair devices --- NuGet/RGB.NET.Devices.Corsair.nuspec | 2 + .../Generic/CorsairRGBDevice.cs | 48 ++++++++++++++++--- .../Headset/CorsairHeadsetRGBDevice.cs | 13 +++-- .../Headset/CorsairHeadsetRGBDeviceInfo.cs | 5 +- .../Keyboard/CorsairKeyboardRGBDevice.cs | 11 +++-- .../Keyboard/CorsairKeyboardRGBDeviceInfo.cs | 5 +- .../Mouse/CorsairMouseRGBDevice.cs | 11 +++-- .../Mouse/CorsairMouseRGBDeviceInfo.cs | 5 +- .../Mousmat/CorsairMousematRGBDevice.cs | 11 +++-- .../Mousmat/CorsairMousematRGBDeviceInfo.cs | 5 +- .../RGB.NET.Devices.Corsair.csproj | 12 +++-- .../targets/RGB.NET.Devices.Corsair.targets | 2 +- 12 files changed, 99 insertions(+), 31 deletions(-) diff --git a/NuGet/RGB.NET.Devices.Corsair.nuspec b/NuGet/RGB.NET.Devices.Corsair.nuspec index ea390b3..c9ff2fd 100644 --- a/NuGet/RGB.NET.Devices.Corsair.nuspec +++ b/NuGet/RGB.NET.Devices.Corsair.nuspec @@ -23,6 +23,8 @@ + + diff --git a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs index d8efe6b..1eaf65d 100644 --- a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs +++ b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; using RGB.NET.Core; +using RGB.NET.Core.Layout; using RGB.NET.Devices.Corsair.Native; namespace RGB.NET.Devices.Corsair @@ -41,16 +44,49 @@ namespace RGB.NET.Devices.Corsair /// internal void Initialize() { - InitializeLeds(); - - Rectangle ledRectangle = new Rectangle(this.Select(x => x.LedRectangle)); - InternalSize = ledRectangle.Size + new Size(ledRectangle.Location.X, ledRectangle.Location.Y); + InitializeLayout(); + + if (InternalSize == null) + { + Rectangle ledRectangle = new Rectangle(this.Select(x => x.LedRectangle)); + InternalSize = ledRectangle.Size + new Size(ledRectangle.Location.X, ledRectangle.Location.Y); + } } /// - /// Initializes the of the device. + /// Initializes the and of the device. /// - protected abstract void InitializeLeds(); + protected abstract void InitializeLayout(); + + /// + /// Applies the given layout. + /// + /// The file containing the layout. + protected void ApplyLayoutFromFile(string layoutPath) + { + DeviceLayout layout = DeviceLayout.Load(layoutPath); + if (layout != null) + { + InternalSize = new Size(layout.Width, layout.Height); + + if (layout.Leds != null) + foreach (LedLayout layoutLed in layout.Leds) + { + CorsairLedIds ledId; + if (Enum.TryParse(layoutLed.Id, true, out ledId)) + { + Led led; + if (LedMapping.TryGetValue(new CorsairLedId(this, ledId), out led)) + { + led.LedRectangle.Location.X = layoutLed.X; + led.LedRectangle.Location.Y = layoutLed.Y; + led.LedRectangle.Size.Width = layoutLed.Width; + led.LedRectangle.Size.Height = layoutLed.Height; + } + } + } + } + } /// protected override void UpdateLeds(IEnumerable ledsToUpdate) diff --git a/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs b/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs index 4221cee..626193d 100644 --- a/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs +++ b/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs @@ -1,7 +1,11 @@ // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedMember.Global +using System; +using System.IO; +using System.Reflection; using RGB.NET.Core; +using RGB.NET.Core.Layout; namespace RGB.NET.Devices.Corsair { @@ -35,13 +39,14 @@ namespace RGB.NET.Devices.Corsair #region Methods - /// - /// Initializes the of the headset. - /// - protected override void InitializeLeds() + /// + protected override void InitializeLayout() { InitializeLed(new CorsairLedId(this, CorsairLedIds.LeftLogo), new Rectangle(0, 0, 10, 10)); InitializeLed(new CorsairLedId(this, CorsairLedIds.RightLogo), new Rectangle(10, 0, 10, 10)); + + ApplyLayoutFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Layouts\Corsair\Headsets\{HeadsetDeviceInfo.Model.Replace(" ", string.Empty).ToUpper()}.xml")); } #endregion diff --git a/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDeviceInfo.cs index 695d5ee..89bed5b 100644 --- a/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDeviceInfo.cs @@ -1,4 +1,6 @@ using System; +using System.IO; +using System.Reflection; using RGB.NET.Devices.Corsair.Native; namespace RGB.NET.Devices.Corsair @@ -18,7 +20,8 @@ namespace RGB.NET.Devices.Corsair internal CorsairHeadsetRGBDeviceInfo(int deviceIndex, _CorsairDeviceInfo nativeInfo) : base(deviceIndex, Core.RGBDeviceType.Headset, nativeInfo) { - Image = new Uri($"pack://application:,,,/RGB.NET.Devices.Corsair;component/Images/Headsets/{Model.Replace(" ", string.Empty).ToUpper()}.png", UriKind.Absolute); + Image = new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Images\Corsair\Headsets\{Model.Replace(" ", string.Empty).ToUpper()}.png"), UriKind.Relative); } #endregion diff --git a/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs b/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs index 6eed1b8..3e1203b 100644 --- a/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs +++ b/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs @@ -2,6 +2,8 @@ // ReSharper disable UnusedMember.Global using System; +using System.IO; +using System.Reflection; using System.Runtime.InteropServices; using RGB.NET.Core; using RGB.NET.Devices.Corsair.Native; @@ -38,10 +40,8 @@ namespace RGB.NET.Devices.Corsair #region Methods - /// - /// Initializes the of the keyboard. - /// - protected override void InitializeLeds() + /// + protected override void InitializeLayout() { _CorsairLedPositions nativeLedPositions = (_CorsairLedPositions)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositions(), typeof(_CorsairLedPositions)); @@ -57,6 +57,9 @@ namespace RGB.NET.Devices.Corsair ptr = new IntPtr(ptr.ToInt64() + structSize); } + + ApplyLayoutFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Layouts\Corsair\Keyboards\{KeyboardDeviceInfo.Model.Replace(" ", string.Empty).ToUpper()}\{KeyboardDeviceInfo.LogicalLayout.ToString().ToUpper()}.xml")); } #endregion diff --git a/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDeviceInfo.cs index 459dc6d..6b0f616 100644 --- a/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDeviceInfo.cs @@ -2,6 +2,8 @@ // ReSharper disable UnusedMember.Global using System; +using System.IO; +using System.Reflection; using RGB.NET.Devices.Corsair.Native; namespace RGB.NET.Devices.Corsair @@ -38,7 +40,8 @@ namespace RGB.NET.Devices.Corsair this.PhysicalLayout = (CorsairPhysicalKeyboardLayout)nativeInfo.physicalLayout; this.LogicalLayout = (CorsairLogicalKeyboardLayout)nativeInfo.logicalLayout; - Image = new Uri($"pack://application:,,,/RGB.NET.Devices.Corsair;component/Images/Keyboards/{Model.Replace(" ", string.Empty).ToUpper()}/{LogicalLayout.ToString().ToUpper()}.png", UriKind.Absolute); + Image = new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Images\Corsair\Keyboards\{Model.Replace(" ", string.Empty).ToUpper()}\{LogicalLayout.ToString().ToUpper()}.png"), UriKind.Absolute); } #endregion diff --git a/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs b/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs index f295703..3328c1e 100644 --- a/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs +++ b/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs @@ -1,6 +1,8 @@ // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedMember.Global +using System.IO; +using System.Reflection; using RGB.NET.Core; using RGB.NET.Core.Exceptions; @@ -36,10 +38,8 @@ namespace RGB.NET.Devices.Corsair #region Methods - /// - /// Initializes the of the mouse. - /// - protected override void InitializeLeds() + /// + protected override void InitializeLayout() { switch (MouseDeviceInfo.PhysicalLayout) { @@ -64,6 +64,9 @@ namespace RGB.NET.Devices.Corsair default: throw new RGBDeviceException($"Can't initial mouse with layout '{MouseDeviceInfo.PhysicalLayout}'"); } + + ApplyLayoutFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Layouts\Corsair\String\{MouseDeviceInfo.Model.Replace(" ", string.Empty).ToUpper()}.xml")); } #endregion diff --git a/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDeviceInfo.cs index 018067d..116ffff 100644 --- a/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDeviceInfo.cs @@ -1,4 +1,6 @@ using System; +using System.IO; +using System.Reflection; using RGB.NET.Devices.Corsair.Native; namespace RGB.NET.Devices.Corsair @@ -29,7 +31,8 @@ namespace RGB.NET.Devices.Corsair { this.PhysicalLayout = (CorsairPhysicalMouseLayout)nativeInfo.physicalLayout; - Image = new Uri($"pack://application:,,,/RGB.NET.Devices.Corsair;component/Images/Mice/{Model.Replace(" ", string.Empty).ToUpper()}.png", UriKind.Absolute); + Image = new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Images\Corsair\Mice\{Model.Replace(" ", string.Empty).ToUpper()}.png"), UriKind.Relative); } #endregion diff --git a/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDevice.cs b/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDevice.cs index 9fd238c..10dfe65 100644 --- a/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDevice.cs +++ b/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDevice.cs @@ -3,7 +3,9 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; using RGB.NET.Core; using RGB.NET.Devices.Corsair.Native; @@ -40,10 +42,8 @@ namespace RGB.NET.Devices.Corsair #region Methods - /// - /// Initializes the of the mousemat. - /// - protected override void InitializeLeds() + /// + protected override void InitializeLayout() { _CorsairLedPositions nativeLedPositions = (_CorsairLedPositions) @@ -64,6 +64,9 @@ namespace RGB.NET.Devices.Corsair foreach (_CorsairLedPosition ledPosition in positions.OrderBy(p => p.ledId)) InitializeLed(new CorsairLedId(this, ledPosition.ledId), new Rectangle(ledPosition.left, ledPosition.top, ledPosition.width, ledPosition.height)); + + ApplyLayoutFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Layouts\Corsair\Mousemat\{MousematDeviceInfo.Model.Replace(" ", string.Empty).ToUpper()}.xml")); } #endregion diff --git a/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDeviceInfo.cs index 1573439..e9c6bd0 100644 --- a/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Mousmat/CorsairMousematRGBDeviceInfo.cs @@ -1,4 +1,6 @@ using System; +using System.IO; +using System.Reflection; using RGB.NET.Devices.Corsair.Native; namespace RGB.NET.Devices.Corsair @@ -18,7 +20,8 @@ namespace RGB.NET.Devices.Corsair internal CorsairMousematRGBDeviceInfo(int deviceIndex, _CorsairDeviceInfo nativeInfo) : base(deviceIndex, Core.RGBDeviceType.Mousemat, nativeInfo) { - Image = new Uri($"pack://application:,,,/RGB.NET.Devices.Corsair;component/Images/Mousemat/{Model.Replace(" ", string.Empty).ToUpper()}.png", UriKind.Absolute); + Image = new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), + $@"Images\Corsair\Mousemat\{Model.Replace(" ", string.Empty).ToUpper()}.png"), UriKind.Relative); } #endregion diff --git a/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj b/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj index 62ab8aa..b490df5 100644 --- a/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj +++ b/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj @@ -85,10 +85,14 @@ - - - - + + + + + + + +