Esempio n. 1
0
 public BarRenderingContext(RowRenderingContext owner, Point location, Size availableSize, BarInRowPosition inRowPosition)
     : base(owner)
 {
     this.Location      = location;
     this.AvailableSize = availableSize;
     this.InRowPosition = inRowPosition;
     _beamSlopes        = new Dictionary <Beam, BeamSlope>();
 }
Esempio n. 2
0
        public async Task Render(Point location, Size size, BarInRowPosition inRowPosition)
        {
            _barRenderingContext = new BarRenderingContext(this.RenderingContext, location, size, inRowPosition);
            _columnRenderers.AssignRenderingContexts(_barRenderingContext);
            _voiceRenderers.AssignRenderingContexts(_barRenderingContext);

            var width = size.Width;

            var position = 0.0;

            if (inRowPosition == BarInRowPosition.First)
            {
                _barRenderingContext.DrawOpenBarLine(OpenBarLine.Standard, position);   //todo: implement this in DrawTabHeader
                position += await _barRenderingContext.DrawTabHeader();
            }

            if (this.Element.OpenLine != null)
            {
                _barRenderingContext.DrawOpenBarLine(this.Element.OpenLine.Value, position);
            }

            _barRenderingContext.Owner.HeaderWidth = position;

            position += _barRenderingContext.Style.BarHorizontalPadding;

            position += await this.RenderTimeSignature(_barRenderingContext, position);

            var minDuration = this.Element.Columns.Min(c => c.GetDuration());
            var minSize     = await this.MeasureMinSize(this.RenderingContext.PrimitiveRenderer);

            var widthRatio = (width - position) / minSize;

            _barRenderingContext.ColumnRenderingInfos = new BarColumnRenderingInfo[this.Element.Columns.Count];

            for (var i = 0; i < this.Element.Columns.Count; i++)
            {
                var column = this.Element.Columns[i];

                var columnWidth = await this.GetColumnMinWidthInBar(this.RenderingContext.PrimitiveRenderer, column, minDuration) * widthRatio;

                _barRenderingContext.ColumnRenderingInfos[i] = new BarColumnRenderingInfo(column, position, columnWidth);

                var barColumnRenderer = _columnRenderers[i];
                await barColumnRenderer.PreRender();

                position += columnWidth;
            }

            foreach (var renderer in _voiceRenderers)
            {
                await renderer.Render();
            }

            foreach (var barColumnRenderer in _columnRenderers)
            {
                await barColumnRenderer.Render();
            }

            if (this.Element.CloseLine != null)
            {
                _barRenderingContext.DrawCloseBarLine(this.Element.CloseLine.Value, width);
            }
            else if (this.Element.NextBar == null)
            {
                _barRenderingContext.DrawCloseBarLine(CloseBarLine.End, width);
            }
            else if (inRowPosition == BarInRowPosition.Last)
            {
                _barRenderingContext.DrawCloseBarLine(CloseBarLine.Standard, width);
            }

            if (this.Element.AlternativeEndingPosition == AlternativeEndingPosition.Start)
            {
                _barRenderingContext.IsSectionRenderingPostponed = true;
            }
            else
            {
                await this.RenderSection();
            }

            await this.RenderTranspositionSignature();

            await this.RenderTempoSignature();

            this.RenderingContext.PreviousDocumentState = this.Element.DocumentState;
        }