diff --git a/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs b/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs
index 1249d18d2..8d969485d 100644
--- a/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs
+++ b/Source/Editor/CustomEditors/Editors/ActorTransformEditor.cs
@@ -79,66 +79,54 @@ namespace FlaxEditor.CustomEditors.Editors
///
public class ScaleEditor : Float3Editor
{
+
+ private Image _linkImage;
+
///
public override void Initialize(LayoutElementsContainer layout)
{
- var scaleLocked = Editor.Instance.Windows.PropertiesWin.ScaleLocked;
- if (scaleLocked)
- {
- ChangeValuesTogether = scaleLocked;
- }
-
base.Initialize(layout);
+
+ LinkValuesTogether = Editor.Instance.Windows.PropertiesWin.ScaleLocked;
+
+ _linkImage = new Image
+ {
+ Parent = LinkedLabel,
+ Width = 18,
+ Height = 18,
+ Brush = LinkValuesTogether ? new SpriteBrush(Editor.Instance.Icons.Link32) : new SpriteBrush(),
+ AnchorPreset = AnchorPresets.TopLeft,
+ TooltipText = "Scale values are linked together.",
+ };
+ _linkImage.LocalX += 40;
+ _linkImage.LocalY += 1;
+
+ LinkedLabel.SetupContextMenu += (label, menu, editor) =>
+ {
+ menu.AddSeparator();
+ menu.AddButton(LinkValuesTogether ? "Unlink" : "Link", ToggleLink);
+ };
// Override colors
var back = FlaxEngine.GUI.Style.Current.TextBoxBackground;
var grayOutFactor = 0.6f;
XElement.ValueBox.BorderColor = Color.Lerp(AxisColorX, back, grayOutFactor);
XElement.ValueBox.BorderSelectedColor = AxisColorX;
-
- if (XElement.ValueBox.Parent.Parent is PropertiesList list)
- {
- foreach (var child in list.Children)
- {
- if (!(child is PropertyNameLabel))
- continue;
-
- var nameLabel = child as PropertyNameLabel;
- if (!string.Equals(nameLabel.Text, "Scale"))
- continue;
-
- var lockButton = new Button
- {
- Parent = nameLabel,
- Width = 18,
- Height = 18,
- BackgroundBrush = new SpriteBrush(Editor.Instance.Icons.Link32), // TODO change on scale lock
- BackgroundColor = Color.White,
- BorderColor = Color.Transparent,
- BorderColorSelected = Color.Transparent,
- BorderColorHighlighted = Color.Transparent,
- AnchorPreset = AnchorPresets.TopLeft,
- TooltipText = "Locks/Unlocks setting the scale values.",
- };
- lockButton.LocalX += 40;
- lockButton.LocalY += 1;
- lockButton.Clicked += () =>
- {
- ChangeValuesTogether = !ChangeValuesTogether;
- Editor.Instance.Windows.PropertiesWin.ScaleLocked = ChangeValuesTogether;
- // TODO: change image
- Debug.Log(ChangeValuesTogether);
- };
-
- break;
- }
- }
-
YElement.ValueBox.BorderColor = Color.Lerp(AxisColorY, back, grayOutFactor);
YElement.ValueBox.BorderSelectedColor = AxisColorY;
ZElement.ValueBox.BorderColor = Color.Lerp(AxisColorZ, back, grayOutFactor);
ZElement.ValueBox.BorderSelectedColor = AxisColorZ;
}
+
+ ///
+ /// Toggles the linking functionality.
+ ///
+ public void ToggleLink()
+ {
+ LinkValuesTogether = !LinkValuesTogether;
+ Editor.Instance.Windows.PropertiesWin.ScaleLocked = LinkValuesTogether;
+ _linkImage.Brush = LinkValuesTogether ? new SpriteBrush(Editor.Instance.Icons.Link32) : new SpriteBrush();
+ }
}
}
}
diff --git a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs
index bca22b29c..ffdcfb825 100644
--- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs
+++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs
@@ -47,7 +47,7 @@ namespace FlaxEditor.CustomEditors.Editors
///
/// If true, when one value is changed, the other 2 will change as well.
///
- protected bool ChangeValuesTogether = false;
+ public bool LinkValuesTogether = false;
private enum ValueChanged
{
@@ -95,7 +95,7 @@ namespace FlaxEditor.CustomEditors.Editors
{
if (IsSetBlocked)
return;
- if (ChangeValuesTogether)
+ if (LinkValuesTogether)
_valueChanged = ValueChanged.X;
OnValueChanged();
@@ -105,7 +105,7 @@ namespace FlaxEditor.CustomEditors.Editors
{
if (IsSetBlocked)
return;
- if (ChangeValuesTogether)
+ if (LinkValuesTogether)
_valueChanged = ValueChanged.Y;
OnValueChanged();
@@ -115,7 +115,7 @@ namespace FlaxEditor.CustomEditors.Editors
{
if (IsSetBlocked)
return;
- if (ChangeValuesTogether)
+ if (LinkValuesTogether)
_valueChanged = ValueChanged.Z;
OnValueChanged();
@@ -130,25 +130,25 @@ namespace FlaxEditor.CustomEditors.Editors
var yValue = YElement.ValueBox.Value;
var zValue = ZElement.ValueBox.Value;
- if (ChangeValuesTogether)
+ if (LinkValuesTogether)
{
- var adder = 0.0f;
+ var valueChange = 0.0f;
switch (_valueChanged)
{
case ValueChanged.X:
- adder = xValue - ((Float3)Values[0]).X;
- yValue += adder;
- zValue += adder;
+ valueChange = xValue - ((Float3)Values[0]).X;
+ yValue += valueChange;
+ zValue += valueChange;
break;
case ValueChanged.Y:
- adder = yValue - ((Float3)Values[0]).Y;
- xValue += adder;
- zValue += adder;
+ valueChange = yValue - ((Float3)Values[0]).Y;
+ xValue += valueChange;
+ zValue += valueChange;
break;
case ValueChanged.Z:
- adder = zValue - ((Float3)Values[0]).Z;
- xValue += adder;
- yValue += adder;
+ valueChange = zValue - ((Float3)Values[0]).Z;
+ xValue += valueChange;
+ yValue += valueChange;
break;
default:
break;
diff --git a/Source/Editor/Windows/PropertiesWindow.cs b/Source/Editor/Windows/PropertiesWindow.cs
index 05b8c0efc..21c7d0faf 100644
--- a/Source/Editor/Windows/PropertiesWindow.cs
+++ b/Source/Editor/Windows/PropertiesWindow.cs
@@ -17,6 +17,9 @@ namespace FlaxEditor.Windows
{
private IEnumerable