You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
C#
73 lines
2.1 KiB
C#
1 year ago
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|