public void PaintPartial(float cx, float cy, ICanvas canvas, int startIndex, int count)
{
BuildBoundingsLookup(cx, cy);
for (int i = 0, j = _allStaves.Count; i < j; i++)
{
_allStaves[i].Paint(cx, cy, canvas, startIndex, count);
}
var res = Layout.Renderer.RenderingResources;
if (Staves.Count > 0 && startIndex == 0)
{
//
// Draw start grouping
//
if (_firstStaffInAccolade != null && _lastStaffInAccolade != null)
{
//
// draw grouping line for all staves
//
var firstStart = cy + _firstStaffInAccolade.Y + _firstStaffInAccolade.StaveTop + _firstStaffInAccolade.TopSpacing + _firstStaffInAccolade.TopOverflow;
var lastEnd = cy + _lastStaffInAccolade.Y + _lastStaffInAccolade.TopSpacing + _lastStaffInAccolade.TopOverflow
+ _lastStaffInAccolade.StaveBottom;
var acooladeX = cx + _firstStaffInAccolade.X;
canvas.Color = res.BarSeperatorColor;
canvas.BeginPath();
canvas.MoveTo(acooladeX, firstStart);
canvas.LineTo(acooladeX, lastEnd);
canvas.Stroke();
}
//
// Draw accolade for each track group
//
canvas.Font = res.EffectFont;
for (int i = 0, j = Staves.Count; i < j; i++)
{
var g = Staves[i];
if (g.FirstStaffInAccolade != null && g.LastStaffInAccolade != null)
{
var firstStart = cy + g.FirstStaffInAccolade.Y + g.FirstStaffInAccolade.StaveTop + g.FirstStaffInAccolade.TopSpacing + g.FirstStaffInAccolade.TopOverflow;
var lastEnd = cy + g.LastStaffInAccolade.Y + g.LastStaffInAccolade.TopSpacing + g.LastStaffInAccolade.TopOverflow
+ g.LastStaffInAccolade.StaveBottom;
var acooladeX = cx + g.FirstStaffInAccolade.X;
var barSize = (3 * Layout.Renderer.Settings.Scale);
var barOffset = barSize;
var accoladeStart = firstStart - (barSize * 4);
var accoladeEnd = lastEnd + (barSize * 4);
// text
if (Index == 0)
{
canvas.FillText(g.Track.ShortName, cx + (AccoladeLabelSpacing * Layout.Scale), firstStart);
}
// rect
canvas.FillRect(acooladeX - barOffset - barSize, accoladeStart, barSize, accoladeEnd - accoladeStart);
var spikeStartX = acooladeX - barOffset - barSize;
var spikeEndX = acooladeX + barSize * 2;
// top spike
canvas.BeginPath();
canvas.MoveTo(spikeStartX, accoladeStart);
canvas.BezierCurveTo(spikeStartX, accoladeStart, spikeStartX, accoladeStart, spikeEndX, accoladeStart - barSize);
canvas.BezierCurveTo(acooladeX, accoladeStart + barSize, spikeStartX, accoladeStart + barSize, spikeStartX, accoladeStart + barSize);
canvas.ClosePath();
canvas.Fill();
// bottom spike
canvas.BeginPath();
canvas.MoveTo(spikeStartX, accoladeEnd);
canvas.BezierCurveTo(spikeStartX, accoladeEnd, acooladeX, accoladeEnd, spikeEndX, accoladeEnd + barSize);
canvas.BezierCurveTo(acooladeX, accoladeEnd - barSize, spikeStartX, accoladeEnd - barSize, spikeStartX, accoladeEnd - barSize);
canvas.ClosePath();
canvas.Fill();
}
}
}
}