Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Resources/Locale/en-US/controls.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ color-selector-sliders-hue = H
color-selector-sliders-saturation = S
color-selector-sliders-value = V
color-selector-sliders-alpha = A
color-selector-input-hex = Hex

color-selector-sliders-rgb = RGB
color-selector-sliders-hsv = HSV
Expand Down
29 changes: 29 additions & 0 deletions Robust.Client/UserInterface/Controls/ColorSelectorSliders.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,13 @@ public bool IsAlphaVisible
private SpinBox _middleInputBox;
private SpinBox _bottomInputBox;
private SpinBox _alphaInputBox;
private LineEdit _hexInputEdit;

private Label _topSliderLabel = new();
private Label _middleSliderLabel = new();
private Label _bottomSliderLabel = new();
private Label _alphaSliderLabel = new();
private Label _hexInputLabel = new();
private Label _colorDescriptionLabel = new();

private OptionButton _typeSelector;
Expand Down Expand Up @@ -151,12 +153,23 @@ public ColorSelectorSliders()
};
_alphaInputBox.InitDefaultButtons();

_hexInputEdit = new LineEdit
{
HorizontalExpand = true,
VerticalAlignment = VAlignment.Center,
};

_topInputBox.ValueChanged += value => { OnInputBoxValueChanged(value, ColorSliderOrder.Top); };
_middleInputBox.ValueChanged += value => { OnInputBoxValueChanged(value, ColorSliderOrder.Middle); };
_bottomInputBox.ValueChanged += value => { OnInputBoxValueChanged(value, ColorSliderOrder.Bottom); };
_alphaInputBox.ValueChanged += value => { OnInputBoxValueChanged(value, ColorSliderOrder.Alpha); };
_hexInputEdit.OnTextEntered += value => { OnHexInputValueChanged(value); };
// The above triggers ONLY when the Enter key is pressed, which can be a bit unintuitive
// when making changes to multiple colors (e.g. editing markings)
_hexInputEdit.OnFocusExit += value => { OnHexInputValueChanged(value); };

_alphaSliderLabel.Text = Loc.GetString("color-selector-sliders-alpha");
_hexInputLabel.Text = Loc.GetString("color-selector-input-hex");

_typeSelector = new OptionButton();
foreach (var ty in Enum.GetValues<ColorSelectorType>())
Expand Down Expand Up @@ -216,10 +229,16 @@ public ColorSelectorSliders()
_alphaSliderBox.AddChild(_alphaSlider);
_alphaSliderBox.AddChild(_alphaInputBox);

var hexInputBox = new BoxContainer();

hexInputBox.AddChild(_hexInputLabel);
hexInputBox.AddChild(_hexInputEdit);

bodyBox.AddChild(topSliderBox);
bodyBox.AddChild(middleSliderBox);
bodyBox.AddChild(bottomSliderBox);
bodyBox.AddChild(_alphaSliderBox);
bodyBox.AddChild(hexInputBox);

rootBox.AddChild(bodyBox);

Expand Down Expand Up @@ -293,6 +312,7 @@ private void UpdateSliderVisuals()
_middleStyle.SetBaseColor(_colorData);
_bottomStyle.SetBaseColor(_colorData);
_colorDescriptionLabel.Text = ColorNaming.Describe(Color, _localization);
_hexInputEdit.Text = _currentColor.ToHex();
}

private void UpdateAllSliders()
Expand Down Expand Up @@ -337,6 +357,15 @@ private void OnSliderValueChanged(ColorSliderOrder order)
UpdateSlider(order);
}

private void OnHexInputValueChanged(LineEdit.LineEditEventArgs args)
{
_currentColor = Color.FromHex(args.Text, _currentColor);
_colorData = GetStrategy().ToColorData(_currentColor);
OnColorChanged?.Invoke(_currentColor);

UpdateAllSliders();
}

private enum ColorSliderOrder
{
Top,
Expand Down
Loading