diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj
index 13d87422d..8d31a8a77 100644
--- a/Artemis/Artemis/Artemis.csproj
+++ b/Artemis/Artemis/Artemis.csproj
@@ -321,6 +321,7 @@
+
diff --git a/Artemis/Artemis/DeviceProviders/Artemis/NoneKeyboard.cs b/Artemis/Artemis/DeviceProviders/Artemis/NoneKeyboard.cs
new file mode 100644
index 000000000..9aa51c19b
--- /dev/null
+++ b/Artemis/Artemis/DeviceProviders/Artemis/NoneKeyboard.cs
@@ -0,0 +1,42 @@
+using System.Drawing;
+using System.Windows;
+using System.Windows.Forms;
+using Artemis.Properties;
+
+namespace Artemis.DeviceProviders.Artemis
+{
+ public class NoneKeyboard : KeyboardProvider
+ {
+ public NoneKeyboard()
+ {
+ Name = "None";
+ Slug = "none";
+ CantEnableText = "Waaaaah, this should not be happening!";
+ Height = 1;
+ Width = 1;
+ PreviewSettings = new PreviewSettings(984, 375, new Thickness(0, 0, 0, 0), Resources.none);
+ }
+
+ public override void Disable()
+ {
+ }
+
+ public override bool CanEnable()
+ {
+ return true;
+ }
+
+ public override void Enable()
+ {
+ }
+
+ public override void DrawBitmap(Bitmap bitmap)
+ {
+ }
+
+ public override KeyMatch? GetKeyPosition(Keys keyCode)
+ {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs
index f30936674..503c7e16f 100644
--- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs
+++ b/Artemis/Artemis/DeviceProviders/Corsair/CorsairHeadset.cs
@@ -46,20 +46,19 @@ namespace Artemis.DeviceProviders.Corsair
var leds = CueSDK.HeadsetSDK.Leds.Count();
var step = (double) bitmap.Width/leds;
- using (bitmap)
- {
- var ledIndex = 0;
- // Color each LED according to one of the pixels
- foreach (var corsairLed in CueSDK.HeadsetSDK.Leds)
- {
- var col = ledIndex == 0
- ? bitmap.GetPixel(0, 0)
- : bitmap.GetPixel((int) ((ledIndex + 1)*step - 1), (int) ((ledIndex + 1)*step - 1));
- corsairLed.Color = col;
- ledIndex++;
- }
+ var ledIndex = 0;
+ // Color each LED according to one of the pixels
+ foreach (var corsairLed in CueSDK.HeadsetSDK.Leds)
+ {
+ var col = ledIndex == 0
+ ? bitmap.GetPixel(0, 0)
+ : bitmap.GetPixel((int) ((ledIndex + 1)*step - 1), (int) ((ledIndex + 1)*step - 1));
+
+ corsairLed.Color = col;
+ ledIndex++;
}
+
CueSDK.HeadsetSDK.Update();
}
diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs
index e153be07e..c6586ef31 100644
--- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs
+++ b/Artemis/Artemis/DeviceProviders/Corsair/CorsairMouse.cs
@@ -46,20 +46,19 @@ namespace Artemis.DeviceProviders.Corsair
var leds = CueSDK.MouseSDK.Leds.Count();
var step = (double) bitmap.Width/leds;
- using (bitmap)
- {
- var ledIndex = 0;
- // Color each LED according to one of the pixels
- foreach (var corsairLed in CueSDK.MouseSDK.Leds)
- {
- var col = ledIndex == 0
- ? bitmap.GetPixel(0, 0)
- : bitmap.GetPixel((int) ((ledIndex + 1)*step - 1), (int) ((ledIndex + 1)*step - 1));
- corsairLed.Color = col;
- ledIndex++;
- }
+ var ledIndex = 0;
+ // Color each LED according to one of the pixels
+ foreach (var corsairLed in CueSDK.MouseSDK.Leds)
+ {
+ var col = ledIndex == 0
+ ? bitmap.GetPixel(0, 0)
+ : bitmap.GetPixel((int) ((ledIndex + 1)*step - 1), (int) ((ledIndex + 1)*step - 1));
+
+ corsairLed.Color = col;
+ ledIndex++;
}
+
CueSDK.MouseSDK.Update();
}
diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs
index badf7b4e4..d39f50fe2 100644
--- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs
+++ b/Artemis/Artemis/DeviceProviders/Corsair/CorsairMousemat.cs
@@ -48,39 +48,36 @@ namespace Artemis.DeviceProviders.Corsair
var xStep = (double) bitmap.Width/6;
// This approach will break if any mousemats with different LED amounts are released, for now it will do.
- using (bitmap)
+ var ledIndex = 0;
+ // Color each LED according to one of the pixels
+ foreach (var corsairLed in CueSDK.MousematSDK.Leds.OrderBy(l => l.ToString()))
{
- var ledIndex = 0;
- // Color each LED according to one of the pixels
- foreach (var corsairLed in CueSDK.MousematSDK.Leds.OrderBy(l => l.ToString()))
+ Color col;
+ // Left side
+ if (ledIndex < 5)
{
- Color col;
- // Left side
- if (ledIndex < 5)
- {
- col = ledIndex == 0
- ? bitmap.GetPixel(0, (int) (ledIndex*yStep))
- : bitmap.GetPixel(0, (int) (ledIndex*yStep) - 1);
- }
- // Bottom
- else if (ledIndex < 10)
- {
- // Start at index 1 because the corner belongs to the left side
- var zoneIndex = ledIndex - 4;
- col = bitmap.GetPixel((int) (zoneIndex*xStep), bitmap.Height - 1);
- }
- // Right side
- else
- {
- var zoneIndex = ledIndex - 10;
- col = zoneIndex == 4
- ? bitmap.GetPixel(bitmap.Height - 1, bitmap.Height - (int) (zoneIndex*yStep))
- : bitmap.GetPixel(bitmap.Height - 1, bitmap.Height - 1 - (int) (zoneIndex*yStep));
- }
-
- corsairLed.Color = col;
- ledIndex++;
+ col = ledIndex == 0
+ ? bitmap.GetPixel(0, (int) (ledIndex*yStep))
+ : bitmap.GetPixel(0, (int) (ledIndex*yStep) - 1);
}
+ // Bottom
+ else if (ledIndex < 10)
+ {
+ // Start at index 1 because the corner belongs to the left side
+ var zoneIndex = ledIndex - 4;
+ col = bitmap.GetPixel((int) (zoneIndex*xStep), bitmap.Height - 1);
+ }
+ // Right side
+ else
+ {
+ var zoneIndex = ledIndex - 10;
+ col = zoneIndex == 4
+ ? bitmap.GetPixel(bitmap.Height - 1, bitmap.Height - (int) (zoneIndex*yStep))
+ : bitmap.GetPixel(bitmap.Height - 1, bitmap.Height - 1 - (int) (zoneIndex*yStep));
+ }
+
+ corsairLed.Color = col;
+ ledIndex++;
}
CueSDK.MousematSDK.Update();
}
diff --git a/Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs b/Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs
index fcf07d3f9..5da53fe28 100644
--- a/Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs
+++ b/Artemis/Artemis/DeviceProviders/Logitech/LogitechGeneric.cs
@@ -25,12 +25,9 @@ namespace Artemis.DeviceProviders.Logitech
if (!CanUse || bitmap == null)
return;
- using (bitmap)
- {
- var col = bitmap.GetPixel(bitmap.Width/2, bitmap.Height/2);
- LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_RGB);
- LogitechGSDK.LogiLedSetLighting((int) (col.R/2.55), (int) (col.G/2.55), (int) (col.B/2.55));
- }
+ var col = bitmap.GetPixel(bitmap.Width/2, bitmap.Height/2);
+ LogitechGSDK.LogiLedSetTargetDevice(LogitechGSDK.LOGI_DEVICETYPE_RGB);
+ LogitechGSDK.LogiLedSetLighting((int) (col.R/2.55), (int) (col.G/2.55), (int) (col.B/2.55));
}
public override bool TryEnable()
diff --git a/Artemis/Artemis/InjectionModules/DeviceModules.cs b/Artemis/Artemis/InjectionModules/DeviceModules.cs
index 46839dd26..de64108ce 100644
--- a/Artemis/Artemis/InjectionModules/DeviceModules.cs
+++ b/Artemis/Artemis/InjectionModules/DeviceModules.cs
@@ -1,4 +1,5 @@
using Artemis.DeviceProviders;
+using Artemis.DeviceProviders.Artemis;
using Artemis.DeviceProviders.CoolerMaster;
using Artemis.DeviceProviders.Corsair;
using Artemis.DeviceProviders.Logitech;
@@ -12,6 +13,7 @@ namespace Artemis.InjectionModules
public override void Load()
{
// Keyboards
+ Bind().To().InSingletonScope();
Bind().To().InSingletonScope();
Bind().To().InSingletonScope();
Bind().To().InSingletonScope();
diff --git a/Artemis/Artemis/Managers/LoopManager.cs b/Artemis/Artemis/Managers/LoopManager.cs
index 1261bdb48..4892d203e 100644
--- a/Artemis/Artemis/Managers/LoopManager.cs
+++ b/Artemis/Artemis/Managers/LoopManager.cs
@@ -4,9 +4,9 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
-using System.Windows;
-using System.Windows.Threading;
using Artemis.DeviceProviders;
+using Artemis.ViewModels;
+using Caliburn.Micro;
using Ninject.Extensions.Logging;
using Timer = System.Timers.Timer;
@@ -17,17 +17,20 @@ namespace Artemis.Managers
///
public class LoopManager : IDisposable
{
+ private readonly DebugViewModel _debugViewModel;
private readonly DeviceManager _deviceManager;
private readonly EffectManager _effectManager;
private readonly ILogger _logger;
private readonly Timer _loopTimer;
private bool _canShowException;
- public LoopManager(ILogger logger, EffectManager effectManager, DeviceManager deviceManager)
+ public LoopManager(ILogger logger, EffectManager effectManager, DeviceManager deviceManager,
+ DebugViewModel debugViewModel)
{
_logger = logger;
_effectManager = effectManager;
_deviceManager = deviceManager;
+ _debugViewModel = debugViewModel;
_canShowException = true;
// Setup timers
@@ -38,6 +41,19 @@ namespace Artemis.Managers
_logger.Info("Intialized LoopManager");
}
+ public DebugViewModel DebugViewModel { get; set; }
+
+ ///
+ /// Gets whether the loop is running
+ ///
+ public bool Running { get; private set; }
+
+ public void Dispose()
+ {
+ _loopTimer.Stop();
+ _loopTimer.Dispose();
+ }
+
private void LoopTimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs)
{
try
@@ -48,7 +64,7 @@ namespace Artemis.Managers
{
if (_canShowException)
{
- Caliburn.Micro.Execute.OnUIThread(delegate
+ Execute.OnUIThread(delegate
{
_canShowException = false;
_loopTimer.Stop();
@@ -59,17 +75,6 @@ namespace Artemis.Managers
}
}
- ///
- /// Gets whether the loop is running
- ///
- public bool Running { get; private set; }
-
- public void Dispose()
- {
- _loopTimer.Stop();
- _loopTimer.Dispose();
- }
-
public Task StartAsync()
{
return Task.Run(() => Start());
@@ -185,6 +190,8 @@ namespace Artemis.Managers
foreach (var mousemat in mousemats)
mousemat.UpdateDevice(frame.MousematBitmap);
+ _debugViewModel.DrawFrame(frame);
+
OnRenderCompleted();
}
}
@@ -254,6 +261,7 @@ namespace Artemis.Managers
MouseBitmap?.Dispose();
HeadsetBitmap?.Dispose();
GenericBitmap?.Dispose();
+ MousematBitmap?.Dispose();
}
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Models/EffectModel.cs b/Artemis/Artemis/Models/EffectModel.cs
index 6df55e873..ff2f3e409 100644
--- a/Artemis/Artemis/Models/EffectModel.cs
+++ b/Artemis/Artemis/Models/EffectModel.cs
@@ -36,12 +36,6 @@ namespace Artemis.Models
DeviceManager.OnKeyboardChangedEvent += DeviceManagerOnOnKeyboardChangedEvent;
}
- private void DeviceManagerOnOnKeyboardChangedEvent(object sender, KeyboardChangedEventArgs args)
- {
- if (!string.IsNullOrEmpty(Settings?.LastProfile))
- Profile = ProfileProvider.GetProfile(DeviceManager.ActiveKeyboard, this, Settings.LastProfile);
- }
-
public bool Initialized { get; set; }
public DeviceManager DeviceManager { get; set; }
public EffectSettings Settings { get; set; }
@@ -59,6 +53,12 @@ namespace Artemis.Models
Profile?.Deactivate();
}
+ private void DeviceManagerOnOnKeyboardChangedEvent(object sender, KeyboardChangedEventArgs args)
+ {
+ if (!string.IsNullOrEmpty(Settings?.LastProfile))
+ Profile = ProfileProvider.GetProfile(DeviceManager.ActiveKeyboard, this, Settings.LastProfile);
+ }
+
// Called on creation
public abstract void Enable();
@@ -89,15 +89,15 @@ namespace Artemis.Models
var keyboardRect = DeviceManager.ActiveKeyboard.KeyboardRectangle(KeyboardScale);
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
{
- Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
- DataModel, keyboardRect, false, true, "keyboard");
+ Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
+ DataModel, keyboardRect, false, true, "keyboard");
}
// Render mice layer-by-layer
var devRec = new Rect(0, 0, 40, 40);
using (var g = Graphics.FromImage(frame.MouseBitmap))
{
- Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Mouse), DataModel,
- devRec, false, true, "mouse");
+ Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Mouse),
+ DataModel, devRec, false, true, "mouse");
}
// Render headsets layer-by-layer
using (var g = Graphics.FromImage(frame.HeadsetBitmap))
diff --git a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs
index 2fb32ec1b..0b258f5fe 100644
--- a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs
+++ b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs
@@ -62,7 +62,7 @@ namespace Artemis.Modules.Effects.ProfilePreview
var keyboardRect = DeviceManager.ActiveKeyboard.KeyboardRectangle(KeyboardScale);
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
{
- Profile.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
+ Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
DataModel, keyboardRect, true, true, "keyboard");
}
// Render mice layer-by-layer
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs b/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs
index c9f289373..2db638ead 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Folder/FolderType.cs
@@ -13,9 +13,9 @@ namespace Artemis.Profiles.Layers.Types.Folder
public class FolderType : ILayerType
{
public string Name => "Folder";
- public bool ShowInEdtor { get; } = false;
+ public bool ShowInEdtor => false;
// FolderType pretents to be a keyboard so it's children get drawn
- public DrawType DrawType { get; } = DrawType.Keyboard;
+ public DrawType DrawType => DrawType.Keyboard;
public ImageSource DrawThumbnail(LayerModel layer)
{
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs
index ae0d4a389..80c7aa4ec 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericPropertiesViewModel.cs
@@ -1,16 +1,13 @@
-using System.Collections.Generic;
-using System.Linq;
+using System.Linq;
using Artemis.Profiles.Layers.Abstract;
using Artemis.Profiles.Layers.Interfaces;
using Artemis.ViewModels.Profiles;
using Caliburn.Micro;
-using ColorBox;
namespace Artemis.Profiles.Layers.Types.Generic
{
public class GenericPropertiesViewModel : LayerPropertiesViewModel
{
- private IEnumerable _availableBrushTypes;
private ILayerAnimation _selectedLayerAnimation;
public GenericPropertiesViewModel(LayerEditorViewModel editorVm) : base(editorVm)
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs
index 77ccd3b69..97fde86e3 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Generic/GenericType.cs
@@ -15,17 +15,15 @@ namespace Artemis.Profiles.Layers.Types.Generic
public class GenericType : ILayerType
{
public string Name => "Generic (Logitech)";
- public bool ShowInEdtor { get; } = false;
- public DrawType DrawType { get; } = DrawType.Generic;
+ public bool ShowInEdtor => false;
+ public DrawType DrawType => DrawType.Generic;
public ImageSource DrawThumbnail(LayerModel layer)
{
var thumbnailRect = new Rect(0, 0, 18, 18);
var visual = new DrawingVisual();
using (var c = visual.RenderOpen())
- {
c.DrawImage(ImageUtilities.BitmapToBitmapImage(Resources.generic), thumbnailRect);
- }
var image = new DrawingImage(visual.Drawing);
return image;
@@ -61,7 +59,7 @@ namespace Artemis.Profiles.Layers.Types.Generic
layerModel.Properties.Y = 0;
layerModel.Properties.Contain = true;
- layerModel.ApplyProperties(false);
+ layerModel.ApplyProperties(true);
if (isPreview || dataModel == null)
return;
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs b/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs
index cbf75c0d4..76092cbea 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Headset/HeadsetType.cs
@@ -15,8 +15,8 @@ namespace Artemis.Profiles.Layers.Types.Headset
public class HeadsetType : ILayerType
{
public string Name => "Headset";
- public bool ShowInEdtor { get; } = false;
- public DrawType DrawType { get; } = DrawType.Headset;
+ public bool ShowInEdtor => false;
+ public DrawType DrawType => DrawType.Headset;
public ImageSource DrawThumbnail(LayerModel layer)
{
diff --git a/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs b/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs
index 0bed586e0..f8a31e27a 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/KeyPress/KeyPressType.cs
@@ -20,12 +20,14 @@ namespace Artemis.Profiles.Layers.Types.KeyPress
internal class KeyPressType : ILayerType
{
private readonly DeviceManager _deviceManager;
- private List _keyPressLayers = new List();
+ private List _keyPressLayers;
private LayerModel _layerModel;
public KeyPressType(DeviceManager deviceManager)
{
_deviceManager = deviceManager;
+ _keyPressLayers = new List();
+
KeyboardHook.KeyDownCallback += KeyboardHookOnKeyDownCallback;
}
@@ -33,8 +35,8 @@ namespace Artemis.Profiles.Layers.Types.KeyPress
public string Name => "Keyboard - Key press";
- public bool ShowInEdtor { get; } = false;
- public DrawType DrawType { get; } = DrawType.Keyboard;
+ public bool ShowInEdtor => false;
+ public DrawType DrawType => DrawType.Keyboard;
public ImageSource DrawThumbnail(LayerModel layer)
{
@@ -77,10 +79,12 @@ namespace Artemis.Profiles.Layers.Types.KeyPress
lock (_keyPressLayers)
{
// Remove expired key presses
- _keyPressLayers = _keyPressLayers.Where(k => !k.LayerAnimation.MustExpire(k)).ToList();
+ var updateLayers = _keyPressLayers.Where(k => !k.LayerAnimation.MustExpire(k)).ToList();
// Update the ones that are still active
- foreach (var keyPressLayer in _keyPressLayers)
- keyPressLayer.Update(null, false, true);
+ foreach (var updateLayer in updateLayers)
+ updateLayer.Update(null, false, true);
+
+ _keyPressLayers = updateLayers;
}
}
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs b/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs
index 8fbc1ddf7..d1ef34882 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Keyboard/KeyboardType.cs
@@ -12,8 +12,8 @@ namespace Artemis.Profiles.Layers.Types.Keyboard
public class KeyboardType : ILayerType
{
public string Name => "Keyboard";
- public bool ShowInEdtor { get; } = true;
- public DrawType DrawType { get; } = DrawType.Keyboard;
+ public bool ShowInEdtor => true;
+ public DrawType DrawType => DrawType.Keyboard;
public ImageSource DrawThumbnail(LayerModel layer)
{
diff --git a/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs b/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs
index dd524577b..d2edb9451 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/KeyboardGif/KeyboardGifType.cs
@@ -16,8 +16,8 @@ namespace Artemis.Profiles.Layers.Types.KeyboardGif
internal class KeyboardGifType : ILayerType
{
public string Name => "Keyboard - GIF";
- public bool ShowInEdtor { get; } = true;
- public DrawType DrawType { get; } = DrawType.Keyboard;
+ public bool ShowInEdtor => true;
+ public DrawType DrawType => DrawType.Keyboard;
public ImageSource DrawThumbnail(LayerModel layer)
{
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs b/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs
index b8a58f535..14b74f57b 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Mouse/MouseType.cs
@@ -15,8 +15,8 @@ namespace Artemis.Profiles.Layers.Types.Mouse
public class MouseType : ILayerType
{
public string Name => "Mouse";
- public bool ShowInEdtor { get; } = false;
- public DrawType DrawType { get; } = DrawType.Mouse;
+ public bool ShowInEdtor => false;
+ public DrawType DrawType => DrawType.Mouse;
public ImageSource DrawThumbnail(LayerModel layer)
{
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematType.cs b/Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematType.cs
index e9b24af82..d4986e7c0 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Mousemat/MousematType.cs
@@ -15,8 +15,8 @@ namespace Artemis.Profiles.Layers.Types.Mousemat
public class MousematType : ILayerType
{
public string Name => "Mousemat";
- public bool ShowInEdtor { get; } = false;
- public DrawType DrawType { get; } = DrawType.Mousemat;
+ public bool ShowInEdtor => false;
+ public DrawType DrawType => DrawType.Mousemat;
public ImageSource DrawThumbnail(LayerModel layer)
{
diff --git a/Artemis/Artemis/Resources/Keyboards/default-profiles.zip b/Artemis/Artemis/Resources/Keyboards/default-profiles.zip
index c31d8020a..5713033cc 100644
Binary files a/Artemis/Artemis/Resources/Keyboards/default-profiles.zip and b/Artemis/Artemis/Resources/Keyboards/default-profiles.zip differ
diff --git a/Artemis/Artemis/Utilities/ImageUtilities.cs b/Artemis/Artemis/Utilities/ImageUtilities.cs
index 3326e3253..f9a3f1ae9 100644
--- a/Artemis/Artemis/Utilities/ImageUtilities.cs
+++ b/Artemis/Artemis/Utilities/ImageUtilities.cs
@@ -90,5 +90,21 @@ namespace Artemis.Utilities
bitmap.Render(iconImage);
return bitmap;
}
+
+ public static DrawingImage BitmapToDrawingImage(Bitmap b, Rect rect)
+ {
+ if (b == null)
+ return new DrawingImage();
+
+ var visual = new DrawingVisual();
+ using (var c = visual.RenderOpen())
+ {
+ c.DrawImage(BitmapToBitmapImage(b), rect);
+ }
+
+ var image = new DrawingImage(visual.Drawing);
+ image.Freeze();
+ return image;
+ }
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/ViewModels/DebugViewModel.cs b/Artemis/Artemis/ViewModels/DebugViewModel.cs
index 2dab9f89b..43cb16d5b 100644
--- a/Artemis/Artemis/ViewModels/DebugViewModel.cs
+++ b/Artemis/Artemis/ViewModels/DebugViewModel.cs
@@ -3,13 +3,28 @@ using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Media;
+using Artemis.Managers;
+using Artemis.Utilities;
using Caliburn.Micro;
+using Action = System.Action;
namespace Artemis.ViewModels
{
public class DebugViewModel : Screen
{
+ private readonly DeviceManager _deviceManager;
+
private DrawingImage _razerDisplay;
+ private DrawingImage _keyboard;
+ private DrawingImage _mouse;
+ private DrawingImage _headset;
+ private DrawingImage _mousemat;
+ private DrawingImage _generic;
+
+ public DebugViewModel(DeviceManager deviceManager)
+ {
+ _deviceManager = deviceManager;
+ }
public DrawingImage RazerDisplay
{
@@ -22,6 +37,62 @@ namespace Artemis.ViewModels
}
}
+
+ public DrawingImage Keyboard
+ {
+ get { return _keyboard; }
+ set
+ {
+ if (Equals(value, _keyboard)) return;
+ _keyboard = value;
+ NotifyOfPropertyChange(() => Keyboard);
+ }
+ }
+
+ public DrawingImage Mouse
+ {
+ get { return _mouse; }
+ set
+ {
+ if (Equals(value, _mouse)) return;
+ _mouse = value;
+ NotifyOfPropertyChange(() => Mouse);
+ }
+ }
+
+ public DrawingImage Headset
+ {
+ get { return _headset; }
+ set
+ {
+ if (Equals(value, _headset)) return;
+ _headset = value;
+ NotifyOfPropertyChange(() => Headset);
+ }
+ }
+
+ public DrawingImage Mousemat
+ {
+ get { return _mousemat; }
+ set
+ {
+ if (Equals(value, _mousemat)) return;
+ _mousemat = value;
+ NotifyOfPropertyChange(() => Mousemat);
+ }
+ }
+
+ public DrawingImage Generic
+ {
+ get { return _generic; }
+ set
+ {
+ if (Equals(value, _generic)) return;
+ _generic = value;
+ NotifyOfPropertyChange(() => Generic);
+ }
+ }
+
public void OpenLog()
{
// Get the logging directory
@@ -52,5 +123,24 @@ namespace Artemis.ViewModels
drawnDisplay.Freeze();
RazerDisplay = drawnDisplay;
}
+
+ public void DrawFrame(RenderFrame frame)
+ {
+ // No point updating the display if the view isn't visible
+ if (!IsActive)
+ return;
+
+ // Only update keyboard if there is an active keyboard
+ if (_deviceManager.ActiveKeyboard != null)
+ {
+ var rect = _deviceManager.ActiveKeyboard.KeyboardRectangle(1);
+ Keyboard = ImageUtilities.BitmapToDrawingImage(frame.KeyboardBitmap, rect);
+ }
+
+ Mouse = ImageUtilities.BitmapToDrawingImage(frame.MouseBitmap, new Rect(0, 0, 10, 10));
+ Headset = ImageUtilities.BitmapToDrawingImage(frame.HeadsetBitmap, new Rect(0, 0, 10, 10));
+ Mousemat = ImageUtilities.BitmapToDrawingImage(frame.MousematBitmap, new Rect(0, 0, 10, 10));
+ Generic = ImageUtilities.BitmapToDrawingImage(frame.GenericBitmap, new Rect(0, 0, 10, 10));
+ }
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs b/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs
index 215b23bde..c038d47ba 100644
--- a/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs
+++ b/Artemis/Artemis/ViewModels/Flyouts/FlyoutSettingsViewModel.cs
@@ -70,11 +70,7 @@ namespace Artemis.ViewModels.Flyouts
{
get
{
- var collection = new BindableCollection
- (MainManager.DeviceManager.KeyboardProviders.Select(k => k.Name));
-
- collection.Insert(0, "None");
- return collection;
+ return new BindableCollection(MainManager.DeviceManager.KeyboardProviders.Select(k => k.Name));
}
}
diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs
index 47605c4f7..6dce58e43 100644
--- a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs
+++ b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
@@ -45,6 +44,57 @@ namespace Artemis.ViewModels.Profiles
deviceManager.OnKeyboardChangedEvent += DeviceManagerOnOnKeyboardChangedEvent;
}
+ public ProfileModel SelectedProfile { get; set; }
+
+ public LayerModel SelectedLayer
+ {
+ get { return _selectedLayer; }
+ set
+ {
+ if (Equals(value, _selectedLayer)) return;
+ _selectedLayer = value;
+ NotifyOfPropertyChange(() => SelectedLayer);
+ }
+ }
+
+ public DrawingImage KeyboardPreview
+ {
+ get { return _keyboardPreview; }
+ set
+ {
+ if (Equals(value, _keyboardPreview)) return;
+ _keyboardPreview = value;
+ NotifyOfPropertyChange(() => KeyboardPreview);
+ }
+ }
+
+ public double BlurRadius
+ {
+ get { return _blurRadius; }
+ set
+ {
+ if (value.Equals(_blurRadius)) return;
+ _blurRadius = value;
+ NotifyOfPropertyChange(() => BlurRadius);
+ }
+ }
+
+ public bool ShowAll
+ {
+ get { return _showAll; }
+ set
+ {
+ if (value == _showAll) return;
+ _showAll = value;
+ NotifyOfPropertyChange(() => ShowAll);
+ }
+ }
+
+ public ImageSource KeyboardImage => ImageUtilities
+ .BitmapToBitmapImage(_deviceManager.ActiveKeyboard?.PreviewSettings.Image ?? Resources.none);
+
+ public bool Activated { get; set; }
+
private void LoopManagerOnRenderCompleted(object sender, EventArgs eventArgs)
{
if (!Activated)
@@ -55,7 +105,8 @@ namespace Artemis.ViewModels.Profiles
_blurProgress = _blurProgress + 0.025;
BlurRadius = (Math.Sin(_blurProgress*Math.PI) + 1)*10 + 10;
- if (SelectedProfile == null || _deviceManager.ActiveKeyboard == null)
+ // Besides the usual checks, also check if the ActiveKeyboard isn't the NoneKeyboard
+ if (SelectedProfile == null || _deviceManager.ActiveKeyboard == null || _deviceManager.ActiveKeyboard.Slug == "none")
{
var preview = new DrawingImage();
preview.Freeze();
@@ -127,57 +178,6 @@ namespace Artemis.ViewModels.Profiles
KeyboardPreview = drawnPreview;
}
- public ProfileModel SelectedProfile { get; set; }
-
- public LayerModel SelectedLayer
- {
- get { return _selectedLayer; }
- set
- {
- if (Equals(value, _selectedLayer)) return;
- _selectedLayer = value;
- NotifyOfPropertyChange(() => SelectedLayer);
- }
- }
-
- public DrawingImage KeyboardPreview
- {
- get { return _keyboardPreview; }
- set
- {
- if (Equals(value, _keyboardPreview)) return;
- _keyboardPreview = value;
- NotifyOfPropertyChange(() => KeyboardPreview);
- }
- }
-
- public double BlurRadius
- {
- get { return _blurRadius; }
- set
- {
- if (value.Equals(_blurRadius)) return;
- _blurRadius = value;
- NotifyOfPropertyChange(() => BlurRadius);
- }
- }
-
- public bool ShowAll
- {
- get { return _showAll; }
- set
- {
- if (value == _showAll) return;
- _showAll = value;
- NotifyOfPropertyChange(() => ShowAll);
- }
- }
-
- public ImageSource KeyboardImage => ImageUtilities
- .BitmapToBitmapImage(_deviceManager.ActiveKeyboard?.PreviewSettings.Image ?? Resources.none);
-
- public bool Activated { get; set; }
-
private void DeviceManagerOnOnKeyboardChangedEvent(object sender, KeyboardChangedEventArgs e)
{
NotifyOfPropertyChange(() => KeyboardImage);
diff --git a/Artemis/Artemis/Views/DebugView.xaml b/Artemis/Artemis/Views/DebugView.xaml
index 32f3d9e9d..6e361c581 100644
--- a/Artemis/Artemis/Views/DebugView.xaml
+++ b/Artemis/Artemis/Views/DebugView.xaml
@@ -12,27 +12,71 @@
+
+
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-