diff --git a/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs b/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs index 1d2508a2c..a9787fbe4 100644 --- a/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs +++ b/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs @@ -16,7 +16,7 @@ namespace Artemis.Profiles.Lua.Brushes public LuaLinearGradientBrush(Script script, LinearGradientBrush linearGradientBrush) { _script = script; - Brush = linearGradientBrush; + LinearGradientBrush = linearGradientBrush; } public LuaLinearGradientBrush(Script script, Table gradientColors, @@ -30,13 +30,14 @@ namespace Artemis.Profiles.Lua.Brushes /// The underlying brush /// [MoonSharpVisible(false)] - public new LinearGradientBrush Brush + public LinearGradientBrush LinearGradientBrush { get { return _brush; } set { _brush = value; _brush.Freeze(); + Brush = _brush; } } @@ -45,12 +46,12 @@ namespace Artemis.Profiles.Lua.Brushes /// public Table Colors { - get { return CreateGradientTable(_script, Brush.GradientStops); } + get { return CreateGradientTable(_script, LinearGradientBrush.GradientStops); } set { - var updatedBrush = Brush.CloneCurrentValue(); + var updatedBrush = LinearGradientBrush.CloneCurrentValue(); updatedBrush.GradientStops = CreateGradientCollection(value); - Brush = updatedBrush; + LinearGradientBrush = updatedBrush; } } @@ -65,7 +66,7 @@ namespace Artemis.Profiles.Lua.Brushes 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)); + LinearGradientBrush = new LinearGradientBrush(collection, new Point(startX, startY), new Point(endX, endY)); } /// diff --git a/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs b/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs index 89de10cbb..b698d86b7 100644 --- a/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs +++ b/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs @@ -14,7 +14,7 @@ namespace Artemis.Profiles.Lua.Brushes public LuaRadialGradientBrush(Script script, RadialGradientBrush radialGradientBrush) { _script = script; - Brush = radialGradientBrush; + RadialGradientBrush = radialGradientBrush; } public LuaRadialGradientBrush(Script script, Table gradientColors, @@ -28,13 +28,14 @@ namespace Artemis.Profiles.Lua.Brushes /// The underlying brush /// [MoonSharpVisible(false)] - public new RadialGradientBrush Brush + public RadialGradientBrush RadialGradientBrush { get { return _brush; } set { _brush = value; _brush.Freeze(); + Brush = _brush; } } @@ -43,12 +44,12 @@ namespace Artemis.Profiles.Lua.Brushes /// public Table Colors { - get { return LuaLinearGradientBrush.CreateGradientTable(_script, Brush.GradientStops); } + get { return LuaLinearGradientBrush.CreateGradientTable(_script, RadialGradientBrush.GradientStops); } set { - var updatedBrush = Brush.CloneCurrentValue(); + var updatedBrush = RadialGradientBrush.CloneCurrentValue(); updatedBrush.GradientStops = LuaLinearGradientBrush.CreateGradientCollection(value); - Brush = updatedBrush; + RadialGradientBrush = updatedBrush; } } @@ -63,7 +64,7 @@ namespace Artemis.Profiles.Lua.Brushes private void SetupBrush(Table gradientColors, double centerX, double centerY, double originX, double originY) { var collection = LuaLinearGradientBrush.CreateGradientCollection(gradientColors); - Brush = new RadialGradientBrush(collection) + RadialGradientBrush = new RadialGradientBrush(collection) { Center = new Point(centerX, centerY), GradientOrigin = new Point(originX, originY) diff --git a/Artemis/Artemis/Profiles/Lua/Brushes/LuaSolidColorBrush.cs b/Artemis/Artemis/Profiles/Lua/Brushes/LuaSolidColorBrush.cs index 022859610..9124d2d96 100644 --- a/Artemis/Artemis/Profiles/Lua/Brushes/LuaSolidColorBrush.cs +++ b/Artemis/Artemis/Profiles/Lua/Brushes/LuaSolidColorBrush.cs @@ -12,25 +12,26 @@ namespace Artemis.Profiles.Lua.Brushes public LuaSolidColorBrush(SolidColorBrush solidColorBrush) { - Brush = solidColorBrush; + SolidColorBrush = solidColorBrush; } public LuaSolidColorBrush(string hexCode) { - Brush = new SolidColorBrush(new Color().FromHex(hexCode)); + SolidColorBrush = new SolidColorBrush(new Color().FromHex(hexCode)); } /// /// The underlying brush /// [MoonSharpVisible(false)] - public new SolidColorBrush Brush + public SolidColorBrush SolidColorBrush { get { return _brush; } set { _brush = value; _brush.Freeze(); + Brush = _brush; } } @@ -39,8 +40,8 @@ namespace Artemis.Profiles.Lua.Brushes /// public string Color { - get { return Brush.Color.ToHex(); } - set { Brush = new SolidColorBrush(new Color().FromHex(value)); } + get { return SolidColorBrush.Color.ToHex(); } + set { SolidColorBrush = new SolidColorBrush(new Color().FromHex(value)); } } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs b/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs index 005ed0d35..3b899914a 100644 --- a/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs +++ b/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs @@ -13,22 +13,22 @@ namespace Artemis.Profiles.Lua _script = script; } - // TODO: Check default values - public LuaRadialGradientBrush GetSolidColorBrush(Table gradientColors, - double centerX = 0.5, double centerY = 0.5, double originX = 0.5, double originY = 0.5) + public LuaSolidColorBrush GetSolidColorBrush(string hexCode) { - return new LuaRadialGradientBrush(_script, gradientColors, centerX, centerY, originX, originY); + return new LuaSolidColorBrush(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) + // TODO: Check default values + public LuaRadialGradientBrush GetRadialGradientBrush(Table gradientColors, + double centerX = 0.5, double centerY = 0.5, double originX = 0.5, double originY = 0.5) { - return new LuaSolidColorBrush(hexCode); + return new LuaRadialGradientBrush(_script, gradientColors, centerX, centerY, originX, originY); } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs b/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs index e7a6327e8..4087c849b 100644 --- a/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs +++ b/Artemis/Artemis/Profiles/Lua/LuaDrawWrapper.cs @@ -1,9 +1,9 @@ -using System.Runtime.InteropServices; +using System.Globalization; +using System.Linq; using System.Windows; using System.Windows.Media; using Artemis.Profiles.Lua.Brushes; using MoonSharp.Interpreter; -using Pen = System.Windows.Media.Pen; namespace Artemis.Profiles.Lua { @@ -17,10 +17,32 @@ namespace Artemis.Profiles.Lua _ctx = ctx; } - public void DrawCircle(LuaBrush luaBrush, double x, double y, double height, double width) + public void DrawEllipse(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); } + + public void DrawLine(LuaBrush luaBrush, double startX, double startY, double endX, double endY, + double thickness) + { + _ctx.DrawLine(new Pen(luaBrush.Brush, thickness), new Point(startX, startY), new Point(endX, endY)); + } + + public void DrawRectangle(LuaBrush luaBrush, double x, double y, double height, double width) + { + _ctx.DrawRectangle(luaBrush.Brush, new Pen(), new Rect(x, y, width, height)); + } + + public void DrawText(string text, string fontName, int fontSize, LuaBrush luaBrush, double x, double y) + { + var font = Fonts.SystemTypefaces.FirstOrDefault(f => f.FontFamily.ToString() == fontName); + if (font == null) + throw new ScriptRuntimeException($"Font '{fontName}' not found"); + + var formatted = new FormattedText(text, CultureInfo.InvariantCulture, FlowDirection.LeftToRight, font, + fontSize, luaBrush.Brush); + _ctx.DrawText(formatted, new Point(x, y)); + } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Lua/LuaEventsWrapper.cs b/Artemis/Artemis/Profiles/Lua/LuaEventsWrapper.cs index aa6ebcb0a..a1d3f8e3b 100644 --- a/Artemis/Artemis/Profiles/Lua/LuaEventsWrapper.cs +++ b/Artemis/Artemis/Profiles/Lua/LuaEventsWrapper.cs @@ -15,14 +15,30 @@ namespace Artemis.Profiles.Lua internal void InvokeProfileUpdate(ProfileModel profileModel, IDataModel dataModel, bool preview) { - OnLuaProfileUpdating(new LuaProfileWrapper(profileModel), + try + { + OnLuaProfileUpdating(new LuaProfileWrapper(profileModel), new LuaProfileUpdatingEventArgs(dataModel, preview)); + } + catch (Exception) + { + + } + } internal void InvokeProfileDraw(ProfileModel profileModel, IDataModel dataModel, bool preview, DrawingContext c) { - OnLuaProfileDrawing(new LuaProfileWrapper(profileModel), + try + { + OnLuaProfileDrawing(new LuaProfileWrapper(profileModel), new LuaProfileDrawingEventArgs(dataModel, preview, new LuaDrawWrapper(c))); + } + catch (Exception) + { + + } + }