diff --git a/src/Artemis.Core/Models/Profile/ColorGradient.cs b/src/Artemis.Core/Models/Profile/ColorGradient.cs
index b702f7e6e..921f7caf6 100644
--- a/src/Artemis.Core/Models/Profile/ColorGradient.cs
+++ b/src/Artemis.Core/Models/Profile/ColorGradient.cs
@@ -44,6 +44,31 @@ namespace Artemis.Core.Models.Profile
{
OnPropertyChanged(nameof(Colors));
}
+
+ public SKColor GetColor(float position)
+ {
+ var point = Colors.SingleOrDefault(f => f.Position == position);
+ if (point != null) return point.Color;
+
+ var before = Colors.First(w => w.Position == Colors.Min(m => m.Position));
+ var after = Colors.First(w => w.Position == Colors.Max(m => m.Position));
+
+ foreach (var gs in Colors)
+ {
+ if (gs.Position < position && gs.Position > before.Position)
+ before = gs;
+
+ if (gs.Position >= position && gs.Position < after.Position)
+ after = gs;
+ }
+
+ return new SKColor(
+ (byte) ((position - before.Position) * (after.Color.Red - before.Color.Red) / (after.Position - before.Position) + before.Color.Red),
+ (byte) ((position - before.Position) * (after.Color.Green - before.Color.Green) / (after.Position - before.Position) + before.Color.Green),
+ (byte) ((position - before.Position) * (after.Color.Blue - before.Color.Blue) / (after.Position - before.Position) + before.Color.Blue),
+ (byte) ((position - before.Position) * (after.Color.Alpha - before.Color.Alpha) / (after.Position - before.Position) + before.Color.Alpha)
+ );
+ }
}
public class ColorGradientColor : INotifyPropertyChanged
diff --git a/src/Artemis.UI.Shared/Screens/Dialogs/ConfirmDialogViewModel.cs b/src/Artemis.UI.Shared/Screens/Dialogs/ConfirmDialogViewModel.cs
index 47e71b7fd..9443acaf1 100644
--- a/src/Artemis.UI.Shared/Screens/Dialogs/ConfirmDialogViewModel.cs
+++ b/src/Artemis.UI.Shared/Screens/Dialogs/ConfirmDialogViewModel.cs
@@ -19,12 +19,14 @@ namespace Artemis.UI.Shared.Screens.Dialogs
public void Confirm()
{
- Session.Close(true);
+ if (!Session.IsEnded)
+ Session.Close(true);
}
public void Cancel()
{
- Session.Close(false);
+ if (!Session.IsEnded)
+ Session.Close(false);
}
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml b/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml
index d996b1624..4a9244a62 100644
--- a/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml
+++ b/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml
@@ -41,43 +41,41 @@
Gradient
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Stops
diff --git a/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml.cs b/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml.cs
index d3e8d5eb1..ac1ce5a91 100644
--- a/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml.cs
+++ b/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditor.xaml.cs
@@ -32,7 +32,7 @@ namespace Artemis.UI.Shared.Screens.GradientEditor
InitializeComponent();
ColorGradient = colorGradient;
}
-
+
public ColorGradient ColorGradient
{
get => (ColorGradient) GetValue(ColorGradientProperty);
@@ -57,5 +57,14 @@ namespace Artemis.UI.Shared.Screens.GradientEditor
editor.OnPropertyChanged(nameof(ColorGradient));
editor._inCallback = false;
}
+
+ private void Rectangle_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
+ {
+ var position = e.GetPosition((IInputElement) sender);
+ // Position ranges from 0.0 to 1.0
+ var newPosition = (float) Math.Min(1, Math.Max(0, Math.Round((position.X) / 435.0, 3, MidpointRounding.AwayFromZero)));
+
+ ColorGradient.Colors.Add(new ColorGradientColor(ColorGradient.GetColor(newPosition), newPosition));
+ }
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditorColor.xaml.cs b/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditorColor.xaml.cs
index fb56d9b5c..ec7031e29 100644
--- a/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditorColor.xaml.cs
+++ b/src/Artemis.UI.Shared/Screens/GradientEditor/GradientEditorColor.xaml.cs
@@ -99,6 +99,7 @@ namespace Artemis.UI.Shared.Screens.GradientEditor
}
((IInputElement) sender).ReleaseMouseCapture();
+ e.Handled = true;
}
private void ColorStop_MouseMove(object sender, MouseEventArgs e)