From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../Editor/Manipulators/TimeAreaAutoPanner.cs | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeAreaAutoPanner.cs (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeAreaAutoPanner.cs') diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeAreaAutoPanner.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeAreaAutoPanner.cs new file mode 100644 index 0000000..8052d65 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeAreaAutoPanner.cs @@ -0,0 +1,72 @@ +using UnityEngine; + +namespace UnityEditor.Timeline +{ + class TimeAreaAutoPanner + { + readonly WindowState m_State; + readonly TimelineWindow m_Window; + readonly Rect m_ViewRect; + + const float k_PixelDistanceToMaxSpeed = 100.0f; + const float k_MaxPanSpeed = 30.0f; + + public TimeAreaAutoPanner(WindowState state) + { + m_State = state; + m_Window = m_State.GetWindow(); + + var shownRange = m_State.timeAreaShownRange; + var trackViewBounds = m_Window.sequenceRect; + m_ViewRect = Rect.MinMaxRect(m_State.TimeToPixel(shownRange.x), trackViewBounds.yMin, + m_State.TimeToPixel(shownRange.y), trackViewBounds.yMax); + } + + public void OnGUI(Event evt) + { + if (evt.type != EventType.Layout) + return; + + var hFactor = 0.0f; + var vFactor = 0.0f; + + bool horizontalPan = GetPanFactor(evt.mousePosition.x, m_ViewRect.xMin, m_ViewRect.xMax, out hFactor); + bool verticalPan = GetPanFactor(evt.mousePosition.y, m_ViewRect.yMin, m_ViewRect.yMax, out vFactor); + + if (horizontalPan) + { + var translation = m_State.timeAreaTranslation; + translation.x += hFactor * k_MaxPanSpeed; + + m_State.SetTimeAreaTransform(translation, m_State.timeAreaScale); + } + + if (verticalPan) + { + var translation = m_Window.treeView.scrollPosition; + translation.y -= vFactor * k_MaxPanSpeed; + + m_Window.treeView.scrollPosition = translation; + } + } + + static bool GetPanFactor(float v, float min, float max, out float factor) + { + factor = 0.0f; + + if (v < min) + { + factor = Mathf.Clamp01((min - v) / k_PixelDistanceToMaxSpeed); + return true; + } + + if (v > max) + { + factor = -Mathf.Clamp01((v - max) / k_PixelDistanceToMaxSpeed); + return true; + } + + return false; + } + } +} -- cgit v1.2.3