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.
108 lines
3.4 KiB
C#
108 lines
3.4 KiB
C#
1 year ago
|
using System;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace UnityEditor.Timeline
|
||
|
{
|
||
|
partial class TimelineWindow
|
||
|
{
|
||
|
[NonSerialized] TimelineTimeArea m_TimeArea;
|
||
|
public TimeArea timeArea { get { return m_TimeArea; } }
|
||
|
|
||
|
internal static class Styles
|
||
|
{
|
||
|
public static string DurationModeText = L10n.Tr("Duration Mode/{0}");
|
||
|
}
|
||
|
|
||
|
double m_LastFrameRate;
|
||
|
bool m_TimeAreaDirty = true;
|
||
|
|
||
|
void InitializeTimeArea()
|
||
|
{
|
||
|
if (m_TimeArea == null)
|
||
|
{
|
||
|
m_TimeArea = new TimelineTimeArea(state, false)
|
||
|
{
|
||
|
hRangeLocked = false,
|
||
|
vRangeLocked = true,
|
||
|
margin = 10,
|
||
|
scaleWithWindow = true,
|
||
|
hSlider = true,
|
||
|
vSlider = false,
|
||
|
hBaseRangeMin = 0.0f,
|
||
|
hBaseRangeMax = WindowState.kMaxShownTime,
|
||
|
hRangeMin = 0.0f,
|
||
|
hScaleMax = WindowConstants.maxTimeAreaScaling,
|
||
|
rect = state.timeAreaRect
|
||
|
};
|
||
|
|
||
|
m_TimeAreaDirty = true;
|
||
|
InitTimeAreaFrameRate();
|
||
|
SyncTimeAreaShownRange();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void DrawTimelineRuler()
|
||
|
{
|
||
|
if (!currentMode.ShouldShowTimeArea(state))
|
||
|
return;
|
||
|
|
||
|
Rect rect = state.timeAreaRect;
|
||
|
m_TimeArea.rect = new Rect(rect.x, rect.y, rect.width, clientArea.height - rect.y);
|
||
|
|
||
|
if (m_LastFrameRate != state.referenceSequence.frameRate)
|
||
|
InitTimeAreaFrameRate();
|
||
|
|
||
|
SyncTimeAreaShownRange();
|
||
|
|
||
|
m_TimeArea.BeginViewGUI();
|
||
|
m_TimeArea.TimeRuler(rect, (float)state.referenceSequence.frameRate, true, false, 1.0f, state.timeFormat.ToTimeAreaFormat());
|
||
|
m_TimeArea.EndViewGUI();
|
||
|
}
|
||
|
|
||
|
void InitTimeAreaFrameRate()
|
||
|
{
|
||
|
m_LastFrameRate = state.referenceSequence.frameRate;
|
||
|
m_TimeArea.hTicks.SetTickModulosForFrameRate((float)m_LastFrameRate);
|
||
|
}
|
||
|
|
||
|
void SyncTimeAreaShownRange()
|
||
|
{
|
||
|
var range = state.timeAreaShownRange;
|
||
|
if (!Mathf.Approximately(range.x, m_TimeArea.shownArea.x) || !Mathf.Approximately(range.y, m_TimeArea.shownArea.xMax))
|
||
|
{
|
||
|
// set view data onto the time area
|
||
|
if (m_TimeAreaDirty)
|
||
|
{
|
||
|
m_TimeArea.SetShownHRange(range.x, range.y);
|
||
|
m_TimeAreaDirty = false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// set time area data onto the view data
|
||
|
state.TimeAreaChanged();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
m_TimeArea.hBaseRangeMax = (float)state.editSequence.duration;
|
||
|
}
|
||
|
|
||
|
class TimelineTimeArea : TimeArea
|
||
|
{
|
||
|
readonly WindowState m_State;
|
||
|
|
||
|
public TimelineTimeArea(WindowState state, bool minimalGUI) : base(minimalGUI)
|
||
|
{
|
||
|
m_State = state;
|
||
|
}
|
||
|
|
||
|
public override string FormatTickTime(float time, float frameRate, TimeFormat timeFormat)
|
||
|
{
|
||
|
time = m_State.timeReferenceMode == TimeReferenceMode.Global ?
|
||
|
(float)m_State.editSequence.ToGlobalTime(time) : time;
|
||
|
|
||
|
return FormatTime(time, frameRate, timeFormat);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|