internal void AddMasterBar(MasterBar masterBar) { if (Openings.Count == 0) { Openings.Add(masterBar); } MasterBars.Add(masterBar); masterBar.RepeatGroup = this; if (masterBar.IsRepeatEnd) { Closings.Add(masterBar); IsClosed = true; if (!IsOpened) { MasterBars[0].IsRepeatStart = true; IsOpened = true; } } // a new item after the header was closed? -> repeat alternative reopens the group else if (IsClosed) { IsClosed = false; Openings.Add(masterBar); } }
public void AddBars(Track[] tracks, int barIndex) { if (tracks.Length == 0) { return; } 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 BarSizeInfo(); 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.Bars[barIndex]); s.BarRenderers[s.BarRenderers.Count - 1].RegisterMaxSizes(maxSizes); } } // 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].ApplySizes(maxSizes); if (s.BarRenderers[s.BarRenderers.Count - 1].Width > realWidth) { realWidth = s.BarRenderers[s.BarRenderers.Count - 1].Width; } } Width += realWidth; }
public void RevertLastBar() { if (MasterBars.Count > 1) { MasterBars.RemoveAt(MasterBars.Count - 1); var w = 0f; for (int i = 0, j = _allStaves.Count; i < j; i++) { var s = _allStaves[i]; w = Math.Max(w, s.BarRenderers[s.BarRenderers.Count - 1].Width); s.RevertLastBar(); } Width -= w; } }
public void AddMasterBar(MasterBar bar) { bar.Score = this; bar.Index = MasterBars.Count; if (MasterBars.Count != 0) { bar.PreviousMasterBar = MasterBars[MasterBars.Count - 1]; bar.PreviousMasterBar.NextMasterBar = bar; bar.Start = bar.PreviousMasterBar.Start + bar.PreviousMasterBar.CalculateDuration(); } // if the group is closed only the next upcoming header can // reopen the group in case of a repeat alternative, so we // remove the current group if (bar.IsRepeatStart || (_currentRepeatGroup.IsClosed && bar.AlternateEndings <= 0)) { _currentRepeatGroup = new RepeatGroup(); } _currentRepeatGroup.AddMasterBar(bar); MasterBars.Add(bar); }