diff --git a/Source/Editor/GUI/Timeline/Media.cs b/Source/Editor/GUI/Timeline/Media.cs index 70783b449..6d6a4c5ea 100644 --- a/Source/Editor/GUI/Timeline/Media.cs +++ b/Source/Editor/GUI/Timeline/Media.cs @@ -229,8 +229,9 @@ namespace FlaxEditor.GUI.Timeline /// Called when showing timeline context menu to the user. Can be used to add custom buttons. /// /// The menu. + /// The time (in seconds) at which context menu is shown (user clicked on a timeline). /// The found control under the mouse cursor. - public virtual void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse) + public virtual void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time, Control controlUnderMouse) { if (CanDelete && Track.Media.Count > Track.MinMediaCount) menu.AddButton("Delete media", Delete); diff --git a/Source/Editor/GUI/Timeline/Timeline.cs b/Source/Editor/GUI/Timeline/Timeline.cs index a89df1fc2..e254c7456 100644 --- a/Source/Editor/GUI/Timeline/Timeline.cs +++ b/Source/Editor/GUI/Timeline/Timeline.cs @@ -1901,6 +1901,9 @@ namespace FlaxEditor.GUI.Timeline if (!ContainsFocus) Focus(); + var timelinePos = MediaPanel.PointFromParent(this, location); + var time = (timelinePos.X - StartOffset) / (UnitsPerSecond * Zoom); + var controlUnderMouse = GetChildAtRecursive(location); var mediaUnderMouse = controlUnderMouse; while (mediaUnderMouse != null && !(mediaUnderMouse is Media)) @@ -1911,12 +1914,23 @@ namespace FlaxEditor.GUI.Timeline var menu = new ContextMenu.ContextMenu(); if (mediaUnderMouse is Media media) { - media.OnTimelineShowContextMenu(menu, controlUnderMouse); + media.OnTimelineContextMenu(menu, time, controlUnderMouse); if (media.PropertiesEditObject != null) { menu.AddButton("Edit media", () => ShowEditPopup(media.PropertiesEditObject, location, media.Track)); } } + else + { + foreach (var track in _tracks) + { + if (Mathf.IsInRange(timelinePos.Y, track.Top, track.Bottom)) + { + track.OnTimelineContextMenu(menu, time); + break; + } + } + } if (PropertiesEditObject != null) { menu.AddButton("Edit timeline", () => ShowEditPopup(PropertiesEditObject, location, this)); diff --git a/Source/Editor/GUI/Timeline/Track.cs b/Source/Editor/GUI/Timeline/Track.cs index 935ab863a..485603808 100644 --- a/Source/Editor/GUI/Timeline/Track.cs +++ b/Source/Editor/GUI/Timeline/Track.cs @@ -1028,6 +1028,15 @@ namespace FlaxEditor.GUI.Timeline return true; } + /// + /// Called when showing timeline context menu to the user. Can be used to add custom buttons. + /// + /// The menu. + /// The time (in seconds) at which context menu is shown (user clicked on a timeline). + public virtual void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time) + { + } + /// /// Called when context menu is being prepared to show. Can be used to add custom options. /// diff --git a/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs b/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs index 3d731a321..3dd2a1fe2 100644 --- a/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs +++ b/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs @@ -324,12 +324,12 @@ namespace FlaxEditor.GUI.Timeline.Tracks } /// - public override void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse) + public override void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time, Control controlUnderMouse) { if (((CameraCutTrack)Track).Camera) menu.AddButton("Refresh thumbnails", () => UpdateThumbnails()); - base.OnTimelineShowContextMenu(menu, controlUnderMouse); + base.OnTimelineContextMenu(menu, time, controlUnderMouse); } /// diff --git a/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs b/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs index 13b5c6fbc..e07b419da 100644 --- a/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs +++ b/Source/Editor/GUI/Timeline/Tracks/ScreenFadeTrack.cs @@ -101,9 +101,9 @@ namespace FlaxEditor.GUI.Timeline.Tracks } /// - public override void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse) + public override void OnTimelineContextMenu(ContextMenu.ContextMenu menu, float time, Control controlUnderMouse) { - base.OnTimelineShowContextMenu(menu, controlUnderMouse); + base.OnTimelineContextMenu(menu, time, controlUnderMouse); if (controlUnderMouse is GradientEditor.StopControl stop) {