AlphaTab.Rendering.Glyphs.TieGlyph.Paint C# (CSharp) Method

Paint() public method

public Paint ( float cx, float cy, ICanvas canvas ) : void
cx float
cy float
canvas ICanvas
return void
        public override void Paint(float cx, float cy, ICanvas canvas)
        {
            if (EndNote == null) return;

            var startNoteRenderer = Renderer.Layout.GetRendererForBar(Renderer.Staff.StaveId, StartNote.Beat.Voice.Bar);
            var endNoteRenderer = Renderer.Layout.GetRendererForBar(Renderer.Staff.StaveId, EndNote.Beat.Voice.Bar);

            float startX = 0;
            float endX = 0;

            float startY = 0;
            float endY = 0;

            var shouldDraw = false;
            var parent = (BeatContainerGlyph)Parent;

            // if we are on the tie start, we check if we
            // either can draw till the end note, or we just can draw till the bar end
            if (!_forEnd)
            {
                // line break or bar break
                if (startNoteRenderer != endNoteRenderer)
                {
                    startX = cx + startNoteRenderer.GetNoteX(StartNote);

                    // line break: to bar end
                    if (endNoteRenderer == null || startNoteRenderer.Staff != endNoteRenderer.Staff)
                    {
                        endX = cx + parent.X;
                    }
                    // bar break: to tie destination
                    // differs only by addition of EndNote X coordinate
                    else
                    {
                        endX = cx + parent.X;
                        endX += endNoteRenderer.GetNoteX(EndNote);
                    }

                    startY = cy + startNoteRenderer.GetNoteY(StartNote) + YOffset;
                    endY = startY;
                }
                else
                {
                    startX = cx + startNoteRenderer.GetNoteX(StartNote);
                    endX = cx + endNoteRenderer.GetNoteX(EndNote, false);

                    startY = cy + startNoteRenderer.GetNoteY(StartNote) + YOffset;
                    endY = cy + endNoteRenderer.GetNoteY(EndNote) + YOffset;
                }
                shouldDraw = true;
            }
            // if we draw for the tie end, we only draw a tie if we had a line break between start and end
            // in this case there will be a tie from bar start to the note
            else if (startNoteRenderer.Staff != endNoteRenderer.Staff)
            {
                startX = cx;
                endX = cx + endNoteRenderer.GetNoteX(EndNote);

                startY = cy + endNoteRenderer.GetNoteY(EndNote) + YOffset;
                endY = startY;

                shouldDraw = true;
            }

            if (shouldDraw)
            {
                PaintTie(canvas, Scale, startX, startY, endX, endY,
                    GetBeamDirection(StartNote, startNoteRenderer) == BeamDirection.Down);

                canvas.Fill();
            }
        }