137 lines
6.1 KiB
C#
137 lines
6.1 KiB
C#
using System.Text;
|
|
|
|
namespace T3.Editor.Gui.Windows.TimeLine.Raster;
|
|
|
|
/// <summary>
|
|
/// A <see cref="AbstractTimeRaster"/> that displays Bars, Beats and ticks
|
|
/// </summary>
|
|
internal sealed class BeatTimeRaster : AbstractTimeRaster
|
|
{
|
|
internal override void Draw(TimeLineCanvas timeLineCanvas, float unitsPerSeconds, float verticalLabelAlign = 1)
|
|
{
|
|
var scale = timeLineCanvas.Scale.X;
|
|
var scroll = timeLineCanvas.Scroll.X;
|
|
DrawTimeTicks(scale, scroll, timeLineCanvas,verticalLabelAlign);
|
|
}
|
|
|
|
protected override string BuildLabel(Raster raster, double timeInBars)
|
|
{
|
|
_stringBuilder.Clear();
|
|
|
|
foreach (var c in raster.Label)
|
|
{
|
|
switch (c)
|
|
{
|
|
// bars
|
|
case 'b':
|
|
_stringBuilder.Append($"{(int)timeInBars}");
|
|
break;
|
|
// beats
|
|
case '.':
|
|
_stringBuilder.Append($".{(int)(timeInBars * 4) % 4}");
|
|
break;
|
|
// ticks
|
|
case ':':
|
|
_stringBuilder.Append($":{(int)(timeInBars * 16) % 4}");
|
|
break;
|
|
default:
|
|
_stringBuilder.Append(c);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return _stringBuilder.ToString();
|
|
}
|
|
|
|
|
|
protected override void InitScaleRanges(float density)
|
|
{
|
|
density *= 0.02f;
|
|
const float everyTick = 1 / 240f * 60 / 4;
|
|
const float everyBeat = 1 / 240f * 60;
|
|
const float everyBar = 4 / 240f * 60;
|
|
const float everyMeasure = 16 / 240f * 60;
|
|
const float everyPhrase = 64 / 240f * 60;
|
|
const float every10Phrases = 10 * 64 / 240f * 60;
|
|
|
|
ScaleRanges =
|
|
[
|
|
new ScaleRange(ScaleMin: 0, ScaleMax: 0.001 / density, Rasters:
|
|
[
|
|
new Raster("b", everyBar, FadeLabels: false, FadeLines: false),
|
|
new Raster("b.", everyBeat, FadeLabels: false, FadeLines: false),
|
|
new Raster(":", Spacing: everyTick, FadeLabels: true, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.001 / density, ScaleMax: 0.002 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyBar, FadeLabels: false, FadeLines: false),
|
|
new Raster("b.", Spacing: everyBeat, FadeLabels: false, FadeLines: false),
|
|
new Raster("", Spacing: everyTick, FadeLabels: false, FadeLines: true)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.002 / density, ScaleMax: 0.005 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyBar, FadeLabels: false, FadeLines: false),
|
|
new Raster("b.", Spacing: everyBeat, FadeLabels: true, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.005 / density, ScaleMax: 0.007 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyBar, FadeLabels: false, FadeLines: false),
|
|
new Raster("", Spacing: everyBeat, FadeLabels: true, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.007 / density, ScaleMax: 0.01 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyBar, FadeLabels: false, FadeLines: false),
|
|
new Raster("", Spacing: everyBeat, FadeLabels: true, FadeLines: true)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.01 / density, ScaleMax: 0.012 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyBar, FadeLabels: false, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.012 / density, ScaleMax: 0.03 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyMeasure, FadeLabels: false, FadeLines: false),
|
|
new Raster("b", Spacing: everyBar, FadeLabels: true, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.03 / density, ScaleMax: 0.06 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyMeasure, FadeLabels: false, FadeLines: false),
|
|
new Raster("", Spacing: everyBar, FadeLabels: true, FadeLines: true)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.06 / density, ScaleMax: 0.1 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyMeasure, FadeLabels: false, FadeLines: false)
|
|
]),
|
|
|
|
new ScaleRange(ScaleMin: 0.1 / density, ScaleMax: 0.15 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyPhrase, FadeLabels: false, FadeLines: false),
|
|
new Raster("b", Spacing: everyMeasure, FadeLabels: true, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.15 / density, ScaleMax: 0.3 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: everyPhrase, FadeLabels: false, FadeLines: false),
|
|
new Raster("", Spacing: everyMeasure, FadeLabels: true, FadeLines: true)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.3 / density, ScaleMax: 0.5 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: every10Phrases, FadeLabels: false, FadeLines: false),
|
|
new Raster("b", Spacing: everyPhrase, FadeLabels: true, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 0.5 / density, ScaleMax: 1.2 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: every10Phrases, FadeLabels: false, FadeLines: false),
|
|
new Raster("", Spacing: everyPhrase, FadeLabels: true, FadeLines: true)
|
|
]),
|
|
new ScaleRange(ScaleMin: 1.2 / density, ScaleMax: 2 / density, Rasters:
|
|
[
|
|
new Raster("b", Spacing: every10Phrases, FadeLabels: true, FadeLines: false)
|
|
]),
|
|
new ScaleRange(ScaleMin: 2 / density, ScaleMax: 999 / density, Rasters:
|
|
[
|
|
new Raster("", Spacing: every10Phrases, FadeLabels: false, FadeLines: false)
|
|
])
|
|
];
|
|
}
|
|
|
|
private static readonly StringBuilder _stringBuilder = new(20);
|
|
} |