mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-06-11 12:14:53 +08:00
Fixing the issue with HEX textbox not being updated with the correct RGB values (#12936)
* Fixing the issue with hex textbox not being updated with the correct values from RGB boxes #12931 * Update current color immediately when typing in RGB boxes #11108 * added expected words into dictionary
This commit is contained in:
parent
45b5545cf7
commit
46bfd2cdac
1
.github/actions/spell-check/expect.txt
vendored
1
.github/actions/spell-check/expect.txt
vendored
@ -1445,6 +1445,7 @@ nuget
|
|||||||
null
|
null
|
||||||
nullopt
|
nullopt
|
||||||
nullptr
|
nullptr
|
||||||
|
numberbox
|
||||||
NUMLOCK
|
NUMLOCK
|
||||||
NUMPAD
|
NUMPAD
|
||||||
nunit
|
nunit
|
||||||
|
@ -398,7 +398,7 @@
|
|||||||
Width="72"
|
Width="72"
|
||||||
ui:ControlHelper.CornerRadius="2,0,0,2"
|
ui:ControlHelper.CornerRadius="2,0,0,2"
|
||||||
AutomationProperties.Name="{x:Static p:Resources.Red_value}"
|
AutomationProperties.Name="{x:Static p:Resources.Red_value}"
|
||||||
ValueChanged="RGBNumberBox_ValueChanged"
|
TextBoxBase.TextChanged="RGBNumberBox_TextChanged"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Maximum="255" />
|
Maximum="255" />
|
||||||
|
|
||||||
@ -408,7 +408,7 @@
|
|||||||
Width="72"
|
Width="72"
|
||||||
ui:ControlHelper.CornerRadius="0"
|
ui:ControlHelper.CornerRadius="0"
|
||||||
AutomationProperties.Name="{x:Static p:Resources.Green_value}"
|
AutomationProperties.Name="{x:Static p:Resources.Green_value}"
|
||||||
ValueChanged="RGBNumberBox_ValueChanged"
|
TextBoxBase.TextChanged="RGBNumberBox_TextChanged"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Maximum="255" />
|
Maximum="255" />
|
||||||
|
|
||||||
@ -418,7 +418,7 @@
|
|||||||
Margin="-1,0,0,0"
|
Margin="-1,0,0,0"
|
||||||
ui:ControlHelper.CornerRadius="0,2,2,0"
|
ui:ControlHelper.CornerRadius="0,2,2,0"
|
||||||
AutomationProperties.Name="{x:Static p:Resources.Blue_value}"
|
AutomationProperties.Name="{x:Static p:Resources.Blue_value}"
|
||||||
ValueChanged="RGBNumberBox_ValueChanged"
|
TextBoxBase.TextChanged="RGBNumberBox_TextChanged"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
Maximum="255" />
|
Maximum="255" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
@ -12,6 +12,7 @@ using System.Windows.Input;
|
|||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Animation;
|
using System.Windows.Media.Animation;
|
||||||
using ColorPicker.Helpers;
|
using ColorPicker.Helpers;
|
||||||
|
using ModernWpf.Controls;
|
||||||
using ModernWpf.Controls.Primitives;
|
using ModernWpf.Controls.Primitives;
|
||||||
|
|
||||||
namespace ColorPicker.Controls
|
namespace ColorPicker.Controls
|
||||||
@ -297,22 +298,6 @@ namespace ColorPicker.Controls
|
|||||||
_ignoreGradientsChanges = false;
|
_ignoreGradientsChanges = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Point GetMousePositionWithinGrid(Border border)
|
|
||||||
{
|
|
||||||
var pos = System.Windows.Input.Mouse.GetPosition(border);
|
|
||||||
if (pos.X < 0)
|
|
||||||
{
|
|
||||||
pos.X = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pos.X > border.Width)
|
|
||||||
{
|
|
||||||
pos.X = border.Width;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void HexCode_TextChanged(object sender, TextChangedEventArgs e)
|
private void HexCode_TextChanged(object sender, TextChangedEventArgs e)
|
||||||
{
|
{
|
||||||
var newValue = (sender as TextBox).Text;
|
var newValue = (sender as TextBox).Text;
|
||||||
@ -336,21 +321,6 @@ namespace ColorPicker.Controls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable CA1801 // Review unused parameters
|
|
||||||
private void RGBNumberBox_ValueChanged(ModernWpf.Controls.NumberBox sender, ModernWpf.Controls.NumberBoxValueChangedEventArgs args)
|
|
||||||
#pragma warning restore CA1801 // Review unused parameters
|
|
||||||
{
|
|
||||||
if (!_ignoreRGBChanges)
|
|
||||||
{
|
|
||||||
var r = byte.Parse(RNumberBox.Text, CultureInfo.InvariantCulture);
|
|
||||||
var g = byte.Parse(GNumberBox.Text, CultureInfo.InvariantCulture);
|
|
||||||
var b = byte.Parse(BNumberBox.Text, CultureInfo.InvariantCulture);
|
|
||||||
_ignoreRGBChanges = true;
|
|
||||||
SetColorFromTextBoxes(System.Drawing.Color.FromArgb(r, g, b));
|
|
||||||
_ignoreRGBChanges = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetColorFromTextBoxes(System.Drawing.Color color)
|
private void SetColorFromTextBoxes(System.Drawing.Color color)
|
||||||
{
|
{
|
||||||
if (!_ignoreGradientsChanges)
|
if (!_ignoreGradientsChanges)
|
||||||
@ -377,6 +347,65 @@ namespace ColorPicker.Controls
|
|||||||
{
|
{
|
||||||
(sender as System.Windows.Controls.TextBox).SelectAll();
|
(sender as System.Windows.Controls.TextBox).SelectAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RGBNumberBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (!_ignoreRGBChanges)
|
||||||
|
{
|
||||||
|
var numberBox = sender as NumberBox;
|
||||||
|
var r = numberBox.Name == "RNumberBox" ? GetValueFromNumberBox(numberBox) : (byte)RNumberBox.Value;
|
||||||
|
var g = numberBox.Name == "GNumberBox" ? GetValueFromNumberBox(numberBox) : (byte)GNumberBox.Value;
|
||||||
|
var b = numberBox.Name == "BNumberBox" ? GetValueFromNumberBox(numberBox) : (byte)BNumberBox.Value;
|
||||||
|
_ignoreRGBChanges = true;
|
||||||
|
SetColorFromTextBoxes(System.Drawing.Color.FromArgb(r, g, b));
|
||||||
|
_ignoreRGBChanges = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// NumberBox provides value only after it has been validated - happens after pressing enter or leaving this control.
|
||||||
|
/// However, we need to get value immediately after the underlying textbox value changes
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="numberBox">numberBox control which value we want to get</param>
|
||||||
|
/// <returns>Validated value as per numberbox conditions, if content is invalid it returns previous value</returns>
|
||||||
|
private static byte GetValueFromNumberBox(NumberBox numberBox)
|
||||||
|
{
|
||||||
|
var internalTextBox = GetChildOfType<TextBox>(numberBox);
|
||||||
|
var parsedValue = numberBox.NumberFormatter.ParseDouble(internalTextBox.Text);
|
||||||
|
if (parsedValue != null)
|
||||||
|
{
|
||||||
|
var parsedValueByte = (byte)parsedValue;
|
||||||
|
if (parsedValueByte >= numberBox.Minimum && parsedValueByte <= numberBox.Maximum)
|
||||||
|
{
|
||||||
|
return parsedValueByte;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// not valid input, return previous value
|
||||||
|
return (byte)numberBox.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T GetChildOfType<T>(DependencyObject depObj)
|
||||||
|
where T : DependencyObject
|
||||||
|
{
|
||||||
|
if (depObj == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
|
||||||
|
{
|
||||||
|
var child = VisualTreeHelper.GetChild(depObj, i);
|
||||||
|
|
||||||
|
var result = (child as T) ?? GetChildOfType<T>(child);
|
||||||
|
if (result != null)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning disable SA1402 // File may only contain a single type
|
#pragma warning disable SA1402 // File may only contain a single type
|
||||||
|
Loading…
Reference in New Issue
Block a user