From d25cb7a9da694ef980c443d6b421ceeef836cfbb Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 28 Jan 2025 22:59:39 +0100 Subject: [PATCH] Fix curve tangent handles to maintain size relative to the current view scale Fix curve tangent colors to match editor style Fix curve tangents editing to have stable movement no matter the view scale #2455 --- Source/Editor/GUI/CurveEditor.Contents.cs | 2 +- Source/Editor/GUI/CurveEditor.cs | 30 ++++++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/Source/Editor/GUI/CurveEditor.Contents.cs b/Source/Editor/GUI/CurveEditor.Contents.cs index 25954abfa..4eec05c47 100644 --- a/Source/Editor/GUI/CurveEditor.Contents.cs +++ b/Source/Editor/GUI/CurveEditor.Contents.cs @@ -234,7 +234,7 @@ namespace FlaxEditor.GUI var k = _editor.GetKeyframe(_movingTangent.Index); var kv = _editor.GetKeyframeValue(k); var value = _editor.Accessor.GetCurveValue(ref kv, _movingTangent.Component); - _movingTangent.TangentValue = PointToKeyframes(location, ref viewRect).Y - value; + _movingTangent.TangentValue = (PointToKeyframes(location, ref viewRect).Y - value) * _editor.ViewScale.X; _editor.UpdateTangents(); Cursor = CursorType.SizeNS; _movedKeyframes = true; diff --git a/Source/Editor/GUI/CurveEditor.cs b/Source/Editor/GUI/CurveEditor.cs index 6c6c9ba8e..1ef32e03b 100644 --- a/Source/Editor/GUI/CurveEditor.cs +++ b/Source/Editor/GUI/CurveEditor.cs @@ -163,10 +163,11 @@ namespace FlaxEditor.GUI /// public override void Draw() { + var style = Style.Current; var rect = new Rectangle(Float2.Zero, Size); - var color = Editor.ShowCollapsed ? Color.Gray : Editor.Colors[Component]; + var color = Editor.ShowCollapsed ? style.ForegroundDisabled : Editor.Colors[Component]; if (IsSelected) - color = Editor.ContainsFocus ? Color.YellowGreen : Color.Lerp(Color.Gray, Color.YellowGreen, 0.4f); + color = Editor.ContainsFocus ? style.SelectionBorder : Color.Lerp(style.ForegroundDisabled, style.SelectionBorder, 0.4f); if (IsMouseOver) color *= 1.1f; Render2D.FillRectangle(rect, color); @@ -244,14 +245,19 @@ namespace FlaxEditor.GUI set => Editor.SetKeyframeTangentInternal(Index, IsIn, Component, value); } + internal float TangentOffset => 50.0f / Editor.ViewScale.X; + /// public override void Draw() { + var style = Style.Current; + var thickness = 6.0f / Mathf.Max(Editor.ViewScale.X, 1.0f); + var size = Size; var pointPos = PointFromParent(Point.Center); - Render2D.DrawLine(Size * 0.5f, pointPos, Color.Gray); + Render2D.DrawLine(size * 0.5f, pointPos, style.ForegroundDisabled, thickness); - var rect = new Rectangle(Float2.Zero, Size); - var color = Color.MediumVioletRed; + var rect = new Rectangle(Float2.Zero, size); + var color = style.BorderSelected; if (IsMouseOver) color *= 1.1f; Render2D.FillRectangle(rect, color); @@ -2202,7 +2208,7 @@ namespace FlaxEditor.GUI var tangent = t.TangentValue; var direction = t.IsIn ? -1.0f : 1.0f; - var offset = 30.0f; + var offset = t.TangentOffset; var location = GetKeyframePoint(ref k, selectedComponent); t.Size = KeyframesSize / ViewScale; t.Location = new Float2 @@ -2229,6 +2235,18 @@ namespace FlaxEditor.GUI } } + /// + protected override void SetScaleInternal(ref Float2 scale) + { + base.SetScaleInternal(ref scale); + + if (!_showCollapsed) + { + // Refresh keyframes when zooming (their size depends on the scale) + UpdateKeyframes(); + } + } + /// protected override void OnShowContextMenu(ContextMenu.ContextMenu cm, int selectionCount) {