diff --git a/Source/Editor/GUI/CurveEditor.Contents.cs b/Source/Editor/GUI/CurveEditor.Contents.cs index b77ea1a10..c544fc602 100644 --- a/Source/Editor/GUI/CurveEditor.Contents.cs +++ b/Source/Editor/GUI/CurveEditor.Contents.cs @@ -301,14 +301,33 @@ namespace FlaxEditor.GUI { if (_leftMouseDown) { - // Check if user is pressing control if (Root.GetKey(KeyboardKeys.Control)) { // Toggle selection keyframe.IsSelected = !keyframe.IsSelected; _editor.UpdateTangents(); } - // Check if node isn't selected + else if (Root.GetKey(KeyboardKeys.Shift)) + { + // Select range + keyframe.IsSelected = true; + int selectionStart = 0; + for (; selectionStart < _editor._points.Count; selectionStart++) + { + if (_editor._points[selectionStart].IsSelected) + break; + } + int selectionEnd = _editor._points.Count - 1; + for (; selectionEnd > selectionStart; selectionEnd--) + { + if (_editor._points[selectionEnd].IsSelected) + break; + } + selectionStart++; + for (; selectionStart < selectionEnd; selectionStart++) + _editor._points[selectionStart].IsSelected = true; + _editor.UpdateTangents(); + } else if (!keyframe.IsSelected) { // Select node diff --git a/Source/Editor/GUI/CurveEditor.cs b/Source/Editor/GUI/CurveEditor.cs index 58f830f29..ef42577b8 100644 --- a/Source/Editor/GUI/CurveEditor.cs +++ b/Source/Editor/GUI/CurveEditor.cs @@ -893,23 +893,20 @@ namespace FlaxEditor.GUI if (base.OnKeyDown(key)) return true; - if (key == KeyboardKeys.Delete) + switch (key) { + case KeyboardKeys.Delete: RemoveKeyframes(); return true; - } - - if (Root.GetKey(KeyboardKeys.Control)) - { - switch (key) + case KeyboardKeys.A: + if (Root.GetKey(KeyboardKeys.Control)) { - case KeyboardKeys.A: SelectAll(); UpdateTangents(); return true; } + break; } - return false; } diff --git a/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs b/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs index e7e906aab..fdfad2bfa 100644 --- a/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs +++ b/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs @@ -294,13 +294,31 @@ namespace FlaxEditor.GUI { if (_leftMouseDown) { - // Check if user is pressing control if (Root.GetKey(KeyboardKeys.Control)) { // Toggle selection keyframe.IsSelected = !keyframe.IsSelected; } - // Check if node isn't selected + else if (Root.GetKey(KeyboardKeys.Shift)) + { + // Select range + keyframe.IsSelected = true; + int selectionStart = 0; + for (; selectionStart < _editor._points.Count; selectionStart++) + { + if (_editor._points[selectionStart].IsSelected) + break; + } + int selectionEnd = _editor._points.Count - 1; + for (; selectionEnd > selectionStart; selectionEnd--) + { + if (_editor._points[selectionEnd].IsSelected) + break; + } + selectionStart++; + for (; selectionStart < selectionEnd; selectionStart++) + _editor._points[selectionStart].IsSelected = true; + } else if (!keyframe.IsSelected) { // Select node @@ -1188,22 +1206,19 @@ namespace FlaxEditor.GUI if (base.OnKeyDown(key)) return true; - if (key == KeyboardKeys.Delete) + switch (key) { + case KeyboardKeys.Delete: RemoveKeyframes(); return true; - } - - if (Root.GetKey(KeyboardKeys.Control)) - { - switch (key) + case KeyboardKeys.A: + if (Root.GetKey(KeyboardKeys.Control)) { - case KeyboardKeys.A: SelectAll(); return true; } + break; } - return false; }