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); }
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; }