public override void Paint(float cx, float cy, ICanvas canvas)
{
var r = (TabBarRenderer)Renderer;
var sizeX = 12 * Scale;
var sizeY = 3 * Scale;
float startX;
float startY;
float endX;
float endY;
switch (_type)
{
case SlideType.Shift:
case SlideType.Legato:
float startOffsetY;
float endOffsetY;
if (_startNote.SlideTarget == null)
{
startOffsetY = 0;
endOffsetY = 0;
}
else if (_startNote.SlideTarget.Fret > _startNote.Fret)
{
startOffsetY = sizeY;
endOffsetY = sizeY * -1;
}
else
{
startOffsetY = sizeY * -1;
endOffsetY = sizeY;
}
startX = cx + r.GetNoteX(_startNote);
startY = cy + r.GetNoteY(_startNote) + startOffsetY;
if (_startNote.SlideTarget != null)
{
endX = cx + r.GetNoteX(_startNote.SlideTarget, false);
endY = cy + r.GetNoteY(_startNote.SlideTarget) + endOffsetY;
}
else
{
endX = cx + _parent.X;
endY = startY;
}
break;
case SlideType.IntoFromBelow:
endX = cx + r.GetNoteX(_startNote, false);
endY = cy + r.GetNoteY(_startNote);
startX = endX - sizeX;
startY = cy + r.GetNoteY(_startNote) + sizeY;
break;
case SlideType.IntoFromAbove:
endX = cx + r.GetNoteX(_startNote, false);
endY = cy + r.GetNoteY(_startNote);
startX = endX - sizeX;
startY = cy + r.GetNoteY(_startNote) - sizeY;
break;
case SlideType.OutUp:
startX = cx + r.GetNoteX(_startNote);
startY = cy + r.GetNoteY(_startNote);
endX = startX + sizeX;
endY = cy + r.GetNoteY(_startNote) - sizeY;
break;
case SlideType.OutDown:
startX = cx + r.GetNoteX(_startNote);
startY = cy + r.GetNoteY(_startNote);
endX = startX + sizeX;
endY = cy + r.GetNoteY(_startNote) + sizeY;
break;
default:
return;
}
canvas.BeginPath();
canvas.MoveTo(startX, startY);
canvas.LineTo(endX, endY);
canvas.Stroke();
}