diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj
index d2fc48833..dbc607650 100644
--- a/Artemis/Artemis/Artemis.csproj
+++ b/Artemis/Artemis/Artemis.csproj
@@ -438,13 +438,14 @@
+
-
-
+
+
diff --git a/Artemis/Artemis/Models/EffectModel.cs b/Artemis/Artemis/Models/EffectModel.cs
index 5a455f702..ee14df07a 100644
--- a/Artemis/Artemis/Models/EffectModel.cs
+++ b/Artemis/Artemis/Models/EffectModel.cs
@@ -75,32 +75,32 @@ namespace Artemis.Models
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
{
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
- DataModel, keyboardRect, false, true, true);
+ 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);
+ devRec, false, true, "mouse");
}
// Render headsets layer-by-layer
using (var g = Graphics.FromImage(frame.HeadsetBitmap))
{
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Headset),
- DataModel, devRec, false, true);
+ DataModel, devRec, false, true, "headset");
}
// Render generic devices layer-by-layer
using (var g = Graphics.FromImage(frame.GenericBitmap))
{
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Generic),
- DataModel, devRec, false, true);
+ DataModel, devRec, false, true, "generic");
}
// Render mousemats layer-by-layer
using (var g = Graphics.FromImage(frame.MousematBitmap))
{
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Mousemat),
- DataModel, devRec, false, true);
+ DataModel, devRec, false, true, "mousemat");
}
// Trace debugging
diff --git a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs
index 7fb9fa7b0..d25ce2bf5 100644
--- a/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs
+++ b/Artemis/Artemis/Modules/Effects/ProfilePreview/ProfilePreviewModel.cs
@@ -62,35 +62,32 @@ namespace Artemis.Modules.Effects.ProfilePreview
using (var g = Graphics.FromImage(frame.KeyboardBitmap))
{
Profile.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Keyboard),
- DataModel, keyboardRect, true, true, true);
+ DataModel, keyboardRect, true, 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, true, true);
+ devRec, true, true, "mouse");
}
// Render headsets layer-by-layer
using (var g = Graphics.FromImage(frame.HeadsetBitmap))
{
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Headset),
- DataModel,
- devRec, true, true);
+ DataModel, devRec, true, true, "headset");
}
// Render generic devices layer-by-layer
using (var g = Graphics.FromImage(frame.GenericBitmap))
{
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Generic),
- DataModel,
- devRec, true, true);
+ DataModel, devRec, true, true, "generic");
}
// Render mousemats layer-by-layer
using (var g = Graphics.FromImage(frame.MousematBitmap))
{
Profile?.DrawLayers(g, renderLayers.Where(rl => rl.LayerType.DrawType == DrawType.Mousemat),
- DataModel,
- devRec, true, true);
+ DataModel, devRec, true, true, "mousemat");
}
}
}
diff --git a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs
index e967b4608..53fe4b775 100644
--- a/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs
+++ b/Artemis/Artemis/Modules/Effects/WindowsProfile/WindowsProfileModel.cs
@@ -161,7 +161,7 @@ namespace Artemis.Modules.Effects.WindowsProfile
#endregion
- #region Spotify
+ #region Music
public void SetupSpotify()
{
diff --git a/Artemis/Artemis/Profiles/Lua/Events/LuaProfileDrawingEventArgs.cs b/Artemis/Artemis/Profiles/Lua/Events/LuaDeviceDrawingEventArgs.cs
similarity index 60%
rename from Artemis/Artemis/Profiles/Lua/Events/LuaProfileDrawingEventArgs.cs
rename to Artemis/Artemis/Profiles/Lua/Events/LuaDeviceDrawingEventArgs.cs
index 8043af8e2..3e6b03f81 100644
--- a/Artemis/Artemis/Profiles/Lua/Events/LuaProfileDrawingEventArgs.cs
+++ b/Artemis/Artemis/Profiles/Lua/Events/LuaDeviceDrawingEventArgs.cs
@@ -5,15 +5,17 @@ using MoonSharp.Interpreter;
namespace Artemis.Profiles.Lua.Events
{
[MoonSharpUserData]
- public class LuaProfileDrawingEventArgs : EventArgs
+ public class LuaDeviceDrawingEventArgs : EventArgs
{
- public LuaProfileDrawingEventArgs(IDataModel dataModel, bool preview, LuaDrawWrapper luaDrawWrapper)
+ public LuaDeviceDrawingEventArgs(string deviceType, IDataModel dataModel, bool preview, LuaDrawWrapper luaDrawWrapper)
{
+ DeviceType = deviceType;
DataModel = dataModel;
Preview = preview;
Drawing = luaDrawWrapper;
}
+ public string DeviceType { get; set; }
public IDataModel DataModel { get; }
public bool Preview { get; }
public LuaDrawWrapper Drawing { get; set; }
diff --git a/Artemis/Artemis/Profiles/Lua/Events/LuaProfileUpdatingEventArgs.cs b/Artemis/Artemis/Profiles/Lua/Events/LuaDeviceUpdatingEventArgs.cs
similarity index 57%
rename from Artemis/Artemis/Profiles/Lua/Events/LuaProfileUpdatingEventArgs.cs
rename to Artemis/Artemis/Profiles/Lua/Events/LuaDeviceUpdatingEventArgs.cs
index 04da54a97..1b9c3b256 100644
--- a/Artemis/Artemis/Profiles/Lua/Events/LuaProfileUpdatingEventArgs.cs
+++ b/Artemis/Artemis/Profiles/Lua/Events/LuaDeviceUpdatingEventArgs.cs
@@ -5,14 +5,16 @@ using MoonSharp.Interpreter;
namespace Artemis.Profiles.Lua.Events
{
[MoonSharpUserData]
- public class LuaProfileUpdatingEventArgs : EventArgs
+ public class LuaDeviceUpdatingEventArgs : EventArgs
{
- public LuaProfileUpdatingEventArgs(IDataModel dataModel, bool preview)
+ public LuaDeviceUpdatingEventArgs(string deviceType, IDataModel dataModel, bool preview)
{
+ DeviceType = deviceType;
DataModel = dataModel;
Preview = preview;
}
+ public string DeviceType { get; set; }
public IDataModel DataModel { get; }
public bool Preview { get; }
}
diff --git a/Artemis/Artemis/Profiles/Lua/Events/LuaEventsWrapper.cs b/Artemis/Artemis/Profiles/Lua/Events/LuaEventsWrapper.cs
index 6924c3ff2..fd48f066f 100644
--- a/Artemis/Artemis/Profiles/Lua/Events/LuaEventsWrapper.cs
+++ b/Artemis/Artemis/Profiles/Lua/Events/LuaEventsWrapper.cs
@@ -12,16 +12,17 @@ namespace Artemis.Profiles.Lua.Events
{
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
public readonly string InvokeLock = string.Empty;
- public event EventHandler ProfileUpdating;
- public event EventHandler ProfileDrawing;
+ public event EventHandler DeviceUpdating;
+ public event EventHandler DeviceDrawing;
public event EventHandler KeyboardKeyPressed;
- internal void InvokeProfileUpdate(ProfileModel profileModel, IDataModel dataModel, bool preview)
+ internal void InvokeDeviceUpdate(ProfileModel profileModel, string deviceType, IDataModel dataModel,
+ bool preview)
{
try
{
- LuaInvoke(profileModel, () => OnProfileUpdating(new LuaProfileWrapper(profileModel),
- new LuaProfileUpdatingEventArgs(dataModel, preview)));
+ LuaInvoke(profileModel, () => OnDeviceUpdating(new LuaProfileWrapper(profileModel),
+ new LuaDeviceUpdatingEventArgs(deviceType, dataModel, preview)));
}
catch (Exception)
{
@@ -29,12 +30,13 @@ namespace Artemis.Profiles.Lua.Events
}
}
- internal void InvokeProfileDraw(ProfileModel profileModel, IDataModel dataModel, bool preview, DrawingContext c)
+ internal void InvokeDeviceDraw(ProfileModel profileModel, string deviceType, IDataModel dataModel, bool preview,
+ DrawingContext c)
{
try
{
- LuaInvoke(profileModel, () => OnProfileDrawing(new LuaProfileWrapper(profileModel),
- new LuaProfileDrawingEventArgs(dataModel, preview, new LuaDrawWrapper(c))));
+ LuaInvoke(profileModel, () => OnDeviceDrawing(new LuaProfileWrapper(profileModel),
+ new LuaDeviceDrawingEventArgs(deviceType, dataModel, preview, new LuaDrawWrapper(c))));
}
catch (Exception)
{
@@ -46,7 +48,7 @@ namespace Artemis.Profiles.Lua.Events
{
try
{
- LuaInvoke(profileModel, () => OnKeyboardKeyPressed(new LuaProfileWrapper(profileModel),
+ LuaInvoke(profileModel, () => OnKeyboardKeyPressed(new LuaProfileWrapper(profileModel),
keyboard, new LuaKeyPressEventArgs(key, x, y)));
}
catch (Exception)
@@ -78,14 +80,14 @@ namespace Artemis.Profiles.Lua.Events
}
}
- protected virtual void OnProfileUpdating(LuaProfileWrapper profileModel, LuaProfileUpdatingEventArgs e)
+ protected virtual void OnDeviceUpdating(LuaProfileWrapper profileModel, LuaDeviceUpdatingEventArgs e)
{
- ProfileUpdating?.Invoke(profileModel, e);
+ DeviceUpdating?.Invoke(profileModel, e);
}
- protected virtual void OnProfileDrawing(LuaProfileWrapper profileModel, LuaProfileDrawingEventArgs e)
+ protected virtual void OnDeviceDrawing(LuaProfileWrapper profileModel, LuaDeviceDrawingEventArgs e)
{
- ProfileDrawing?.Invoke(profileModel, e);
+ DeviceDrawing?.Invoke(profileModel, e);
}
protected virtual void OnKeyboardKeyPressed(LuaProfileWrapper profileModel, LuaKeyboardWrapper keyboard,
diff --git a/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs b/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs
index 72aa1457c..d38332f0a 100644
--- a/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs
+++ b/Artemis/Artemis/Profiles/Lua/LuaWrapper.cs
@@ -16,28 +16,30 @@ namespace Artemis.Profiles.Lua
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private static readonly Script LuaScript = new Script(CoreModules.Preset_SoftSandbox);
- private static KeyboardProvider _keyboardProvider;
private static FileSystemWatcher _watcher;
public static ProfileModel ProfileModel { get; private set; }
+ public static KeyboardProvider KeyboardProvider { get; private set; }
public static LuaProfileWrapper LuaProfileWrapper { get; private set; }
public static LuaBrushWrapper LuaBrushWrapper { get; private set; }
public static LuaKeyboardWrapper LuaKeyboardWrapper { get; private set; }
+ public static LuaMouseWrapper LuaMouseWrapper { get; set; }
public static LuaEventsWrapper LuaEventsWrapper { get; private set; }
public static void SetupLua(ProfileModel profileModel, KeyboardProvider keyboardProvider)
{
Clear();
- if (profileModel == null || keyboardProvider == null)
+ if ((profileModel == null) || (keyboardProvider == null))
return;
// Setup a new environment
- _keyboardProvider = keyboardProvider;
+ KeyboardProvider = keyboardProvider;
ProfileModel = profileModel;
LuaProfileWrapper = new LuaProfileWrapper(ProfileModel);
LuaBrushWrapper = new LuaBrushWrapper();
LuaKeyboardWrapper = new LuaKeyboardWrapper(keyboardProvider);
+ LuaMouseWrapper = new LuaMouseWrapper();
LuaEventsWrapper = new LuaEventsWrapper();
LuaScript.Options.DebugPrint = LuaPrint;
@@ -45,7 +47,10 @@ namespace Artemis.Profiles.Lua
LuaScript.Globals["Events"] = LuaEventsWrapper;
LuaScript.Globals["Brushes"] = LuaBrushWrapper;
LuaScript.Globals["Keyboard"] = LuaKeyboardWrapper;
-
+ LuaScript.Globals["Mouse"] = LuaMouseWrapper;
+
+ if (ProfileModel == null)
+ return;
if (ProfileModel.LuaScript.IsNullOrEmpty())
return;
@@ -82,6 +87,25 @@ namespace Artemis.Profiles.Lua
#endregion
+ public static void Clear()
+ {
+ lock (LuaScript)
+ {
+ // Clear old fields/properties
+ KeyboardProvider = null;
+ ProfileModel = null;
+ LuaKeyboardWrapper?.Dispose();
+ LuaKeyboardWrapper = null;
+
+ LuaScript.Globals.Clear();
+ LuaScript.Registry.Clear();
+ LuaScript.Registry.RegisterConstants();
+ LuaScript.Registry.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
+ LuaScript.Globals.RegisterConstants();
+ LuaScript.Globals.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
+ }
+ }
+
#region Editor
public static void OpenEditor()
@@ -134,29 +158,10 @@ namespace Artemis.Profiles.Lua
ProfileProvider.AddOrUpdate(ProfileModel);
- if (_keyboardProvider != null)
- SetupLua(ProfileModel, _keyboardProvider);
+ if (KeyboardProvider != null)
+ SetupLua(ProfileModel, KeyboardProvider);
}
#endregion
-
- public static void Clear()
- {
- lock (LuaScript)
- {
- // Clear old fields/properties
- _keyboardProvider = null;
- ProfileModel = null;
- LuaKeyboardWrapper?.Dispose();
- LuaKeyboardWrapper = null;
-
- LuaScript.Globals.Clear();
- LuaScript.Registry.Clear();
- LuaScript.Registry.RegisterConstants();
- LuaScript.Registry.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
- LuaScript.Globals.RegisterConstants();
- LuaScript.Globals.RegisterCoreModules(CoreModules.Preset_SoftSandbox);
- }
- }
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Profiles/LuaMouseWrapper.cs b/Artemis/Artemis/Profiles/LuaMouseWrapper.cs
new file mode 100644
index 000000000..acc0fdc81
--- /dev/null
+++ b/Artemis/Artemis/Profiles/LuaMouseWrapper.cs
@@ -0,0 +1,33 @@
+using System.Runtime.InteropServices;
+using System.Windows;
+using MoonSharp.Interpreter;
+
+namespace Artemis.Profiles
+{
+ [MoonSharpUserData]
+ public class LuaMouseWrapper
+ {
+ public int Y => (int) GetMousePosition().Y;
+
+ public int X => (int) GetMousePosition().X;
+
+
+ [DllImport("user32.dll")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static extern bool GetCursorPos(ref Win32Point pt);
+
+ public static Point GetMousePosition()
+ {
+ var w32Mouse = new Win32Point();
+ GetCursorPos(ref w32Mouse);
+ return new Point(w32Mouse.X, w32Mouse.Y);
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct Win32Point
+ {
+ public int X;
+ public int Y;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/Profiles/ProfileModel.cs b/Artemis/Artemis/Profiles/ProfileModel.cs
index 162fcbbd3..5c70ddc1e 100644
--- a/Artemis/Artemis/Profiles/ProfileModel.cs
+++ b/Artemis/Artemis/Profiles/ProfileModel.cs
@@ -99,8 +99,9 @@ namespace Artemis.Profiles
/// A rectangle matching the current keyboard's size on a scale of 4, used for clipping
/// Indicates wheter the layer is drawn as a preview, ignoring dynamic properties
/// Wheter or not to update the layer's animations
+ /// The type of layers that are being updated, for reference in LUA
internal void DrawLayers(Graphics g, IEnumerable renderLayers, IDataModel dataModel, Rect rect,
- bool preview, bool updateAnimations, bool triggerLua = false)
+ bool preview, bool updateAnimations, string updateType)
{
var visual = new DrawingVisual();
var layerModels = renderLayers.ToList();
@@ -113,16 +114,12 @@ namespace Artemis.Profiles
// Update the layers
foreach (var layerModel in layerModels)
layerModel.Update(dataModel, preview, updateAnimations);
-
- if (triggerLua)
- LuaWrapper.LuaEventsWrapper?.InvokeProfileUpdate(this, dataModel, preview);
+ LuaWrapper.LuaEventsWrapper?.InvokeDeviceUpdate(this, updateType, dataModel, preview);
// Draw the layers
foreach (var layerModel in layerModels)
layerModel.Draw(dataModel, c, preview, updateAnimations);
-
- if (triggerLua)
- LuaWrapper.LuaEventsWrapper?.InvokeProfileDraw(this, dataModel, preview, c);
+ LuaWrapper.LuaEventsWrapper?.InvokeDeviceDraw(this, updateType, dataModel, preview, c);
// Remove the clip
c.Pop();
diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs
index 4786ea954..13028c138 100644
--- a/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs
+++ b/Artemis/Artemis/ViewModels/Profiles/ProfileViewModel.cs
@@ -53,7 +53,7 @@ namespace Artemis.ViewModels.Profiles
if (_blurProgress > 2)
_blurProgress = 0;
_blurProgress = _blurProgress + 0.025;
- BlurRadius = (Math.Sin(_blurProgress * Math.PI) + 1) * 10 + 10;
+ BlurRadius = (Math.Sin(_blurProgress*Math.PI) + 1)*10 + 10;
if (SelectedProfile == null || _deviceManager.ActiveKeyboard == null || (!ShowAll && SelectedLayer == null))
{
@@ -92,7 +92,7 @@ namespace Artemis.ViewModels.Profiles
return;
}
- var pen = new Pen(new SolidColorBrush((Color)accentColor), 0.4);
+ var pen = new Pen(new SolidColorBrush((Color) accentColor), 0.4);
// Draw the selection outline and resize indicator
if (SelectedLayer != null && SelectedLayer.MustDraw())
@@ -115,7 +115,8 @@ namespace Artemis.ViewModels.Profiles
new Point(layerRect.BottomRight.X - 0.7, layerRect.BottomRight.Y - 0.7));
}
- LuaWrapper.LuaEventsWrapper?.InvokeProfileDraw(SelectedProfile, new ProfilePreviewDataModel(), true, drawingContext);
+ LuaWrapper.LuaEventsWrapper?.InvokeDeviceDraw(SelectedProfile, "preview", new ProfilePreviewDataModel(),
+ true, drawingContext);
// Remove the clip
drawingContext.Pop();