private void OnColorChanged <T>(AvaloniaPropertyChangedEventArgs <T> args) { // If we're in the process of internally updating the color, then we don't want to respond to the Color property changing, // aside from raising the ColorChanged event. if (!m_updatingColor) { var color = Color; m_currentRgb = new Rgb(color.R / 255.0, color.G / 255.0, color.B / 255.0); m_currentAlpha = color.A / 255.0; m_currentHsv = ColorConversion.RgbToHsv(m_currentRgb); m_currentHex = GetCurrentHexValue(); UpdateColorControls(ColorUpdateReason.ColorPropertyChanged); } var oldColor = args.OldValue.GetValueOrDefault <Color>(); var newColor = args.NewValue.GetValueOrDefault <Color>(); if (oldColor.A != newColor.A || oldColor.R != newColor.R || oldColor.G != newColor.G || oldColor.B != newColor.B) { var colorChangedEventArgs = new ColorChangedEventArgs(oldColor, newColor); ColorChanged?.Invoke(this, colorChangedEventArgs); } }
private void UpdateColor(Hsv hsv, ColorUpdateReason reason) { m_currentHsv = hsv; m_currentRgb = ColorConversion.HsvToRgb(hsv); m_currentHex = GetCurrentHexValue(); SetColorAndUpdateControls(reason); }
private void UpdateColor(Rgb rgb, ColorUpdateReason reason) { m_currentRgb = rgb; m_currentHsv = ColorConversion.RgbToHsv(m_currentRgb); m_currentHex = GetCurrentHexValue(); SetColorAndUpdateControls(reason); }
private void SetColorAndUpdateControls(ColorUpdateReason reason) { m_updatingColor = true; Color = ColorConversion.ColorFromRgba(m_currentRgb, m_currentAlpha); UpdateColorControls(reason); m_updatingColor = false; }
private string GetCurrentHexValue() { var colorHex = ColorConversion.ColorFromRgba(m_currentRgb, m_currentAlpha).ToUint32().ToString("x8", CultureInfo.InvariantCulture); if (!IsAlphaEnabled) { colorHex = colorHex.Substring(2); } return("#" + colorHex); }
private void InitializeColor() { var color = Color; m_currentRgb = new Rgb(color.R / 255.0, color.G / 255.0, color.B / 255.0); m_currentHsv = ColorConversion.RgbToHsv(m_currentRgb); m_currentAlpha = color.A / 255.0; m_currentHex = GetCurrentHexValue(); SetColorAndUpdateControls(ColorUpdateReason.InitializingColor); }
private static void AddGradientStop(LinearGradientBrush brush, double offset, Hsv hsvColor, double alpha) { var rgbColor = ColorConversion.HsvToRgb(hsvColor); var color = Color.FromArgb( (byte)Math.Round(alpha * 255), (byte)Math.Round(rgbColor.R * 255), (byte)Math.Round(rgbColor.G * 255), (byte)Math.Round(rgbColor.B * 255)); var stop = new GradientStop(color, offset); brush.GradientStops.Add(stop); }
private Rgb ApplyConstraintsToRgbColor(Rgb rgb) { double minHue = MinHue; double maxHue = MaxHue; var minSaturation = MinSaturation / 100.0; var maxSaturation = MaxSaturation / 100.0; var minValue = MinValue / 100.0; var maxValue = MaxValue / 100.0; var hsv = ColorConversion.RgbToHsv(rgb); hsv.H = Math.Min(Math.Max(hsv.H, minHue), maxHue); hsv.S = Math.Min(Math.Max(hsv.S, minSaturation), maxSaturation); hsv.V = Math.Min(Math.Max(hsv.V, minValue), maxValue); return(ColorConversion.HsvToRgb(hsv)); }
private string GetToolTipString() { var sliderValue = (uint)Math.Round(Value); if (ColorChannel == ColorPickerHsvChannel.Alpha) { return(string.Format( CultureInfo.CurrentCulture, LocalizedStrings.ToolTipStringAlphaSlider, sliderValue)); } else { var parentColorPicker = GetParentColorPicker(); if (parentColorPicker != null) { var currentHsv = parentColorPicker.CurrentHsv; string localizedString; switch (ColorChannel) { case ColorPickerHsvChannel.Hue: currentHsv.H = Value; localizedString = LocalizedStrings.ToolTipStringHueSliderWithColorName; break; case ColorPickerHsvChannel.Saturation: localizedString = LocalizedStrings.ToolTipStringSaturationSliderWithColorName; currentHsv.S = Value / 100; break; case ColorPickerHsvChannel.Value: localizedString = LocalizedStrings.ToolTipStringValueSliderWithColorName; currentHsv.V = Value / 100; break; default: throw new NotSupportedException("Invalid ColorPickerHsvChannel."); } return(string.Format( CultureInfo.CurrentCulture, localizedString, sliderValue, ColorHelpers.ToDisplayName(ColorConversion.ColorFromRgba(ColorConversion.HsvToRgb(currentHsv))))); } else { var localizedString = ColorChannel switch { ColorPickerHsvChannel.Hue => LocalizedStrings.ToolTipStringHueSliderWithoutColorName, ColorPickerHsvChannel.Saturation => LocalizedStrings.ToolTipStringSaturationSliderWithoutColorName, ColorPickerHsvChannel.Value => LocalizedStrings.ToolTipStringValueSliderWithoutColorName, _ => throw new NotSupportedException("Invalid ColorPickerHsvChannel."), }; return(string.Format( CultureInfo.CurrentCulture, localizedString, sliderValue)); } } }