123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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;
- }
- }
- }
|