diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 5b67a756b..cd4dbdab1 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -336,6 +336,8 @@ + + MarkdownDialog.xaml diff --git a/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs b/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs index aff9bfcf7..e2e89924f 100644 --- a/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs +++ b/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs @@ -57,7 +57,7 @@ namespace Artemis.DeviceProviders.Razer public override void DrawBitmap(Bitmap bitmap) { - var razerArray = RazerUtilities.BitmapColorArray(bitmap, Height, Width); + var razerArray = RazerUtilities.BitmaptoKeyboardEffect(bitmap, Height, Width); Chroma.Instance.Keyboard.SetCustom(razerArray); } diff --git a/Artemis/Artemis/DeviceProviders/Razer/Firefly.cs b/Artemis/Artemis/DeviceProviders/Razer/Firefly.cs new file mode 100644 index 000000000..224783e2a --- /dev/null +++ b/Artemis/Artemis/DeviceProviders/Razer/Firefly.cs @@ -0,0 +1,50 @@ +using Artemis.Settings; +using Artemis.DAL; +using System; +using System.Drawing; +using Corale.Colore.Core; +using Corale.Colore.Razer; +using Ninject.Extensions.Logging; +using Artemis.DeviceProviders.Razer.Utilities; + +namespace Artemis.DeviceProviders.Razer +{ + public class Firefly : DeviceProvider + { + private GeneralSettings _generalSettings; + public ILogger Logger { get; set; } + public Firefly(ILogger logger) + { + Logger = logger; + Type = DeviceType.Mousemat; + _generalSettings = SettingsProvider.Load(); + } + + public override void Disable() + { + throw new NotSupportedException("Can only disable a keyboard"); + } + + public override bool TryEnable() + { + if (!Chroma.SdkAvailable) + return false; + + + // Some people have Synapse installed, but not a Chroma keyboard, deal with this + Chroma.Instance.Initialize(); + CanUse = Chroma.Instance.Query(Devices.Firefly).Connected; + return CanUse; + } + + public override void UpdateDevice(Bitmap bitmap) + { + if (Chroma.SdkAvailable && Chroma.Instance.Initialized) + { + var razerArray = RazerUtilities.BitmaptoMousePadEffect(bitmap); + Chroma.Instance.Mousepad.SetCustom(razerArray); + } + return; + } + } +} diff --git a/Artemis/Artemis/DeviceProviders/Razer/Mamba.cs b/Artemis/Artemis/DeviceProviders/Razer/Mamba.cs new file mode 100644 index 000000000..f7054f682 --- /dev/null +++ b/Artemis/Artemis/DeviceProviders/Razer/Mamba.cs @@ -0,0 +1,50 @@ +using Artemis.Settings; +using Artemis.DAL; +using System; +using System.Drawing; +using Corale.Colore.Core; +using Corale.Colore.Razer; +using Ninject.Extensions.Logging; +using Artemis.DeviceProviders.Razer.Utilities; + +namespace Artemis.DeviceProviders.Razer +{ + public class Mamba : DeviceProvider + { + private GeneralSettings _generalSettings; + public ILogger Logger { get; set; } + public Mamba(ILogger logger) + { + Logger = logger; + Type = DeviceType.Mouse; + _generalSettings = SettingsProvider.Load(); + } + + public override void Disable() + { + throw new NotSupportedException("Can only disable a keyboard"); + } + + public override bool TryEnable() + { + if (!Chroma.SdkAvailable) + return false; + + + // Some people have Synapse installed, but not a Chroma keyboard, deal with this + Chroma.Instance.Initialize(); + CanUse = Chroma.Instance.Query(Devices.Mamba).Connected || Chroma.Instance.Query(Devices.MambaTe).Connected; + return CanUse; + } + + public override void UpdateDevice(Bitmap bitmap) + { + if (Chroma.SdkAvailable && Chroma.Instance.Initialized) + { + var razerArray = RazerUtilities.BitmaptoMouseEffect(bitmap); + Chroma.Instance.Mouse.SetCustom(razerArray); + } + return; + } + } +} diff --git a/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs b/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs index 44c7ae96a..2b2265b16 100644 --- a/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs +++ b/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs @@ -1,15 +1,16 @@ using System.Drawing; using Artemis.Utilities; -using Corale.Colore.Razer.Keyboard.Effects; using Color = Corale.Colore.Core.Color; +using Corale.Colore; namespace Artemis.DeviceProviders.Razer.Utilities { public static class RazerUtilities { - public static Custom BitmapColorArray(Bitmap b, int height, int width) + public static Corale.Colore.Razer.Keyboard.Effects.Custom BitmaptoKeyboardEffect(Bitmap b, int height, int width) { - var keyboardGrid = Custom.Create(); + + var keyboardGrid = Corale.Colore.Razer.Keyboard.Effects.Custom.Create(); // Resize the bitmap using (b = ImageUtilities.ResizeImage(b, width, height)) { @@ -26,5 +27,60 @@ namespace Artemis.DeviceProviders.Razer.Utilities return keyboardGrid; } } + + public static Corale.Colore.Razer.Mousepad.Effects.Custom BitmaptoMousePadEffect(Bitmap b) + { + var mousePadGrid = Corale.Colore.Razer.Mousepad.Effects.Custom.Create(); + int pos = 0; + using (b = ImageUtilities.ResizeImage(b, 5, 5)) + { + b.RotateFlip(RotateFlipType.RotateNoneFlipX); + for (var x = 0; x < 5; x++) + { + var c = b.GetPixel(4, x); + mousePadGrid[pos++] = new Color(c.R, c.G, c.B); + } + for (var x = 0; x < 5; x++) + { + var c = b.GetPixel(x , 4); + mousePadGrid[pos++] = new Color(c.R, c.G, c.B); + } + for (var x = 0; x < 5; x++) + { + var c = b.GetPixel(0, x); + mousePadGrid[pos++] = new Color(c.R, c.G, c.B); + } + } + + return mousePadGrid; + } + + public static Corale.Colore.Razer.Mouse.Effects.Custom BitmaptoMouseEffect(Bitmap b) + { + var mouseGrid = Corale.Colore.Razer.Mouse.Effects.Custom.Create(); + using (b = ImageUtilities.ResizeImage(b, 3, 7)) + { + var c = b.GetPixel(1, 0); + int pos = 0; + mouseGrid[pos++] = new Color(c.R, c.G, c.B); + mouseGrid[pos++] = new Color(c.R, c.G, c.B); + mouseGrid[pos++] = new Color(c.R, c.G, c.B); + mouseGrid[pos++] = new Color(c.R, c.G, c.B); + + for (var x = 0; x < 7; x++) + { + c = b.GetPixel(0, x); + mouseGrid[pos++] = new Color(c.R, c.G, c.B); + } + b.RotateFlip(RotateFlipType.RotateNoneFlipX); + for (var x = 0; x < 7; x++) + { + c = b.GetPixel(2, x); + mouseGrid[pos++] = new Color(c.R, c.G, c.B); + } + + } + return mouseGrid; + } } } \ No newline at end of file