mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Changed LUA Update and Draw event to work for every device type
This commit is contained in:
parent
a40728244a
commit
31196fb518
@ -438,13 +438,14 @@
|
||||
</Compile>
|
||||
<Compile Include="Profiles\Layers\Types\Mousemat\MousematPropertiesViewModel.cs" />
|
||||
<Compile Include="Profiles\Layers\Types\Mousemat\MousematType.cs" />
|
||||
<Compile Include="Profiles\LuaMouseWrapper.cs" />
|
||||
<Compile Include="Profiles\Lua\Brushes\LuaBrush.cs" />
|
||||
<Compile Include="Profiles\Lua\Brushes\LuaColor.cs" />
|
||||
<Compile Include="Profiles\Lua\Brushes\LuaLinearGradientBrush.cs" />
|
||||
<Compile Include="Profiles\Lua\Brushes\LuaRadialGradientBrush.cs" />
|
||||
<Compile Include="Profiles\Lua\Events\LuaKeyPressEventArgs.cs" />
|
||||
<Compile Include="Profiles\Lua\Events\LuaProfileDrawingEventArgs.cs" />
|
||||
<Compile Include="Profiles\Lua\Events\LuaProfileUpdatingEventArgs.cs" />
|
||||
<Compile Include="Profiles\Lua\Events\LuaDeviceDrawingEventArgs.cs" />
|
||||
<Compile Include="Profiles\Lua\Events\LuaDeviceUpdatingEventArgs.cs" />
|
||||
<Compile Include="Profiles\Lua\Brushes\LuaBrushWrapper.cs" />
|
||||
<Compile Include="Profiles\Lua\LuaDrawWrapper.cs" />
|
||||
<Compile Include="Profiles\Lua\Events\LuaEventsWrapper.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
|
||||
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,7 +161,7 @@ namespace Artemis.Modules.Effects.WindowsProfile
|
||||
|
||||
#endregion
|
||||
|
||||
#region Spotify
|
||||
#region Music
|
||||
|
||||
public void SetupSpotify()
|
||||
{
|
||||
|
||||
@ -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; }
|
||||
@ -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; }
|
||||
}
|
||||
@ -12,16 +12,17 @@ namespace Artemis.Profiles.Lua.Events
|
||||
{
|
||||
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||||
public readonly string InvokeLock = string.Empty;
|
||||
public event EventHandler<LuaProfileUpdatingEventArgs> ProfileUpdating;
|
||||
public event EventHandler<LuaProfileDrawingEventArgs> ProfileDrawing;
|
||||
public event EventHandler<LuaDeviceUpdatingEventArgs> DeviceUpdating;
|
||||
public event EventHandler<LuaDeviceDrawingEventArgs> DeviceDrawing;
|
||||
public event EventHandler<LuaKeyPressEventArgs> 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,
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
Artemis/Artemis/Profiles/LuaMouseWrapper.cs
Normal file
33
Artemis/Artemis/Profiles/LuaMouseWrapper.cs
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -99,8 +99,9 @@ namespace Artemis.Profiles
|
||||
/// <param name="rect">A rectangle matching the current keyboard's size on a scale of 4, used for clipping</param>
|
||||
/// <param name="preview">Indicates wheter the layer is drawn as a preview, ignoring dynamic properties</param>
|
||||
/// <param name="updateAnimations">Wheter or not to update the layer's animations</param>
|
||||
/// <param name="updateType">The type of layers that are being updated, for reference in LUA</param>
|
||||
internal void DrawLayers(Graphics g, IEnumerable<LayerModel> 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();
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user