You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.4 KiB
107 lines
3.4 KiB
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); |
|
} |
|
} |
|
} |
|
}
|
|
|