mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Gradient picker - Properly react to gradient changes once again
This commit is contained in:
parent
b342eabe4d
commit
2bc882c814
@ -37,10 +37,7 @@
|
|||||||
Background="{StaticResource Checkerboard}">
|
Background="{StaticResource Checkerboard}">
|
||||||
<Rectangle Stroke="{DynamicResource NormalBorderBrush}" Cursor="Hand" MouseUp="UIElement_OnMouseUp">
|
<Rectangle Stroke="{DynamicResource NormalBorderBrush}" Cursor="Hand" MouseUp="UIElement_OnMouseUp">
|
||||||
<Rectangle.Fill>
|
<Rectangle.Fill>
|
||||||
<LinearGradientBrush
|
<LinearGradientBrush x:Name="GradientPreview" EndPoint="1,0" StartPoint="0,0" />
|
||||||
GradientStops="{Binding ColorGradient, Mode=OneWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource ColorGradientToGradientStopsConverter}}"
|
|
||||||
EndPoint="1,0"
|
|
||||||
StartPoint="0,0" />
|
|
||||||
</Rectangle.Fill>
|
</Rectangle.Fill>
|
||||||
</Rectangle>
|
</Rectangle>
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Specialized;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
using Artemis.Core;
|
using Artemis.Core;
|
||||||
using Artemis.UI.Shared.Properties;
|
using Artemis.UI.Shared.Properties;
|
||||||
using Artemis.UI.Shared.Services;
|
using Artemis.UI.Shared.Services;
|
||||||
@ -17,12 +19,14 @@ namespace Artemis.UI.Shared
|
|||||||
{
|
{
|
||||||
private static IColorPickerService? _colorPickerService;
|
private static IColorPickerService? _colorPickerService;
|
||||||
private bool _inCallback;
|
private bool _inCallback;
|
||||||
|
private ColorGradientToGradientStopsConverter _gradientConverter;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new instance of the <see cref="GradientPicker" /> class
|
/// Creates a new instance of the <see cref="GradientPicker" /> class
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public GradientPicker()
|
public GradientPicker()
|
||||||
{
|
{
|
||||||
|
_gradientConverter = new ColorGradientToGradientStopsConverter();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,10 +103,27 @@ namespace Artemis.UI.Shared
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
gradientPicker._inCallback = true;
|
gradientPicker._inCallback = true;
|
||||||
|
|
||||||
|
if (e.OldValue is ColorGradient oldGradient)
|
||||||
|
oldGradient.CollectionChanged -= gradientPicker.GradientChanged;
|
||||||
|
if (e.NewValue is ColorGradient newGradient)
|
||||||
|
newGradient.CollectionChanged += gradientPicker.GradientChanged;
|
||||||
|
gradientPicker.UpdateGradientStops();
|
||||||
gradientPicker.OnPropertyChanged(nameof(ColorGradient));
|
gradientPicker.OnPropertyChanged(nameof(ColorGradient));
|
||||||
|
|
||||||
gradientPicker._inCallback = false;
|
gradientPicker._inCallback = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GradientChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
Dispatcher.Invoke(UpdateGradientStops);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateGradientStops()
|
||||||
|
{
|
||||||
|
GradientPreview.GradientStops = (GradientStopCollection)_gradientConverter.Convert(ColorGradient, null!, null!, null!);
|
||||||
|
}
|
||||||
|
|
||||||
private void UIElement_OnMouseUp(object sender, MouseButtonEventArgs e)
|
private void UIElement_OnMouseUp(object sender, MouseButtonEventArgs e)
|
||||||
{
|
{
|
||||||
if (_colorPickerService == null)
|
if (_colorPickerService == null)
|
||||||
|
|||||||
@ -132,16 +132,12 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
|
|||||||
DisposeRightSideDynamicViewModel();
|
DisposeRightSideDynamicViewModel();
|
||||||
if (RightSideInputViewModel == null)
|
if (RightSideInputViewModel == null)
|
||||||
CreateRightSideInputViewModel();
|
CreateRightSideInputViewModel();
|
||||||
|
|
||||||
Type preferredType = DataModelConditionPredicate.GetPreferredRightSideType();
|
Type preferredType = DataModelConditionPredicate.GetPreferredRightSideType();
|
||||||
// Ensure the right static value is never null when the preferred type is a value type
|
if (preferredType != null && RightSideInputViewModel.TargetType != preferredType)
|
||||||
if (preferredType.IsValueType && DataModelConditionPredicate.RightStaticValue == null)
|
|
||||||
RightSideInputViewModel.Value = preferredType.GetDefault();
|
|
||||||
else
|
|
||||||
RightSideInputViewModel.Value = DataModelConditionPredicate.RightStaticValue;
|
|
||||||
|
|
||||||
if (RightSideInputViewModel.TargetType != preferredType)
|
|
||||||
RightSideInputViewModel.UpdateTargetType(preferredType);
|
RightSideInputViewModel.UpdateTargetType(preferredType);
|
||||||
|
|
||||||
|
RightSideInputViewModel.Value = DataModelConditionPredicate.RightStaticValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,6 +290,12 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
|
|||||||
private void RightSideSelectionViewModelOnSwitchToStaticRequested(object sender, EventArgs e)
|
private void RightSideSelectionViewModelOnSwitchToStaticRequested(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
DataModelConditionPredicate.PredicateType = ProfileRightSideType.Static;
|
DataModelConditionPredicate.PredicateType = ProfileRightSideType.Static;
|
||||||
|
|
||||||
|
// Ensure the right static value is never null when the preferred type is a value type
|
||||||
|
Type preferredType = DataModelConditionPredicate.GetPreferredRightSideType();
|
||||||
|
if (DataModelConditionPredicate.RightStaticValue == null && preferredType != null && preferredType.IsValueType)
|
||||||
|
DataModelConditionPredicate.UpdateRightSideStatic(preferredType.GetDefault());
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
|||||||
Modifier.DirectDataBinding.RemoveModifier(Modifier);
|
Modifier.DirectDataBinding.RemoveModifier(Modifier);
|
||||||
_profileEditorService.UpdateSelectedProfileElement();
|
_profileEditorService.UpdateSelectedProfileElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ParameterSelectionViewModelOnPropertySelected(object sender, DataModelInputDynamicEventArgs e)
|
private void ParameterSelectionViewModelOnPropertySelected(object sender, DataModelInputDynamicEventArgs e)
|
||||||
{
|
{
|
||||||
Modifier.UpdateParameterDynamic(e.DataModelPath);
|
Modifier.UpdateParameterDynamic(e.DataModelPath);
|
||||||
@ -139,13 +139,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
|||||||
// Parameter
|
// Parameter
|
||||||
if (DynamicSelectionViewModel != null)
|
if (DynamicSelectionViewModel != null)
|
||||||
DynamicSelectionViewModel.ChangeDataModelPath(Modifier.ParameterPath);
|
DynamicSelectionViewModel.ChangeDataModelPath(Modifier.ParameterPath);
|
||||||
else if (StaticInputViewModel != null)
|
else if (StaticInputViewModel != null)
|
||||||
{
|
|
||||||
// Ensure the right static value is never null when the preferred type is a value type
|
|
||||||
StaticInputViewModel.Value = Modifier.ParameterStaticValue;
|
StaticInputViewModel.Value = Modifier.ParameterStaticValue;
|
||||||
if (SelectedModifierType.ParameterType.IsValueType && StaticInputViewModel.Value == null)
|
|
||||||
StaticInputViewModel.Value = SelectedModifierType.ParameterType.GetDefault();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ExecuteSelectModifierTypeCommand(object context)
|
private void ExecuteSelectModifierTypeCommand(object context)
|
||||||
@ -197,6 +192,12 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
|||||||
private void DynamicSelectionViewModelOnSwitchToStaticRequested(object sender, EventArgs e)
|
private void DynamicSelectionViewModelOnSwitchToStaticRequested(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Modifier.ParameterType = ProfileRightSideType.Static;
|
Modifier.ParameterType = ProfileRightSideType.Static;
|
||||||
|
|
||||||
|
// Ensure the right static value is never null when the preferred type is a value type
|
||||||
|
if (SelectedModifierType.ParameterType != null &&
|
||||||
|
SelectedModifierType.ParameterType.IsValueType && Modifier.ParameterStaticValue == null)
|
||||||
|
Modifier.UpdateParameterStatic(SelectedModifierType.ParameterType.GetDefault());
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user