Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
 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;
     }
 }
Esempio n. 4
0
        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);
        }