public override void DoLayout()
{
base.DoLayout();
//
// Calculate the min and max offsets
var minY = 0f;
var maxY = 0f;
var sizeY = WhammyMaxOffset * Scale;
if (_beat.WhammyBarPoints.Count >= 2)
{
var dy = sizeY / Beat.WhammyBarMaxValue;
for (int i = 0, j = _beat.WhammyBarPoints.Count; i < j; i++)
{
var pt = _beat.WhammyBarPoints[i];
var ptY = 0 - (dy * pt.Value);
if (ptY > maxY) maxY = ptY;
if (ptY < minY) minY = ptY;
}
}
//
// calculate the overflow
var tabBarRenderer = (TabBarRenderer)Renderer;
var track = Renderer.Bar.Staff.Track;
var tabTop = tabBarRenderer.GetTabY(0, -2);
var tabBottom = tabBarRenderer.GetTabY(track.Tuning.Length, -2);
var absMinY = Y + minY + tabTop;
var absMaxY = Y + maxY - tabBottom;
if (absMinY < 0)
tabBarRenderer.RegisterOverflowTop(Math.Abs(absMinY));
if (absMaxY > 0)
tabBarRenderer.RegisterOverflowBottom(Math.Abs(absMaxY));
}