Browse Source

Improve ColorChanged event implementations

pull/8050/head
robloo 4 years ago
parent
commit
36ff1b74ac
  1. 27
      src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs
  2. 25
      src/Avalonia.Controls.ColorPicker/ColorSlider/ColorSlider.cs

27
src/Avalonia.Controls.ColorPicker/ColorPreviewer/ColorPreviewer.cs

@ -81,16 +81,26 @@ namespace Avalonia.Controls.Primitives
base.OnApplyTemplate(e);
}
/// <inheritdoc/>
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
if (change.Property == HsvColorProperty)
{
OnColorChanged(new ColorChangedEventArgs(
change.GetOldValue<HsvColor>().ToRgb(),
change.GetNewValue<HsvColor>().ToRgb()));
}
base.OnPropertyChanged(change);
}
/// <summary>
/// Called before the <see cref="ColorChanged"/> event occurs.
/// </summary>
/// <param name="newColor">The newly selected color.</param>
protected virtual void OnColorChanged(HsvColor newColor)
/// <param name="e">The <see cref="ColorChangedEventArgs"/> defining old/new colors.</param>
protected virtual void OnColorChanged(ColorChangedEventArgs e)
{
var oldColor = HsvColor;
HsvColor = newColor;
ColorChanged?.Invoke(this, new ColorChangedEventArgs(oldColor.ToRgb(), newColor.ToRgb()));
ColorChanged?.Invoke(this, e);
}
/// <summary>
@ -111,7 +121,10 @@ namespace Avalonia.Controls.Primitives
catch { }
HsvColor newHsvColor = AccentColorConverter.GetAccent(hsvColor, accentStep);
OnColorChanged(newHsvColor);
HsvColor oldHsvColor = HsvColor;
HsvColor = newHsvColor;
OnColorChanged(new ColorChangedEventArgs(oldHsvColor.ToRgb(), newHsvColor.ToRgb()));
}
}
}

25
src/Avalonia.Controls.ColorPicker/ColorSlider/ColorSlider.cs

@ -15,6 +15,11 @@ namespace Avalonia.Controls.Primitives
protected const string pcDarkSelector = ":dark-selector";
protected const string pcLightSelector = ":light-selector";
/// <summary>
/// Event for when the selected color changes within the slider.
/// </summary>
public event EventHandler<ColorChangedEventArgs>? ColorChanged;
private const double MaxHue = 359.99999999999999999;
private bool disableUpdates = false;
@ -321,6 +326,10 @@ namespace Avalonia.Controls.Primitives
}
UpdatePseudoClasses();
OnColorChanged(new ColorChangedEventArgs(
change.GetOldValue<Color>(),
change.GetNewValue<Color>()));
disableUpdates = false;
}
else if (change.Property == HsvColorProperty)
@ -336,6 +345,10 @@ namespace Avalonia.Controls.Primitives
}
UpdatePseudoClasses();
OnColorChanged(new ColorChangedEventArgs(
change.GetOldValue<HsvColor>().ToRgb(),
change.GetNewValue<HsvColor>().ToRgb()));
disableUpdates = false;
}
else if (change.Property == BoundsProperty)
@ -351,6 +364,7 @@ namespace Avalonia.Controls.Primitives
{
disableUpdates = true;
Color oldColor = Color;
(var color, var hsvColor) = GetColorFromSliderValues();
if (ColorModel == ColorModel.Hsva)
@ -365,10 +379,21 @@ namespace Avalonia.Controls.Primitives
}
UpdatePseudoClasses();
OnColorChanged(new ColorChangedEventArgs(oldColor, Color));
disableUpdates = false;
}
base.OnPropertyChanged(change);
}
/// <summary>
/// Called before the <see cref="ColorChanged"/> event occurs.
/// </summary>
/// <param name="e">The <see cref="ColorChangedEventArgs"/> defining old/new colors.</param>
protected virtual void OnColorChanged(ColorChangedEventArgs e)
{
ColorChanged?.Invoke(this, e);
}
}
}

Loading…
Cancel
Save