mathe/Library/PackageCache/com.unity.timeline@1.7.5/Editor/Window/TimelineWindow_TimeArea.cs

108 lines
3.4 KiB
C#
Raw Normal View History

2024-09-20 20:30:10 +02:00
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);
}
}
}
}