AlphaTab.Rendering.Staves.StaveGroup.AddBars C# (CSharp) Method

AddBars() public method

public AddBars ( AlphaTab.Model.Track tracks, int barIndex ) : AddBarsToStaveGroupResult
tracks AlphaTab.Model.Track
barIndex int
return AddBarsToStaveGroupResult
        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;
        }

Usage Example

        public override void DoLayoutAndRender()
        {
            if (Renderer.Settings.Staves.Count == 0) return;

            var score = Renderer.Score;
            var canvas = Renderer.Canvas;

            var startIndex = Renderer.Settings.Layout.Get("start", 1);
            startIndex--; // map to array index
            startIndex = Math.Min(score.MasterBars.Count - 1, Math.Max(0, startIndex));
            var currentBarIndex = startIndex;

            var endBarIndex = Renderer.Settings.Layout.Get("count", score.MasterBars.Count);
            endBarIndex = startIndex + endBarIndex - 1; // map count to array index
            endBarIndex = Math.Min(score.MasterBars.Count - 1, Math.Max(0, endBarIndex));

            var x = PagePadding[0];
            var y = PagePadding[1];

            _group = CreateEmptyStaveGroup();

            while (currentBarIndex <= endBarIndex)
            {
                _group.AddBars(Renderer.Tracks, currentBarIndex);
                currentBarIndex++;
            }

            _group.X = x;
            _group.Y = y;

            _group.FinalizeGroup(this);

            y += _group.Height + (GroupSpacing * Scale);

            Height = y + PagePadding[3];
            Width = _group.X + _group.Width + PagePadding[2];

            // TODO: Find a good way to render the score partwise
            // we need to precalculate the final height somehow

            canvas.BeginRender(Width, Height);
            canvas.Color = Renderer.RenderingResources.MainGlyphColor;
            canvas.TextAlign = TextAlign.Left;
            _group.Paint(0, 0, Renderer.Canvas);
            var result = canvas.EndRender();
            OnPartialRenderFinished(new RenderFinishedEventArgs
            {
                TotalWidth = Width,
                TotalHeight = y,
                Width = Width,
                Height = Height,
                RenderResult = result
            });
        }
All Usage Examples Of AlphaTab.Rendering.Staves.StaveGroup::AddBars