From f797bc470ac4b0c9db295d84c4ce22933b60b81a Mon Sep 17 00:00:00 2001 From: Robert Beekman Date: Thu, 27 Oct 2016 21:53:18 +0200 Subject: [PATCH] Final LUA brush implemented --- .../Lua/Brushes/LuaLinearGradientBrush.cs | 19 ++++---- .../Lua/Brushes/LuaRadialGradientBrush.cs | 47 +++++++++++++++++-- .../Artemis/Profiles/Lua/LuaBrushWrapper.cs | 9 ++-- 3 files changed, 58 insertions(+), 17 deletions(-) diff --git a/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs b/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs index 3c934e165..1d2508a2c 100644 --- a/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs +++ b/Artemis/Artemis/Profiles/Lua/Brushes/LuaLinearGradientBrush.cs @@ -13,13 +13,14 @@ namespace Artemis.Profiles.Lua.Brushes private readonly Script _script; private LinearGradientBrush _brush; - public LuaLinearGradientBrush(LinearGradientBrush linearGradientBrush) + public LuaLinearGradientBrush(Script script, LinearGradientBrush linearGradientBrush) { + _script = script; Brush = linearGradientBrush; } - public LuaLinearGradientBrush(Script script, Table gradientColors, double startX = 0.5, double startY = 0.0, - double endX = 0.5, double endY = 1.0) + public LuaLinearGradientBrush(Script script, Table gradientColors, + double startX, double startY, double endX, double endY) { _script = script; SetupBrush(gradientColors, startX, startY, endX, endY); @@ -44,7 +45,7 @@ namespace Artemis.Profiles.Lua.Brushes /// public Table Colors { - get { return CreateGradientTable(); } + get { return CreateGradientTable(_script, Brush.GradientStops); } set { var updatedBrush = Brush.CloneCurrentValue(); @@ -72,7 +73,7 @@ namespace Artemis.Profiles.Lua.Brushes /// /// /// - private GradientStopCollection CreateGradientCollection(Table gradientColors) + public static GradientStopCollection CreateGradientCollection(Table gradientColors) { var collection = new GradientStopCollection(); foreach (var gradientColor in gradientColors.Values) @@ -89,12 +90,12 @@ namespace Artemis.Profiles.Lua.Brushes /// Maps the current brush's GradientStopsCollection to a LUA table /// /// - private Table CreateGradientTable() + public static Table CreateGradientTable(Script script, GradientStopCollection gradientStops) { - var table = new Table(_script); - foreach (var gradientStop in Brush.GradientStops) + var table = new Table(script); + foreach (var gradientStop in gradientStops) { - var inner = new Table(_script); + var inner = new Table(script); inner.Append(DynValue.NewString(gradientStop.Color.ToHex())); inner.Append(DynValue.NewNumber(gradientStop.Offset)); table.Append(DynValue.NewTable(inner)); diff --git a/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs b/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs index 7e692e73f..89de10cbb 100644 --- a/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs +++ b/Artemis/Artemis/Profiles/Lua/Brushes/LuaRadialGradientBrush.cs @@ -1,4 +1,5 @@ -using System.Windows.Media; +using System.Windows; +using System.Windows.Media; using MoonSharp.Interpreter; using MoonSharp.Interpreter.Interop; @@ -7,13 +8,25 @@ namespace Artemis.Profiles.Lua.Brushes [MoonSharpUserData] public class LuaRadialGradientBrush : LuaBrush { + private readonly Script _script; private RadialGradientBrush _brush; - public LuaRadialGradientBrush(RadialGradientBrush radialGradientBrush) + public LuaRadialGradientBrush(Script script, RadialGradientBrush radialGradientBrush) { + _script = script; Brush = radialGradientBrush; } + public LuaRadialGradientBrush(Script script, Table gradientColors, + double centerX, double centerY, double originX, double originY) + { + _script = script; + SetupBrush(gradientColors, centerX, centerY, originX, originY); + } + + /// + /// The underlying brush + /// [MoonSharpVisible(false)] public new RadialGradientBrush Brush { @@ -25,10 +38,36 @@ namespace Artemis.Profiles.Lua.Brushes } } + /// + /// Gets or sets the Brush's GradientStops using a LUA table + /// public Table Colors { - get { throw new System.NotImplementedException(); } - set { throw new System.NotImplementedException(); } + get { return LuaLinearGradientBrush.CreateGradientTable(_script, Brush.GradientStops); } + set + { + var updatedBrush = Brush.CloneCurrentValue(); + updatedBrush.GradientStops = LuaLinearGradientBrush.CreateGradientCollection(value); + Brush = updatedBrush; + } + } + + /// + /// Configures the brush according to the provided values usable in LUA + /// + /// + /// + /// + /// + /// + private void SetupBrush(Table gradientColors, double centerX, double centerY, double originX, double originY) + { + var collection = LuaLinearGradientBrush.CreateGradientCollection(gradientColors); + Brush = new RadialGradientBrush(collection) + { + Center = new Point(centerX, centerY), + GradientOrigin = new Point(originX, originY) + }; } } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs b/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs index 5dcdcba8c..005ed0d35 100644 --- a/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs +++ b/Artemis/Artemis/Profiles/Lua/LuaBrushWrapper.cs @@ -1,5 +1,4 @@ -using System.Windows.Media; -using Artemis.Profiles.Lua.Brushes; +using Artemis.Profiles.Lua.Brushes; using MoonSharp.Interpreter; namespace Artemis.Profiles.Lua @@ -14,9 +13,11 @@ namespace Artemis.Profiles.Lua _script = script; } - public LuaRadialGradientBrush GetSolidColorBrush(string hexCode) + // 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) { - return new LuaRadialGradientBrush(new RadialGradientBrush()); + return new LuaRadialGradientBrush(_script, gradientColors, centerX, centerY, originX, originY); } public LuaLinearGradientBrush GetLinearGradientBrush(Table gradientColors,