public AddBarsToStaveGroupResult AddBars(Track[] tracks, int barIndex)
{
if (tracks.Length == 0)
{
return(null);
}
var result = new AddBarsToStaveGroupResult();
var score = tracks[0].Score;
var masterBar = score.MasterBars[barIndex];
MasterBars.Add(masterBar);
Helpers.BuildHelpers(tracks, barIndex);
if (!_accoladeSpacingCalculated && Index == 0)
{
_accoladeSpacingCalculated = true;
var canvas = Layout.Renderer.Canvas;
var res = Layout.Renderer.RenderingResources.EffectFont;
canvas.Font = res;
for (var i = 0; i < tracks.Length; i++)
{
AccoladeSpacing = Math.Max(AccoladeSpacing, canvas.MeasureText(tracks[i].ShortName));
}
AccoladeSpacing += (2 * AccoladeLabelSpacing);
Width += AccoladeSpacing;
}
// add renderers
var maxSizes = new BarLayoutingInfo();
for (int i = 0, j = Staves.Count; i < j; i++)
{
var g = Staves[i];
for (int k = 0, l = g.Staves.Count; k < l; k++)
{
var s = g.Staves[k];
s.AddBar(g.Track.Staves[s.ModelStaff.Index].Bars[barIndex]);
s.BarRenderers[s.BarRenderers.Count - 1].RegisterLayoutingInfo(maxSizes);
if (s.BarRenderers[s.BarRenderers.Count - 1].IsLinkedToPrevious)
{
result.IsLinkedToPrevious = true;
}
}
}
maxSizes.Finish();
// ensure same widths of new renderer
var realWidth = 0f;
for (int i = 0, j = _allStaves.Count; i < j; i++)
{
var s = _allStaves[i];
s.BarRenderers[s.BarRenderers.Count - 1].ApplyLayoutingInfo();
if (s.BarRenderers[s.BarRenderers.Count - 1].Width > realWidth)
{
realWidth = s.BarRenderers[s.BarRenderers.Count - 1].Width;
}
}
Width += realWidth;
result.Width = realWidth;
return(result);
}