1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

LUA Brush expansions

This commit is contained in:
Robert Beekman 2016-10-27 21:32:14 +02:00
parent c7c3614f3b
commit 2bd21bfc0e
11 changed files with 180 additions and 58 deletions

View File

@ -414,7 +414,7 @@
</Compile>
<Compile Include="Profiles\Layers\Types\Mousemat\MousematPropertiesViewModel.cs" />
<Compile Include="Profiles\Layers\Types\Mousemat\MousematType.cs" />
<Compile Include="Profiles\Lua\Brushes\ILuaBrush.cs" />
<Compile Include="Profiles\Lua\Brushes\LuaBrush.cs" />
<Compile Include="Profiles\Lua\Brushes\LuaLinearGradientBrush.cs" />
<Compile Include="Profiles\Lua\Brushes\LuaRadialGradientBrush.cs" />
<Compile Include="Profiles\Lua\LuaBrushWrapper.cs" />

View File

@ -16,9 +16,9 @@ namespace Artemis.DeviceProviders.Logitech
@"SOFTWARE\Classes\Installer\Dependencies\{ca67548a-5ebe-413a-b50c-4b9ceb6d66c6}") == null)
{
CantEnableText = "Couldn't connect to your Logitech keyboard.\n" +
"The Visual C++ 2012 Redistributable could not be found, which is required.\n" +
"Please download it by going to the following URL:\n\n" +
"https://www.microsoft.com/download/confirmation.aspx?id=30679";
"The Visual C++ 2012 Redistributable v11.0.61030.0 could not be found, which is required.\n" +
"Please download it by going to the following URL (link also in wiki):\n\n" +
"https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe";
return false;
}

View File

@ -1,9 +0,0 @@
using System.Windows.Media;
namespace Artemis.Profiles.Lua.Brushes
{
public interface ILuaBrush
{
Brush Brush { get; set; }
}
}

View File

@ -0,0 +1,13 @@
using System.Windows.Media;
using MoonSharp.Interpreter;
using MoonSharp.Interpreter.Interop;
namespace Artemis.Profiles.Lua.Brushes
{
[MoonSharpUserData]
public abstract class LuaBrush
{
[MoonSharpVisible(false)]
public Brush Brush { get; set; }
}
}

View File

@ -1,25 +1,105 @@
using System.Windows.Media;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using Artemis.Utilities;
using MoonSharp.Interpreter;
using MoonSharp.Interpreter.Interop;
namespace Artemis.Profiles.Lua.Brushes
{
[MoonSharpUserData]
public class LuaLinearGradientBrush : ILuaBrush
public class LuaLinearGradientBrush : LuaBrush
{
// ReSharper disable once SuggestBaseTypeForParameter
private readonly Script _script;
private LinearGradientBrush _brush;
public LuaLinearGradientBrush(LinearGradientBrush linearGradientBrush)
{
Brush = linearGradientBrush;
}
private void SetupBrush()
public LuaLinearGradientBrush(Script script, Table gradientColors, double startX = 0.5, double startY = 0.0,
double endX = 0.5, double endY = 1.0)
{
// TODO: Convert array of hex code and offset to gradient stop collection
var gradientStop = new GradientStop();
var collection = new GradientStopCollection();
Brush = new LinearGradientBrush();
_script = script;
SetupBrush(gradientColors, startX, startY, endX, endY);
}
public Brush Brush { get; set; }
/// <summary>
/// The underlying brush
/// </summary>
[MoonSharpVisible(false)]
public new LinearGradientBrush Brush
{
get { return _brush; }
set
{
_brush = value;
_brush.Freeze();
}
}
/// <summary>
/// Gets or sets the Brush's GradientStops using a LUA table
/// </summary>
public Table Colors
{
get { return CreateGradientTable(); }
set
{
var updatedBrush = Brush.CloneCurrentValue();
updatedBrush.GradientStops = CreateGradientCollection(value);
Brush = updatedBrush;
}
}
/// <summary>
/// Configures the brush according to the provided values usable in LUA
/// </summary>
/// <param name="gradientColors"></param>
/// <param name="startX"></param>
/// <param name="startY"></param>
/// <param name="endX"></param>
/// <param name="endY"></param>
private void SetupBrush(Table gradientColors, double startX, double startY, double endX, double endY)
{
var collection = CreateGradientCollection(gradientColors);
Brush = new LinearGradientBrush(collection, new Point(startX, startY), new Point(endX, endY));
}
/// <summary>
/// Maps a LUA table to a GradientStopsCollection
/// </summary>
/// <param name="gradientColors"></param>
/// <returns></returns>
private GradientStopCollection CreateGradientCollection(Table gradientColors)
{
var collection = new GradientStopCollection();
foreach (var gradientColor in gradientColors.Values)
{
var pair = gradientColor.Table.Values.ToList();
var hexCode = pair[0].String;
var position = pair[1].Number;
collection.Add(new GradientStop(new Color().FromHex(hexCode), position));
}
return collection;
}
/// <summary>
/// Maps the current brush's GradientStopsCollection to a LUA table
/// </summary>
/// <returns></returns>
private Table CreateGradientTable()
{
var table = new Table(_script);
foreach (var gradientStop in Brush.GradientStops)
{
var inner = new Table(_script);
inner.Append(DynValue.NewString(gradientStop.Color.ToHex()));
inner.Append(DynValue.NewNumber(gradientStop.Offset));
table.Append(DynValue.NewTable(inner));
}
return table;
}
}
}

View File

@ -1,17 +1,34 @@
using System.Windows.Media;
using MoonSharp.Interpreter;
using MoonSharp.Interpreter.Interop;
namespace Artemis.Profiles.Lua.Brushes
{
[MoonSharpUserData]
public class LuaRadialGradientBrush : ILuaBrush
public class LuaRadialGradientBrush : LuaBrush
{
// ReSharper disable once SuggestBaseTypeForParameter
private RadialGradientBrush _brush;
public LuaRadialGradientBrush(RadialGradientBrush radialGradientBrush)
{
Brush = radialGradientBrush;
}
public Brush Brush { get; set; }
[MoonSharpVisible(false)]
public new RadialGradientBrush Brush
{
get { return _brush; }
set
{
_brush = value;
_brush.Freeze();
}
}
public Table Colors
{
get { throw new System.NotImplementedException(); }
set { throw new System.NotImplementedException(); }
}
}
}

View File

@ -1,13 +1,15 @@
using System.Windows.Media;
using Artemis.Utilities;
using MoonSharp.Interpreter;
using MoonSharp.Interpreter.Interop;
namespace Artemis.Profiles.Lua.Brushes
{
[MoonSharpUserData]
public class LuaSolidColorBrush : ILuaBrush
public class LuaSolidColorBrush : LuaBrush
{
// ReSharper disable once SuggestBaseTypeForParameter
private SolidColorBrush _brush;
public LuaSolidColorBrush(SolidColorBrush solidColorBrush)
{
Brush = solidColorBrush;
@ -15,35 +17,30 @@ namespace Artemis.Profiles.Lua.Brushes
public LuaSolidColorBrush(string hexCode)
{
SetupBrush(hexCode);
}
public string HexCode
{
get
{
var c = ((SolidColorBrush) Brush).Color;
return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}
set { SetupBrush(value); }
Brush = new SolidColorBrush(new Color().FromHex(hexCode));
}
/// <summary>
/// The underlying brush
/// </summary>
[MoonSharpVisible(false)]
public Brush Brush { get; set; }
private void SetupBrush(string hexCode)
public new SolidColorBrush Brush
{
var convertFromString = ColorConverter.ConvertFromString(hexCode);
if (convertFromString != null)
get { return _brush; }
set
{
var col = (Color) convertFromString;
Brush = new SolidColorBrush(col);
Brush.Freeze();
}
else
{
Brush = null;
_brush = value;
_brush.Freeze();
}
}
/// <summary>
/// Gets or sets the brush's color using a hex notation
/// </summary>
public string Color
{
get { return Brush.Color.ToHex(); }
set { Brush = new SolidColorBrush(new Color().FromHex(value)); }
}
}
}

View File

@ -1,4 +1,5 @@
using Artemis.Profiles.Lua.Brushes;
using System.Windows.Media;
using Artemis.Profiles.Lua.Brushes;
using MoonSharp.Interpreter;
namespace Artemis.Profiles.Lua
@ -6,17 +7,25 @@ namespace Artemis.Profiles.Lua
[MoonSharpUserData]
public class LuaBrushWrapper
{
public static LuaSolidColorBrush GetSolidColorBrush(string hexCode)
private readonly Script _script;
public LuaBrushWrapper(Script script)
{
return new LuaSolidColorBrush(hexCode);
_script = script;
}
public static LuaSolidColorBrush GetLinearGradientBrush(string hexCode)
public LuaRadialGradientBrush GetSolidColorBrush(string hexCode)
{
return new LuaSolidColorBrush(hexCode);
return new LuaRadialGradientBrush(new RadialGradientBrush());
}
public static LuaSolidColorBrush GetRadialGradientBrush(string hexCode)
public LuaLinearGradientBrush GetLinearGradientBrush(Table gradientColors,
double startX = 0.5, double startY = 0.0, double endX = 0.5, double endY = 1.0)
{
return new LuaLinearGradientBrush(_script, gradientColors, startX, startY, endX, endY);
}
public LuaSolidColorBrush GetRadialGradientBrush(string hexCode)
{
return new LuaSolidColorBrush(hexCode);
}

View File

@ -17,7 +17,7 @@ namespace Artemis.Profiles.Lua
_ctx = ctx;
}
public void DrawCircle(ILuaBrush luaBrush, double x, double y, double height, double width)
public void DrawCircle(LuaBrush luaBrush, double x, double y, double height, double width)
{
var center = new Point(x + width/2, y + height/2);
_ctx.DrawEllipse(luaBrush.Brush, new Pen(), center, width, height);

View File

@ -17,7 +17,7 @@ namespace Artemis.Profiles.Lua
{
ProfileModel = profileModel;
LuaProfileWrapper = new LuaProfileWrapper(ProfileModel);
LuaBrushWrapper = new LuaBrushWrapper();
LuaBrushWrapper = new LuaBrushWrapper(LuaScript);
SetupLuaScript();
}

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Windows.Media;
using Brush = System.Windows.Media.Brush;
using Color = System.Drawing.Color;
using ColorConverter = System.Windows.Media.ColorConverter;
namespace Artemis.Utilities
{
@ -47,6 +48,20 @@ namespace Artemis.Utilities
return returnColor;
}
public static System.Windows.Media.Color FromHex(this System.Windows.Media.Color c, string hex)
{
var convertFromString = ColorConverter.ConvertFromString(hex);
if (convertFromString != null)
return (System.Windows.Media.Color) convertFromString;
throw new ArgumentException("Invalid hex color code");
}
public static string ToHex(this System.Windows.Media.Color c)
{
return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}
public static Color ShiftColor(Color c, int shiftAmount)
{
int newRed = c.R;