public override void Paint(float cx, float cy, ICanvas canvas)
{
var tabBarRenderer = (TabBarRenderer)Renderer;
var res = Renderer.Resources;
var startX = cx + X + _parent.OnNotes.Width / 2;
var endX = _beat.NextBeat == null || _beat.Voice != _beat.NextBeat.Voice
? cx + X + _parent.Width
: cx + tabBarRenderer.GetBeatX(_beat.NextBeat);
var startY = cy + X;
var textOffset = 3 * Scale;
var sizeY = WhammyMaxOffset * Scale;
var old = canvas.TextAlign;
canvas.TextAlign = TextAlign.Center;
if (_beat.WhammyBarPoints.Count >= 2)
{
var dx = (endX - startX) / Beat.WhammyBarMaxPosition;
var dy = sizeY / Beat.WhammyBarMaxValue;
canvas.BeginPath();
for (int i = 0, j = _beat.WhammyBarPoints.Count - 1; i < j; i++)
{
var pt1 = _beat.WhammyBarPoints[i];
var pt2 = _beat.WhammyBarPoints[i + 1];
if (pt1.Value == pt2.Value && i == _beat.WhammyBarPoints.Count - 2) continue;
var pt1X = startX + (dx * pt1.Offset);
var pt1Y = startY - (dy * pt1.Value);
var pt2X = startX + (dx * pt2.Offset);
var pt2Y = startY - (dy * pt2.Value);
canvas.MoveTo(pt1X, pt1Y);
canvas.LineTo(pt2X, pt2Y);
if (pt2.Value != 0)
{
var dv = pt2.Value / 4.0;
var up = (pt2.Value - pt1.Value) >= 0;
var s = "";
if (dv < 0) s += "-";
if (dv >= 1 || dv <= -1)
s += Math.Abs(dv) + " ";
dv -= (int)dv;
if (dv == 0.25)
s += "1/4";
else if (dv == 0.5)
s += "1/2";
else if (dv == 0.75)
s += "3/4";
canvas.Font = res.GraceFont;
//var size = canvas.MeasureText(s);
var sy = up
? pt2Y - res.GraceFont.Size - textOffset
: pt2Y + textOffset;
var sx = pt2X;
canvas.FillText(s, sx, sy);
}
}
canvas.Stroke();
}
canvas.TextAlign = old;
}