diff --git a/RGB.NET.Devices.Logitech/Enum/LogitechLedIds.cs b/RGB.NET.Devices.Logitech/Enum/LogitechLedIds.cs index d82f868..f3edfd0 100644 --- a/RGB.NET.Devices.Logitech/Enum/LogitechLedIds.cs +++ b/RGB.NET.Devices.Logitech/Enum/LogitechLedIds.cs @@ -26,6 +26,7 @@ namespace RGB.NET.Devices.Logitech PRINT_SCREEN = 0x137, SCROLL_LOCK = 0x46, PAUSE_BREAK = 0x45, + TILDE = 0x29, ONE = 0x02, TWO = 0x03, @@ -47,6 +48,7 @@ namespace RGB.NET.Devices.Logitech NUM_SLASH = 0x135, NUM_ASTERISK = 0x37, NUM_MINUS = 0x4A, + TAB = 0x0F, Q = 0x10, W = 0x11, @@ -68,6 +70,7 @@ namespace RGB.NET.Devices.Logitech NUM_EIGHT = 0x48, NUM_NINE = 0x49, NUM_PLUS = 0x4E, + CAPS_LOCK = 0x3A, A = 0x1E, S = 0x1F, @@ -80,10 +83,12 @@ namespace RGB.NET.Devices.Logitech L = 0x26, SEMICOLON = 0x27, APOSTROPHE = 0x28, + NonUsTilde = 0xFF, //TODO DarthAffe 26.03.2017: Find the real ID/Name of this key - it's not documented ... ENTER = 0x1C, NUM_FOUR = 0x4B, NUM_FIVE = 0x4C, NUM_SIX = 0x4D, + LEFT_SHIFT = 0x2A, Z = 0x2C, X = 0x2D, @@ -101,6 +106,7 @@ namespace RGB.NET.Devices.Logitech NUM_TWO = 0x50, NUM_THREE = 0x51, NUM_ENTER = 0x11C, + LEFT_CONTROL = 0x1D, LEFT_WINDOWS = 0x15B, LEFT_ALT = 0x38, @@ -114,6 +120,7 @@ namespace RGB.NET.Devices.Logitech ARROW_RIGHT = 0x14D, NUM_ZERO = 0x52, NUM_PERIOD = 0x53, + G_1 = 0xFFF1, G_2 = 0xFFF2, G_3 = 0xFFF3, diff --git a/RGB.NET.Devices.Logitech/Generic/LogitechRGBDevice.cs b/RGB.NET.Devices.Logitech/Generic/LogitechRGBDevice.cs index 8336467..12dd8ad 100644 --- a/RGB.NET.Devices.Logitech/Generic/LogitechRGBDevice.cs +++ b/RGB.NET.Devices.Logitech/Generic/LogitechRGBDevice.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using RGB.NET.Core; using RGB.NET.Core.Layout; @@ -59,11 +60,15 @@ namespace RGB.NET.Devices.Logitech /// Applies the given layout. /// /// The file containing the layout. - protected void ApplyLayoutFromFile(string layoutPath) + /// The name of the layout used tp get the images of the leds. + /// The path images for this device are collected in. + protected void ApplyLayoutFromFile(string layoutPath, string imageLayout, string imageBasePath) { DeviceLayout layout = DeviceLayout.Load(layoutPath); if (layout != null) { + LedImageLayout ledImageLayout = layout.LedImageLayouts.FirstOrDefault(x => string.Equals(x.Layout, imageLayout, StringComparison.OrdinalIgnoreCase)); + InternalSize = new Size(layout.Width, layout.Height); if (layout.Leds != null) @@ -83,6 +88,12 @@ namespace RGB.NET.Devices.Logitech led.LedRectangle.Size.Height = layoutLed.Height; led.Shape = layoutLed.Shape; + led.ShapeData = layoutLed.ShapeData; + + LedImage image = ledImageLayout?.LedImages.FirstOrDefault(x => x.Id == layoutLed.Id); + led.Image = (!string.IsNullOrEmpty(image?.Image)) + ? new Uri(Path.Combine(imageBasePath, image.Image), UriKind.Absolute) + : new Uri(Path.Combine(imageBasePath, "Missing.png"), UriKind.Absolute); } } } @@ -91,13 +102,31 @@ namespace RGB.NET.Devices.Logitech /// protected override void UpdateLeds(IEnumerable ledsToUpdate) { + _LogitechGSDK.LogiLedSetTargetDevice(LogitechDeviceCaps.PerKeyRGB); + List leds = ledsToUpdate.Where(x => x.Color.A > 0).ToList(); + byte[] bitmap = null; foreach (Led led in leds) - _LogitechGSDK.LogiLedSetLightingForKeyWithKeyName((int)((LogitechLedId)led.Id).LedId, - (int)Math.Round(led.Color.RPercent * 100), - (int)Math.Round(led.Color.GPercent * 100), - (int)Math.Round(led.Color.BPercent * 100)); + { + //TODO DarthAffe 26.03.2017: This is only needed since update by name doesn't work as expected for all keys ... + int bitmapOffset; + if (BitmapMapping.BitmapOffset.TryGetValue(((LogitechLedId)led.Id).LedId, out bitmapOffset)) + { + if (bitmap == null) + bitmap = BitmapMapping.CreateBitmap(); + + BitmapMapping.SetColor(ref bitmap, bitmapOffset, led.Color); + } + else + _LogitechGSDK.LogiLedSetLightingForKeyWithKeyName((int)((LogitechLedId)led.Id).LedId, + (int)Math.Round(led.Color.RPercent * 100), + (int)Math.Round(led.Color.GPercent * 100), + (int)Math.Round(led.Color.BPercent * 100)); + } + + if (bitmap != null) + _LogitechGSDK.LogiLedSetLightingFromBitmap(bitmap); } #endregion diff --git a/RGB.NET.Devices.Logitech/HID/DeviceChecker.cs b/RGB.NET.Devices.Logitech/HID/DeviceChecker.cs index 8a753f1..14ff155 100644 --- a/RGB.NET.Devices.Logitech/HID/DeviceChecker.cs +++ b/RGB.NET.Devices.Logitech/HID/DeviceChecker.cs @@ -9,8 +9,8 @@ namespace RGB.NET.Devices.Logitech.HID #region Constants //TODO DarthAffe 04.02.2017: Add IDs - private const int VENDOR_ID = 0x0; - private const int G910_ID = 0x0; + private const int VENDOR_ID = 0x046D; + private const int G910_ID = 0xC32B; private const int G810_ID = 0x0; #endregion diff --git a/RGB.NET.Devices.Logitech/Helper/BitmapMapping.cs b/RGB.NET.Devices.Logitech/Helper/BitmapMapping.cs new file mode 100644 index 0000000..f0ac3f5 --- /dev/null +++ b/RGB.NET.Devices.Logitech/Helper/BitmapMapping.cs @@ -0,0 +1,172 @@ +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using RGB.NET.Core; + +namespace RGB.NET.Devices.Logitech +{ + internal static class BitmapMapping + { + #region Constants + + private const int BITMAP_SIZE = 21 * 6 * 4; + + #endregion + + #region Properties & Fields + + internal static Dictionary BitmapOffset { get; } = new Dictionary + { + { LogitechLedIds.ESC, 0 }, + { LogitechLedIds.F1, 4 }, + { LogitechLedIds.F2, 8 }, + { LogitechLedIds.F3, 12 }, + { LogitechLedIds.F4, 16 }, + { LogitechLedIds.F5, 20 }, + { LogitechLedIds.F6, 24 }, + { LogitechLedIds.F7, 28 }, + { LogitechLedIds.F8, 32 }, + { LogitechLedIds.F9, 36 }, + { LogitechLedIds.F10, 40 }, + { LogitechLedIds.F11, 44 }, + { LogitechLedIds.F12, 48 }, + { LogitechLedIds.PRINT_SCREEN, 52 }, + { LogitechLedIds.SCROLL_LOCK, 56 }, + { LogitechLedIds.PAUSE_BREAK, 60 }, + // { LogitechLedIds.?, 64 }, + // { LogitechLedIds.?, 68 }, + // { LogitechLedIds.?, 72 }, + // { LogitechLedIds.?, 76 }, + // { LogitechLedIds.?, 80 }, + + { LogitechLedIds.TILDE, 84 }, + { LogitechLedIds.ONE, 88 }, + { LogitechLedIds.TWO, 92 }, + { LogitechLedIds.THREE, 96 }, + { LogitechLedIds.FOUR, 100 }, + { LogitechLedIds.FIVE, 104 }, + { LogitechLedIds.SIX, 108 }, + { LogitechLedIds.SEVEN, 112 }, + { LogitechLedIds.EIGHT, 116 }, + { LogitechLedIds.NINE, 120 }, + { LogitechLedIds.ZERO, 124 }, + { LogitechLedIds.MINUS, 128 }, + { LogitechLedIds.EQUALS, 132 }, + { LogitechLedIds.BACKSPACE, 136 }, + { LogitechLedIds.INSERT, 140 }, + { LogitechLedIds.HOME, 144 }, + { LogitechLedIds.PAGE_UP, 148 }, + { LogitechLedIds.NUM_LOCK, 152 }, + { LogitechLedIds.NUM_SLASH, 156 }, + { LogitechLedIds.NUM_ASTERISK, 160 }, + { LogitechLedIds.NUM_MINUS, 164 }, + + { LogitechLedIds.TAB, 168 }, + { LogitechLedIds.Q, 172 }, + { LogitechLedIds.W, 176 }, + { LogitechLedIds.E, 180 }, + { LogitechLedIds.R, 184 }, + { LogitechLedIds.T, 188 }, + { LogitechLedIds.Y, 192 }, + { LogitechLedIds.U, 196 }, + { LogitechLedIds.I, 200 }, + { LogitechLedIds.O, 204 }, + { LogitechLedIds.P, 208 }, + { LogitechLedIds.OPEN_BRACKET, 212 }, + { LogitechLedIds.CLOSE_BRACKET, 216 }, + // { LogitechLedIds.?, 220 }, + { LogitechLedIds.KEYBOARD_DELETE, 224 }, + { LogitechLedIds.END, 228 }, + { LogitechLedIds.PAGE_DOWN, 232 }, + { LogitechLedIds.NUM_SEVEN, 236 }, + { LogitechLedIds.NUM_EIGHT, 240 }, + { LogitechLedIds.NUM_NINE, 244 }, + { LogitechLedIds.NUM_PLUS, 248 }, + + { LogitechLedIds.CAPS_LOCK, 252 }, + { LogitechLedIds.A, 256 }, + { LogitechLedIds.S, 260 }, + { LogitechLedIds.D, 264 }, + { LogitechLedIds.F, 268 }, + { LogitechLedIds.G, 272 }, + { LogitechLedIds.H, 276 }, + { LogitechLedIds.J, 280 }, + { LogitechLedIds.K, 284 }, + { LogitechLedIds.L, 288 }, + { LogitechLedIds.SEMICOLON, 292 }, + { LogitechLedIds.APOSTROPHE, 296 }, + { LogitechLedIds.NonUsTilde, 300 }, //TODO DarthAffe 26.03.2017: Find the real ID/Name of this key - it's not documented ... + { LogitechLedIds.ENTER, 304 }, + // { LogitechLedIds.?, 308 }, + // { LogitechLedIds.?, 312 }, + // { LogitechLedIds.?, 316 }, + { LogitechLedIds.NUM_FOUR, 320 }, + { LogitechLedIds.NUM_FIVE, 324 }, + { LogitechLedIds.NUM_SIX, 328 }, + // { LogitechLedIds.?, 332 }, + + { LogitechLedIds.LEFT_SHIFT, 336 }, + { LogitechLedIds.BACKSLASH, 340 }, + { LogitechLedIds.Z, 344 }, + { LogitechLedIds.X, 348 }, + { LogitechLedIds.C, 352 }, + { LogitechLedIds.V, 356 }, + { LogitechLedIds.B, 360 }, + { LogitechLedIds.N, 364 }, + { LogitechLedIds.M, 368 }, + { LogitechLedIds.COMMA, 372 }, + { LogitechLedIds.PERIOD, 376 }, + { LogitechLedIds.FORWARD_SLASH, 380 }, + { LogitechLedIds.RIGHT_SHIFT, 388 }, + // { LogitechLedIds.?, 392 }, + { LogitechLedIds.ARROW_UP, 396 }, + // { LogitechLedIds.?, 400 }, + { LogitechLedIds.NUM_ONE, 404 }, + { LogitechLedIds.NUM_TWO, 408 }, + { LogitechLedIds.NUM_THREE, 412 }, + { LogitechLedIds.NUM_ENTER, 416 }, + + { LogitechLedIds.LEFT_CONTROL, 420 }, + { LogitechLedIds.LEFT_WINDOWS, 424 }, + { LogitechLedIds.LEFT_ALT, 428 }, + // { LogitechLedIds.?, 432 }, + // { LogitechLedIds.?, 436 }, + { LogitechLedIds.SPACE, 440 }, + // { LogitechLedIds.?, 444 }, + // { LogitechLedIds.?, 448 }, + // { LogitechLedIds.?, 452 }, + // { LogitechLedIds.?, 456 }, + // { LogitechLedIds.?, 460 }, + { LogitechLedIds.RIGHT_ALT, 464 }, + { LogitechLedIds.RIGHT_WINDOWS, 468 }, + { LogitechLedIds.APPLICATION_SELECT, 472 }, + { LogitechLedIds.RIGHT_CONTROL, 476 }, + { LogitechLedIds.ARROW_LEFT, 480 }, + { LogitechLedIds.ARROW_DOWN, 484 }, + { LogitechLedIds.ARROW_RIGHT, 488 }, + { LogitechLedIds.NUM_ZERO, 492 }, + { LogitechLedIds.NUM_PERIOD, 496 }, + // { LogitechLedIds.?, 500 }, + }; + + #endregion + + #region Methods + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static byte[] CreateBitmap() + { + return new byte[BITMAP_SIZE]; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static void SetColor(ref byte[] bitmap, int offset, Color color) + { + bitmap[offset] = color.B; + bitmap[offset + 1] = color.G; + bitmap[offset + 2] = color.R; + bitmap[offset + 3] = color.A; + } + + #endregion + } +} diff --git a/RGB.NET.Devices.Logitech/Helper/PathHelper.cs b/RGB.NET.Devices.Logitech/Helper/PathHelper.cs new file mode 100644 index 0000000..3247212 --- /dev/null +++ b/RGB.NET.Devices.Logitech/Helper/PathHelper.cs @@ -0,0 +1,24 @@ +using System.IO; +using System.Reflection; + +namespace RGB.NET.Devices.Logitech +{ + /// + /// Offers some helper-methods for file-path related things. + /// + public static class PathHelper + { + /// + /// Returns an absolute path created from an relative path relatvie to the location of the executung assembly. + /// + /// The relative path to convert. + /// The absolute path. + public static string GetAbsolutePath(string relativePath) + { + string assemblyLocation = Assembly.GetEntryAssembly()?.Location; + if (assemblyLocation == null) return relativePath; + + return Path.Combine(Path.GetDirectoryName(assemblyLocation), relativePath); + } + } +} diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/G910.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/G910.png new file mode 100644 index 0000000..dd42204 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/G910.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/0_Equals_CurlyBracketRight.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/0_Equals_CurlyBracketRight.png new file mode 100644 index 0000000..e8afa3e Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/0_Equals_CurlyBracketRight.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/1_ExclamationMark.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/1_ExclamationMark.png new file mode 100644 index 0000000..1beb4e4 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/1_ExclamationMark.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/2_QuotationMark_Exponent2.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/2_QuotationMark_Exponent2.png new file mode 100644 index 0000000..e424ed9 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/2_QuotationMark_Exponent2.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/3_SectionSign_Exponent3.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/3_SectionSign_Exponent3.png new file mode 100644 index 0000000..0611817 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/3_SectionSign_Exponent3.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/4_Dollar.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/4_Dollar.png new file mode 100644 index 0000000..1c5c7c5 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/4_Dollar.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/5_Percent.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/5_Percent.png new file mode 100644 index 0000000..4263254 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/5_Percent.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/6_Ampersand.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/6_Ampersand.png new file mode 100644 index 0000000..b5af4e7 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/6_Ampersand.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/7_Slash_CurlyBracketLeft.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/7_Slash_CurlyBracketLeft.png new file mode 100644 index 0000000..73a3a46 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/7_Slash_CurlyBracketLeft.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/8_BracketLeft_SquareBracketLeft.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/8_BracketLeft_SquareBracketLeft.png new file mode 100644 index 0000000..e9d9352 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/8_BracketLeft_SquareBracketLeft.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/9_BracketRight_SquareBracketRight.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/9_BracketRight_SquareBracketRight.png new file mode 100644 index 0000000..638f599 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/9_BracketRight_SquareBracketRight.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/A.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/A.png new file mode 100644 index 0000000..925c71c Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/A.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AE.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AE.png new file mode 100644 index 0000000..5714c5b Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AE.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AccentGrave_AccentAcute.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AccentGrave_AccentAcute.png new file mode 100644 index 0000000..2516065 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AccentGrave_AccentAcute.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Alt.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Alt.png new file mode 100644 index 0000000..864737a Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Alt.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AltGr.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AltGr.png new file mode 100644 index 0000000..dfc4b37 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AltGr.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Asterisk.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Asterisk.png new file mode 100644 index 0000000..1d8608b Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Asterisk.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/B.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/B.png new file mode 100644 index 0000000..296c373 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/B.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Backspace.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Backspace.png new file mode 100644 index 0000000..5d24401 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Backspace.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildDown.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildDown.png new file mode 100644 index 0000000..90de4fb Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildDown.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildUp.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildUp.png new file mode 100644 index 0000000..31c1e22 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildUp.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/C.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/C.png new file mode 100644 index 0000000..3eb305e Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/C.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CapsLockA.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CapsLockA.png new file mode 100644 index 0000000..51add26 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CapsLockA.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretDown.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretDown.png new file mode 100644 index 0000000..5703949 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretDown.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretLeft.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretLeft.png new file mode 100644 index 0000000..553e6e0 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretLeft.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretRight.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretRight.png new file mode 100644 index 0000000..2e06744 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretRight.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretUp.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretUp.png new file mode 100644 index 0000000..3d72c38 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretUp.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Circumflex_Degree.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Circumflex_Degree.png new file mode 100644 index 0000000..4e17275 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Circumflex_Degree.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Entf.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Entf.png new file mode 100644 index 0000000..9659d89 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Entf.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Semicolon.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Semicolon.png new file mode 100644 index 0000000..ff4f205 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Semicolon.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/D.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/D.png new file mode 100644 index 0000000..ec7475e Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/D.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Dot_Colon.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Dot_Colon.png new file mode 100644 index 0000000..4ca7ad5 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Dot_Colon.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Drucken.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Drucken.png new file mode 100644 index 0000000..dd20a5e Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Drucken.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/E_Euro.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/E_Euro.png new file mode 100644 index 0000000..7f27c30 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/E_Euro.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Einfg.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Einfg.png new file mode 100644 index 0000000..fdcfeee Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Einfg.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Ende.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Ende.png new file mode 100644 index 0000000..8433a33 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Ende.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Enter.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Enter.png new file mode 100644 index 0000000..1550183 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Enter.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Entf.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Entf.png new file mode 100644 index 0000000..d6e9deb Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Entf.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Escape.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Escape.png new file mode 100644 index 0000000..741b24c Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Escape.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F.png new file mode 100644 index 0000000..fa20fc1 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F1.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F1.png new file mode 100644 index 0000000..37495c1 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F1.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F10.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F10.png new file mode 100644 index 0000000..fa18ec6 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F10.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F11.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F11.png new file mode 100644 index 0000000..af3aa8a Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F11.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F12.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F12.png new file mode 100644 index 0000000..f269431 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F12.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F2.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F2.png new file mode 100644 index 0000000..b2d8211 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F2.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F3.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F3.png new file mode 100644 index 0000000..3196276 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F3.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F4.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F4.png new file mode 100644 index 0000000..849a49f Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F4.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F5.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F5.png new file mode 100644 index 0000000..1251a80 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F5.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F6.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F6.png new file mode 100644 index 0000000..ef3137c Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F6.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F7.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F7.png new file mode 100644 index 0000000..56971fb Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F7.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F8.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F8.png new file mode 100644 index 0000000..8af4c3e Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F8.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F9.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F9.png new file mode 100644 index 0000000..4474815 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F9.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G.png new file mode 100644 index 0000000..c57c3ed Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G1.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G1.png new file mode 100644 index 0000000..2e00a8e Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G1.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G2.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G2.png new file mode 100644 index 0000000..f8d3a33 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G2.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G3.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G3.png new file mode 100644 index 0000000..9ddb328 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G3.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G4.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G4.png new file mode 100644 index 0000000..a79a2e9 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G4.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G5.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G5.png new file mode 100644 index 0000000..e7bb655 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G5.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G6.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G6.png new file mode 100644 index 0000000..5d569e8 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G6.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G7.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G7.png new file mode 100644 index 0000000..4858d47 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G7.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G8.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G8.png new file mode 100644 index 0000000..de667d2 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G8.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G9.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G9.png new file mode 100644 index 0000000..5988127 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G9.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/H.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/H.png new file mode 100644 index 0000000..3a62b30 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/H.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hash_Apostrophe.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hash_Apostrophe.png new file mode 100644 index 0000000..1d25a9d Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hash_Apostrophe.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hyphen_Underscore.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hyphen_Underscore.png new file mode 100644 index 0000000..754df53 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hyphen_Underscore.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/I.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/I.png new file mode 100644 index 0000000..78fecd8 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/I.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/J.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/J.png new file mode 100644 index 0000000..072227d Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/J.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/K.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/K.png new file mode 100644 index 0000000..fb572cc Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/K.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/L.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/L.png new file mode 100644 index 0000000..8d878c8 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/L.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/LessThan_GreaterThan_Pipe.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/LessThan_GreaterThan_Pipe.png new file mode 100644 index 0000000..eefd2ac Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/LessThan_GreaterThan_Pipe.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/M_Mu.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/M_Mu.png new file mode 100644 index 0000000..7d1a93b Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/M_Mu.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Menu.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Menu.png new file mode 100644 index 0000000..63edb4b Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Menu.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Minus.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Minus.png new file mode 100644 index 0000000..7e87e5c Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Minus.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/N.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/N.png new file mode 100644 index 0000000..9e99553 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/N.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num.png new file mode 100644 index 0000000..ee26594 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num0_Einfg.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num0_Einfg.png new file mode 100644 index 0000000..45d8fe6 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num0_Einfg.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num1_Ende.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num1_Ende.png new file mode 100644 index 0000000..1c76372 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num1_Ende.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num2_ArrowDown.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num2_ArrowDown.png new file mode 100644 index 0000000..de979d1 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num2_ArrowDown.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num3_BildDown.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num3_BildDown.png new file mode 100644 index 0000000..2229b96 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num3_BildDown.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num4_ArrowLeft.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num4_ArrowLeft.png new file mode 100644 index 0000000..6ffa5d5 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num4_ArrowLeft.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num5.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num5.png new file mode 100644 index 0000000..2cd2843 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num5.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num6_ArrowRight.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num6_ArrowRight.png new file mode 100644 index 0000000..2e2eaa7 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num6_ArrowRight.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num7_Pos1.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num7_Pos1.png new file mode 100644 index 0000000..b523d9b Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num7_Pos1.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num8_ArrowUp.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num8_ArrowUp.png new file mode 100644 index 0000000..ad683d7 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num8_ArrowUp.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num9_BildUp.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num9_BildUp.png new file mode 100644 index 0000000..f41195d Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num9_BildUp.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumEnter.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumEnter.png new file mode 100644 index 0000000..e52f4e6 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumEnter.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumPlus.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumPlus.png new file mode 100644 index 0000000..db412dc Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumPlus.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/O.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/O.png new file mode 100644 index 0000000..b9c8cef Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/O.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/OE.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/OE.png new file mode 100644 index 0000000..f5b05a1 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/OE.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/P.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/P.png new file mode 100644 index 0000000..5c918f9 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/P.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/PauseUntbr.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/PauseUntbr.png new file mode 100644 index 0000000..efc9f39 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/PauseUntbr.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Plus_Asterisk_Tilde.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Plus_Asterisk_Tilde.png new file mode 100644 index 0000000..b072a01 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Plus_Asterisk_Tilde.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Pos1.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Pos1.png new file mode 100644 index 0000000..bf02468 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Pos1.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Q_At.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Q_At.png new file mode 100644 index 0000000..365b987 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Q_At.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/QuestionMark_SharpS_Backslash.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/QuestionMark_SharpS_Backslash.png new file mode 100644 index 0000000..91d17bf Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/QuestionMark_SharpS_Backslash.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/R.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/R.png new file mode 100644 index 0000000..1cdbf0d Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/R.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Rollen.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Rollen.png new file mode 100644 index 0000000..f3696df Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Rollen.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/S.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/S.png new file mode 100644 index 0000000..919121d Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/S.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Shift.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Shift.png new file mode 100644 index 0000000..9ac730f Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Shift.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/ShiftBig.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/ShiftBig.png new file mode 100644 index 0000000..f5ea312 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/ShiftBig.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Slash.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Slash.png new file mode 100644 index 0000000..13609b3 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Slash.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Space.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Space.png new file mode 100644 index 0000000..6c09dcd Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Space.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Strg.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Strg.png new file mode 100644 index 0000000..d3761c8 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Strg.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/T.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/T.png new file mode 100644 index 0000000..00328f2 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/T.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Tab.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Tab.png new file mode 100644 index 0000000..c52c503 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Tab.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/U.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/U.png new file mode 100644 index 0000000..c015e3b Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/U.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/UE.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/UE.png new file mode 100644 index 0000000..8d51805 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/UE.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/V.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/V.png new file mode 100644 index 0000000..0155f45 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/V.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/W.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/W.png new file mode 100644 index 0000000..b99c2da Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/W.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Windows.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Windows.png new file mode 100644 index 0000000..68198cd Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Windows.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/X.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/X.png new file mode 100644 index 0000000..1032b23 Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/X.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Y.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Y.png new file mode 100644 index 0000000..9c6632d Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Y.png differ diff --git a/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Z.png b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Z.png new file mode 100644 index 0000000..a05a3ac Binary files /dev/null and b/RGB.NET.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Z.png differ diff --git a/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDevice.cs b/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDevice.cs index bb9e35e..cdb5261 100644 --- a/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDevice.cs +++ b/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDevice.cs @@ -1,7 +1,6 @@ // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedMember.Global -using System; using System.IO; using System.Reflection; @@ -40,8 +39,10 @@ namespace RGB.NET.Devices.Logitech /// protected override void InitializeLayout() { - ApplyLayoutFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), - $@"Layouts\Logitech\Keyboards\{KeyboardDeviceInfo.Model.Replace(" ", string.Empty).ToUpper()}\{KeyboardDeviceInfo.PhysicalLayout.ToString().ToUpper()}.xml")); + string model = KeyboardDeviceInfo.Model.Replace(" ", string.Empty).ToUpper(); + ApplyLayoutFromFile(PathHelper.GetAbsolutePath( + $@"Layouts\Logitech\Keyboards\{model}\{KeyboardDeviceInfo.PhysicalLayout.ToString().ToUpper()}.xml"), + KeyboardDeviceInfo.LogicalLayout.ToString(), PathHelper.GetAbsolutePath($@"Images\Logitech\Keyboards")); } #endregion diff --git a/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDeviceInfo.cs b/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDeviceInfo.cs index 1a9d00b..e4ce2da 100644 --- a/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Logitech/Keyboard/LogitechKeyboardRGBDeviceInfo.cs @@ -43,7 +43,7 @@ namespace RGB.NET.Devices.Logitech SetLayouts(culture.KeyboardLayoutId); Image = new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), - $@"Images\Logitech\Keyboards\{Model.Replace(" ", string.Empty).ToUpper()}\{LogicalLayout.ToString().ToUpper()}.png"), UriKind.Absolute); + $@"Images\Logitech\Keyboards\{Model.Replace(" ", string.Empty).ToUpper()}.png"), UriKind.Absolute); } private void SetLayouts(int keyboardLayoutId) @@ -52,8 +52,8 @@ namespace RGB.NET.Devices.Logitech { //TODO DarthAffe 04.02.2017: Check all available keyboards and there layout-ids default: - PhysicalLayout = LogitechPhysicalKeyboardLayout.US; - LogicalLayout = LogitechLogicalKeyboardLayout.NA; + PhysicalLayout = LogitechPhysicalKeyboardLayout.UK; + LogicalLayout = LogitechLogicalKeyboardLayout.DE; break; } } diff --git a/RGB.NET.Devices.Logitech/Layouts/DeviceLayout.xsd b/RGB.NET.Devices.Logitech/Layouts/DeviceLayout.xsd new file mode 100644 index 0000000..92690b3 --- /dev/null +++ b/RGB.NET.Devices.Logitech/Layouts/DeviceLayout.xsd @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RGB.NET.Devices.Logitech/Layouts/Logitech/Keyboards/G910/UK.xml b/RGB.NET.Devices.Logitech/Layouts/Logitech/Keyboards/G910/UK.xml new file mode 100644 index 0000000..d748514 --- /dev/null +++ b/RGB.NET.Devices.Logitech/Layouts/Logitech/Keyboards/G910/UK.xml @@ -0,0 +1,388 @@ + + + Logitech G910 - Physical UK + Physical UK-Layout of Logitech G910 (Logical: ???) + Keyboard + Key + Logitech + G910 + 491 + 238 + + + + 42 + 28 + + + + +12.667 + + + + + + + +12.667 + + + + + + + +12.667 + + + + + + + +6.75 + + + + + + + 42 + 52 + + + + + + + + + + + + + + + 2 + + + + +6.75 + + + + + + +6.75 + + + + + + + + 42 + + + 1.5 + + + + + + + + + + + + + + + M0,0 L0,0.5 L0.16666666666,0.5 L0.16666666666,1 L1,1 L1,0 Z + 1.5 + 2 + + + + +6.75 + + + + + + +6.75 + + + + + 2 + + + + + 42 + ~ + 1.75 + + + + + + + + + + + + + + + + +94.25 + + + + + + + 42 + + + 1.25 + + + + + + + + + + + + + + 2.75 + + + + +25.75 + + + + +25.75 + + + + + 2 + + + + + 42 + ~ + 1.5 + + + 1.25 + + + 1.25 + + + 5.75 + + + 1.25 + + + 1.25 + + + 1.25 + + + 1.5 + + + + +6.75 + + + + + + +6.75 + 2 + + + + + + 18 + 52 + + + 18 + + + + + 18 + + + + + 18 + + + + + 18 + + + + + + 73.667 + 9 + + + + + + + + M 0,0 L0.15,1 0.85,1 L 1,0 Z + 92.5 + 166.5 + 55mm + 9mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs b/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs index c9c3939..9a3fbe5 100644 --- a/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs +++ b/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs @@ -69,7 +69,6 @@ namespace RGB.NET.Devices.Logitech if (!_LogitechGSDK.LogiLedInit()) return false; _LogitechGSDK.LogiLedSaveCurrentLighting(); - _LogitechGSDK.LogiLedSetTargetDevice(LogitechDeviceCaps.PerKeyRGB); IList devices = new List(); diff --git a/RGB.NET.Devices.Logitech/Native/_LogitechGSDK.cs b/RGB.NET.Devices.Logitech/Native/_LogitechGSDK.cs index e93e2cc..cd4db5b 100644 --- a/RGB.NET.Devices.Logitech/Native/_LogitechGSDK.cs +++ b/RGB.NET.Devices.Logitech/Native/_LogitechGSDK.cs @@ -48,6 +48,7 @@ namespace RGB.NET.Devices.Logitech.Native _lgiLedSaveCurrentLightingPointer = (LogiLedSaveCurrentLightingPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "LogiLedSaveCurrentLighting"), typeof(LogiLedSaveCurrentLightingPointer)); _logiLedRestoreLightingPointer = (LogiLedRestoreLightingPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "LogiLedRestoreLighting"), typeof(LogiLedRestoreLightingPointer)); _logiLedSetLightingForKeyWithKeyNamePointer = (LogiLedSetLightingForKeyWithKeyNamePointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "LogiLedSetLightingForKeyWithKeyName"), typeof(LogiLedSetLightingForKeyWithKeyNamePointer)); + _logiLedSetLightingFromBitmapPointer = (LogiLedSetLightingFromBitmapPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(_dllHandle, "LogiLedSetLightingFromBitmap"), typeof(LogiLedSetLightingFromBitmapPointer)); } private static void UnloadLogitechGSDK() @@ -83,6 +84,7 @@ namespace RGB.NET.Devices.Logitech.Native private static LogiLedSaveCurrentLightingPointer _lgiLedSaveCurrentLightingPointer; private static LogiLedRestoreLightingPointer _logiLedRestoreLightingPointer; private static LogiLedSetLightingForKeyWithKeyNamePointer _logiLedSetLightingForKeyWithKeyNamePointer; + private static LogiLedSetLightingFromBitmapPointer _logiLedSetLightingFromBitmapPointer; #endregion @@ -109,6 +111,9 @@ namespace RGB.NET.Devices.Logitech.Native [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate bool LogiLedSetLightingForKeyWithKeyNamePointer(int keyCode, int redPercentage, int greenPercentage, int bluePercentage); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate bool LogiLedSetLightingFromBitmapPointer(byte[] bitmap); + #endregion // ReSharper disable EventExceptionNotDocumented @@ -159,6 +164,11 @@ namespace RGB.NET.Devices.Logitech.Native return _logiLedSetLightingForKeyWithKeyNamePointer(keyCode, redPercentage, greenPercentage, bluePercentage); } + internal static bool LogiLedSetLightingFromBitmap(byte[] bitmap) + { + return _logiLedSetLightingFromBitmapPointer(bitmap); + } + // ReSharper restore EventExceptionNotDocumented #endregion diff --git a/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj b/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj index 01fa985..3eebc0a 100644 --- a/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj +++ b/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj @@ -57,7 +57,9 @@ + + @@ -66,14 +68,130 @@ + + Designer + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer +