Exemple #1
0
 public static void __hx_ctor_alphatab_rendering_TabBarRenderer(global::alphatab.rendering.TabBarRenderer __temp_me104, global::alphatab.model.Bar bar)
 {
     unchecked
     {
         global::alphatab.rendering.GroupedBarRenderer.__hx_ctor_alphatab_rendering_GroupedBarRenderer(__temp_me104, bar);
     }
 }
Exemple #2
0
        public virtual void createNoteGlyphs(global::alphatab.model.Note n)
        {
            unchecked
            {
                if ((n.trillValue >= 0))
                {
                    this.addGlyph(new global::alphatab.rendering.glyphs.SpacingGlyph(new global::haxe.lang.Null <int>(0, true), new global::haxe.lang.Null <int>(0, true), ((int)((4 * this.renderer.stave.staveGroup.layout.renderer.settings.scale))), ((global::haxe.lang.Null <bool>)(default(global::haxe.lang.Null <bool>)))));
                    global::alphatab.model.Note trillNote = new global::alphatab.model.Note();
                    trillNote.isGhost = true;
                    trillNote.fret    = (n.trillValue - n.beat.voice.bar.track.tuning[((n.beat.voice.bar.track.tuning.length - ((n.@string - 1))) - 1)]);
                    trillNote.@string = n.@string;
                    global::alphatab.rendering.TabBarRenderer tr = default(global::alphatab.rendering.TabBarRenderer);
                    tr = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                    global::alphatab.rendering.Glyph trillNumberGlyph = new global::alphatab.rendering.glyphs.NoteNumberGlyph(new global::haxe.lang.Null <int>(0, true), new global::haxe.lang.Null <int>(0, true), ((global::alphatab.model.Note)(trillNote)), ((bool)(true)));
                    int l = (n.beat.voice.bar.track.tuning.length - n.@string);
                    trillNumberGlyph.y = tr.getTabY(l, default(global::haxe.lang.Null <int>));
                    this.addGlyph(trillNumberGlyph);
                }

                if ((n.bendPoints.length > 1))
                {
                    int bendHeight = ((int)((60 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                    this.renderer.registerOverflowTop(bendHeight);
                    int __temp_stmt599 = default(int);
                    {
                        double x = (this.getBeatDurationWidth() * this.renderer.stave.staveGroup.layout.renderer.settings.scale);
                        __temp_stmt599 = ((int)(x));
                    }

                    this.addGlyph(new global::alphatab.rendering.glyphs.BendGlyph(((global::alphatab.model.Note)(n)), ((int)(__temp_stmt599)), ((int)(bendHeight))));
                }
            }
        }
 public virtual void createNoteGlyph(global::alphatab.model.Note n)
 {
     unchecked
     {
         bool isGrace = (this.container.beat.graceType != global::alphatab.model.GraceType.None);
         global::alphatab.rendering.TabBarRenderer tr = default(global::alphatab.rendering.TabBarRenderer);
         tr = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
         global::alphatab.rendering.glyphs.NoteNumberGlyph noteNumberGlyph = new global::alphatab.rendering.glyphs.NoteNumberGlyph(new global::haxe.lang.Null <int>(0, true), new global::haxe.lang.Null <int>(0, true), ((global::alphatab.model.Note)(n)), ((bool)(isGrace)));
         int l = ((n.beat.voice.bar.track.tuning.length - n.@string) + 1);
         noteNumberGlyph.y = tr.getTabY(l, new global::haxe.lang.Null <int>(-2, true));
         this.noteNumbers.addNoteGlyph(noteNumberGlyph, n);
     }
 }
        public override void paint(int cx, int cy, global::alphatab.platform.ICanvas canvas)
        {
            unchecked
            {
                if (((this._endNote == default(global::alphatab.model.Note)) || (this._startNote.beat.index != this._endNote.beat.index)))
                {
                    return;
                }

                global::alphatab.rendering.TabBarRenderer r = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                global::alphatab.rendering.glyphs.TabBeatContainerGlyph parent = ((global::alphatab.rendering.glyphs.TabBeatContainerGlyph)(this._parent));
                global::alphatab.rendering.RenderingResources           res    = r.stave.staveGroup.layout.renderer.renderingResources;
                int startX = (cx + r.getNoteX(this._startNote, default(global::haxe.lang.Null <bool>)));
                int endX   = default(int);
                if ((this._endNote == default(global::alphatab.model.Note)))
                {
                    endX = (((cx + parent.x) + parent.postNotes.x) + parent.postNotes.width);
                }
                else
                {
                    endX = (cx + r.getNoteX(this._endNote, new global::haxe.lang.Null <bool>(false, true)));
                }

                bool   down   = (this._startNote.@string > 3);
                double offset = (res.tablatureFont.getSize() / 2);
                if (down)
                {
                    offset *= ((double)(-1));
                }

                double startY = ((cy + r.getNoteY(this._startNote)) + offset);
                double endY   = default(double);
                if ((this._endNote == default(global::alphatab.model.Note)))
                {
                    endY = startY;
                }
                else
                {
                    endY = ((cy + r.getNoteY(this._endNote)) + offset);
                }

                global::alphatab.rendering.glyphs.TieGlyph.paintTie(canvas, this.renderer.stave.staveGroup.layout.renderer.settings.scale, ((double)(startX)), startY, ((double)(endX)), endY, new global::haxe.lang.Null <bool>((this._startNote.@string > 3), true));
                canvas.setColor(this.renderer.stave.staveGroup.layout.renderer.renderingResources.mainGlyphColor);
                canvas.fill();
            }
        }
        public override void doLayout()
        {
            unchecked
            {
                int w = 0;
                {
                    int _g = 0;
                    global::haxe.root.Array <object> _g1 = this._notes;
                    while ((_g < _g1.length))
                    {
                        global::alphatab.rendering.glyphs.NoteNumberGlyph g = ((global::alphatab.rendering.glyphs.NoteNumberGlyph)(_g1[_g]));
                        ++_g;
                        g.renderer = this.renderer;
                        g.doLayout();
                        if ((g.width > w))
                        {
                            w = g.width;
                        }
                    }
                }

                global::alphatab.rendering.TabBarRenderer tabRenderer = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                double tabHeight = this.renderer.stave.staveGroup.layout.renderer.renderingResources.tablatureFont.getSize();
                int    effectY   = default(int);
                {
                    double x = (this.getNoteY(this._minNote) + (tabHeight / 2));
                    effectY = ((int)(x));
                }

                int effectSpacing = ((int)((7 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                {
                    object __temp_iterator449 = this.beatEffects.iterator();
                    while (((bool)(global::haxe.lang.Runtime.callField(__temp_iterator449, "hasNext", 407283053, default(global::haxe.root.Array)))))
                    {
                        global::alphatab.rendering.Glyph g1 = ((global::alphatab.rendering.Glyph)(global::haxe.lang.Runtime.callField(__temp_iterator449, "next", 1224901875, default(global::haxe.root.Array))));
                        g1.y        = effectY;
                        g1.x        = (this.width / 2);
                        g1.renderer = this.renderer;
                        effectY    += effectSpacing;
                        g1.doLayout();
                    }
                }

                this.width = w;
            }
        }
        public override void paint(int cx, int cy, global::alphatab.platform.ICanvas canvas)
        {
            unchecked
            {
                global::alphatab.rendering.TabBarRenderer r = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                int sizeX  = ((int)((12 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                int sizeY  = ((int)((3 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                int startX = default(int);
                int startY = default(int);
                int endX   = default(int);
                int endY   = default(int);
                {
                    global::alphatab.model.SlideType _g = this._type;
                    switch (global::haxe.root.Type.enumIndex(_g))
                    {
                    case 1:
                    case 2:
                    {
                        int startOffsetY = default(int);
                        int endOffsetY   = default(int);
                        if ((this._startNote.slideTarget == default(global::alphatab.model.Note)))
                        {
                            startOffsetY = 0;
                            endOffsetY   = 0;
                        }
                        else
                        {
                            if ((this._startNote.slideTarget.fret > this._startNote.fret))
                            {
                                startOffsetY = sizeY;
                                endOffsetY   = (sizeY * -1);
                            }
                            else
                            {
                                startOffsetY = (sizeY * -1);
                                endOffsetY   = sizeY;
                            }
                        }

                        startX = (cx + r.getNoteX(this._startNote, new global::haxe.lang.Null <bool>(true, true)));
                        startY = ((cy + r.getNoteY(this._startNote)) + startOffsetY);
                        if ((this._startNote.slideTarget != default(global::alphatab.model.Note)))
                        {
                            endX = (cx + r.getNoteX(this._startNote.slideTarget, new global::haxe.lang.Null <bool>(false, true)));
                            endY = ((cy + r.getNoteY(this._startNote.slideTarget)) + endOffsetY);
                        }
                        else
                        {
                            endX = (((cx + this._parent.x) + this._parent.postNotes.x) + this._parent.postNotes.width);
                            endY = startY;
                        }

                        break;
                    }


                    case 3:
                    {
                        endX   = (cx + r.getNoteX(this._startNote, new global::haxe.lang.Null <bool>(false, true)));
                        endY   = (cy + r.getNoteY(this._startNote));
                        startX = (endX - sizeX);
                        startY = ((cy + r.getNoteY(this._startNote)) + sizeY);
                        break;
                    }


                    case 4:
                    {
                        endX   = (cx + r.getNoteX(this._startNote, new global::haxe.lang.Null <bool>(false, true)));
                        endY   = (cy + r.getNoteY(this._startNote));
                        startX = (endX - sizeX);
                        startY = ((cy + r.getNoteY(this._startNote)) - sizeY);
                        break;
                    }


                    case 5:
                    {
                        startX = (cx + r.getNoteX(this._startNote, new global::haxe.lang.Null <bool>(true, true)));
                        startY = (cy + r.getNoteY(this._startNote));
                        endX   = (startX + sizeX);
                        endY   = ((cy + r.getNoteY(this._startNote)) - sizeY);
                        break;
                    }


                    case 6:
                    {
                        startX = (cx + r.getNoteX(this._startNote, new global::haxe.lang.Null <bool>(true, true)));
                        startY = (cy + r.getNoteY(this._startNote));
                        endX   = (startX + sizeX);
                        endY   = ((cy + r.getNoteY(this._startNote)) + sizeY);
                        break;
                    }


                    default:
                    {
                        return;
                    }
                    }
                }

                canvas.setColor(this.renderer.stave.staveGroup.layout.renderer.renderingResources.mainGlyphColor);
                canvas.beginPath();
                canvas.moveTo(((double)(startX)), ((double)(startY)));
                canvas.lineTo(((double)(endX)), ((double)(endY)));
                canvas.stroke();
            }
        }
Exemple #7
0
        public override void paint(int cx, int cy, global::alphatab.platform.ICanvas canvas)
        {
            unchecked
            {
                global::alphatab.rendering.TabBarRenderer     tabBarRenderer = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                global::alphatab.rendering.RenderingResources res            = this.renderer.stave.staveGroup.layout.renderer.renderingResources;
                int startY         = default(int);
                int __temp_stmt600 = default(int);
                {
                    double x = (tabBarRenderer.getNoteY(this._beat.maxNote()) - (res.tablatureFont.getSize() / 2));
                    __temp_stmt600 = ((int)(x));
                }

                startY = ((cy + this.y) + __temp_stmt600);
                double endY      = (((cy + this.y) + tabBarRenderer.getNoteY(this._beat.minNote())) + (res.tablatureFont.getSize() / 2));
                int    arrowX    = ((int)(((cx + this.x) + (((double)(this.width)) / 2))));
                double arrowSize = (8 * this.renderer.stave.staveGroup.layout.renderer.settings.scale);
                canvas.setColor(res.mainGlyphColor);
                if ((this._beat.brushType != global::alphatab.model.BrushType.None))
                {
                    if (((this._beat.brushType == global::alphatab.model.BrushType.BrushUp) || (this._beat.brushType == global::alphatab.model.BrushType.BrushDown)))
                    {
                        canvas.beginPath();
                        canvas.moveTo(((double)(arrowX)), ((double)(startY)));
                        canvas.lineTo(((double)(arrowX)), endY);
                        canvas.stroke();
                    }
                    else
                    {
                        int size  = ((int)((15 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                        int steps = default(int);
                        {
                            double v = (global::System.Math.Abs(((double)((endY - startY)))) / size);
                            {
                                double x1 = global::System.Math.Floor(((double)(v)));
                                steps = ((int)(x1));
                            }
                        }

                        {
                            int _g = 0;
                            while ((_g < ((int)(steps))))
                            {
                                int i = _g++;
                                global::alphatab.rendering.glyphs.SvgGlyph arrow = new global::alphatab.rendering.glyphs.SvgGlyph(new global::haxe.lang.Null <int>(((int)((3 * this.renderer.stave.staveGroup.layout.renderer.settings.scale))), true), new global::haxe.lang.Null <int>(0, true), ((global::alphatab.rendering.glyphs.LazySvg)(global::alphatab.rendering.glyphs.MusicFont.WaveVertical)), ((double)(1)), ((double)(1)));
                                arrow.renderer = this.renderer;
                                arrow.doLayout();
                                arrow.paint((cx + this.x), (startY + (i * size)), canvas);
                            }
                        }
                    }

                    if (((this._beat.brushType == global::alphatab.model.BrushType.BrushUp) || (this._beat.brushType == global::alphatab.model.BrushType.ArpeggioUp)))
                    {
                        canvas.beginPath();
                        canvas.moveTo(((double)(arrowX)), endY);
                        canvas.lineTo(((double)(((int)((arrowX + (arrowSize / 2)))))), ((double)(((int)((endY - arrowSize))))));
                        canvas.lineTo(((double)(((int)((arrowX - (arrowSize / 2)))))), ((double)(((int)((endY - arrowSize))))));
                        canvas.closePath();
                        canvas.fill();
                    }
                    else
                    {
                        canvas.beginPath();
                        canvas.moveTo(((double)(arrowX)), ((double)(startY)));
                        canvas.lineTo(((double)(((int)((arrowX + (arrowSize / 2)))))), ((double)(((int)((startY + arrowSize))))));
                        canvas.lineTo(((double)(((int)((arrowX - (arrowSize / 2)))))), ((double)(((int)((startY + arrowSize))))));
                        canvas.closePath();
                        canvas.fill();
                    }
                }
            }
        }
Exemple #8
0
        public override void paint(int cx, int cy, global::alphatab.platform.ICanvas canvas)
        {
            unchecked
            {
                global::alphatab.rendering.TabBarRenderer     r   = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                global::alphatab.rendering.RenderingResources res = this.renderer.stave.staveGroup.layout.renderer.renderingResources;
                double dX       = (((double)(this.width)) / 60);
                int    maxValue = 0;
                {
                    int _g1 = 0;
                    int _g  = this._note.bendPoints.length;
                    while ((_g1 < _g))
                    {
                        int i = _g1++;
                        if ((((global::alphatab.model.BendPoint)(this._note.bendPoints[i])).@value > maxValue))
                        {
                            maxValue = ((global::alphatab.model.BendPoint)(this._note.bendPoints[i])).@value;
                        }
                    }
                }

                double dY = (((double)(this._height)) / maxValue);
                int    xx = (cx + this.x);
                int    yy = ((cy + this.y) + r.getNoteY(this._note));
                canvas.beginPath();
                {
                    int _g11 = 0;
                    int _g2  = (this._note.bendPoints.length - 1);
                    while ((_g11 < _g2))
                    {
                        int i1 = _g11++;
                        global::alphatab.model.BendPoint firstPt  = ((global::alphatab.model.BendPoint)(this._note.bendPoints[i1]));
                        global::alphatab.model.BendPoint secondPt = ((global::alphatab.model.BendPoint)(this._note.bendPoints[(i1 + 1)]));
                        if (((firstPt.@value == secondPt.@value) && (i1 == (this._note.bendPoints.length - 2))))
                        {
                            continue;
                        }

                        double x1 = (xx + (dX * firstPt.offset));
                        double y1 = (yy - (dY * firstPt.@value));
                        double x2 = (xx + (dX * secondPt.offset));
                        double y2 = (yy - (dY * secondPt.@value));
                        if ((firstPt.@value == secondPt.@value))
                        {
                            canvas.moveTo(x1, y1);
                            canvas.lineTo(x2, y2);
                            canvas.stroke();
                        }
                        else
                        {
                            double hx = (x1 + ((x2 - x1)));
                            double hy = (yy - (dY * firstPt.@value));
                            canvas.moveTo(x1, y1);
                            canvas.bezierCurveTo(hx, hy, x2, y2, x2, y2);
                            canvas.stroke();
                        }

                        double arrowSize = (6 * this.renderer.stave.staveGroup.layout.renderer.settings.scale);
                        if ((secondPt.@value > firstPt.@value))
                        {
                            canvas.beginPath();
                            canvas.moveTo(x2, y2);
                            canvas.lineTo((x2 - (arrowSize * 0.5)), (y2 + arrowSize));
                            canvas.lineTo((x2 + (arrowSize * 0.5)), (y2 + arrowSize));
                            canvas.closePath();
                            canvas.fill();
                        }
                        else
                        {
                            if ((secondPt.@value != firstPt.@value))
                            {
                                canvas.beginPath();
                                canvas.moveTo(x2, y2);
                                canvas.lineTo((x2 - (arrowSize * 0.5)), (y2 - arrowSize));
                                canvas.lineTo((x2 + (arrowSize * 0.5)), (y2 - arrowSize));
                                canvas.closePath();
                                canvas.fill();
                            }
                        }

                        canvas.stroke();
                        if ((secondPt.@value != 0))
                        {
                            double dV = ((double)((secondPt.@value - firstPt.@value)));
                            bool   up = (dV > 0);
                            dV = global::System.Math.Abs(((double)(dV)));
                            string s = "";
                            if ((dV == 4))
                            {
                                s   = "full";
                                dV -= ((double)(4));
                            }
                            else
                            {
                                if ((dV > 4))
                                {
                                    int __temp_stmt594 = default(int);
                                    {
                                        double x = global::System.Math.Floor(((double)((dV / 4))));
                                        __temp_stmt594 = ((int)(x));
                                    }

                                    string __temp_stmt593 = global::Std.@string(__temp_stmt594);
                                    string __temp_stmt592 = global::haxe.lang.Runtime.concat(__temp_stmt593, " ");
                                    s = global::haxe.lang.Runtime.concat(s, __temp_stmt592);
                                    {
                                        double x3 = global::System.Math.Floor(((double)(dV)));
                                        dV -= ((double)(((int)(x3))));
                                    }
                                }
                            }

                            if ((dV > 0))
                            {
                                s = global::haxe.lang.Runtime.concat(s, global::haxe.lang.Runtime.concat(global::Std.@string(dV), "/4"));
                            }

                            if (!(string.Equals(s, "")))
                            {
                                if (!(up))
                                {
                                    s = global::haxe.lang.Runtime.concat("-", s);
                                }

                                canvas.setFont(res.tablatureFont);
                                double size = canvas.measureText(s);
                                double y    = default(double);
                                if (up)
                                {
                                    y = ((y2 - res.tablatureFont.getSize()) - (2 * this.renderer.stave.staveGroup.layout.renderer.settings.scale));
                                }
                                else
                                {
                                    y = (y2 + (2 * this.renderer.stave.staveGroup.layout.renderer.settings.scale));
                                }

                                double x4 = (x2 - (size / 2));
                                canvas.fillText(s, x4, y);
                            }
                        }
                    }
                }
            }
        }
        public override void paint(int cx, int cy, global::alphatab.platform.ICanvas canvas)
        {
            unchecked
            {
                global::alphatab.rendering.TabBarRenderer tabBarRenderer = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                global::alphatab.model.Track track = this.renderer.stave.staveGroup.layout.renderer.track;
                global::alphatab.rendering.RenderingResources res = this.renderer.stave.staveGroup.layout.renderer.renderingResources;
                double startY     = ((cy + this.y) + ((10 * this.renderer.stave.staveGroup.layout.renderer.settings.scale) * 0.6));
                int    endY       = ((cy + this.y) + tabBarRenderer.getTabY(track.tuning.length, new global::haxe.lang.Null <int>(-2, true)));
                double fontScale  = ((double)(1));
                double correction = ((double)(0));
                {
                    int _g = track.tuning.length;
                    switch (_g)
                    {
                    case 4:
                    {
                        fontScale = 0.6;
                        break;
                    }


                    case 5:
                    {
                        fontScale = 0.8;
                        break;
                    }


                    case 6:
                    {
                        fontScale  = 1.1;
                        correction = ((double)(1));
                        break;
                    }


                    case 7:
                    {
                        fontScale = 1.15;
                        break;
                    }


                    case 8:
                    {
                        fontScale = 1.35;
                        break;
                    }
                    }
                }

                global::alphatab.platform.model.Font font = res.tabClefFont.clone();
                font.setSize((font.getSize() * fontScale));
                canvas.setColor(res.mainGlyphColor);
                canvas.setFont(font);
                canvas.setTextAlign(global::alphatab.platform.model.TextAlign.Center);
                canvas.fillText("T", ((double)(((cx + this.x) + (this.width / 2)))), startY);
                canvas.fillText("A", ((double)(((cx + this.x) + (this.width / 2)))), ((startY + font.getSize()) - ((int)((correction * this.renderer.stave.staveGroup.layout.renderer.settings.scale)))));
                canvas.fillText("B", ((double)(((cx + this.x) + (this.width / 2)))), (startY + (((font.getSize() - ((int)((correction * this.renderer.stave.staveGroup.layout.renderer.settings.scale))))) * 2)));
            }
        }
Exemple #10
0
        public override void doLayout()
        {
            unchecked
            {
                base.doLayout();
                int minY  = 0;
                int maxY  = 0;
                int sizeY = ((int)((60 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                if ((this._beat.whammyBarPoints.length >= 2))
                {
                    double dy = (((double)(sizeY)) / 24);
                    {
                        int _g1 = 0;
                        int _g  = this._beat.whammyBarPoints.length;
                        while ((_g1 < _g))
                        {
                            int i = _g1++;
                            global::alphatab.model.BendPoint pt = ((global::alphatab.model.BendPoint)(this._beat.whammyBarPoints[i]));
                            int ptY = ((int)((0 - (dy * pt.@value))));
                            if ((ptY > maxY))
                            {
                                maxY = ptY;
                            }

                            if ((ptY < minY))
                            {
                                minY = ptY;
                            }
                        }
                    }
                }

                global::alphatab.rendering.TabBarRenderer tabBarRenderer = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                global::alphatab.model.Track track = this.renderer.stave.staveGroup.layout.renderer.track;
                int tabTop    = tabBarRenderer.getTabY(0, new global::haxe.lang.Null <int>(-2, true));
                int tabBottom = tabBarRenderer.getTabY(track.tuning.length, new global::haxe.lang.Null <int>(-2, true));
                int absMinY   = ((this.y + minY) + tabTop);
                int absMaxY   = ((this.y + maxY) - tabBottom);
                if ((absMinY < 0))
                {
                    int __temp_stmt601 = default(int);
                    {
                        double x = global::System.Math.Abs(((double)(absMinY)));
                        __temp_stmt601 = ((int)(x));
                    }

                    tabBarRenderer.registerOverflowTop(__temp_stmt601);
                }

                if ((absMaxY > 0))
                {
                    int __temp_stmt602 = default(int);
                    {
                        double x1 = global::System.Math.Abs(((double)(absMaxY)));
                        __temp_stmt602 = ((int)(x1));
                    }

                    tabBarRenderer.registerOverflowBottom(__temp_stmt602);
                }

                int height = tabBarRenderer.height;
            }
        }
Exemple #11
0
        public override void paint(int cx, int cy, global::alphatab.platform.ICanvas canvas)
        {
            unchecked
            {
                global::alphatab.rendering.TabBarRenderer     tabBarRenderer = ((global::alphatab.rendering.TabBarRenderer)(this.renderer));
                global::alphatab.rendering.RenderingResources res            = this.renderer.stave.staveGroup.layout.renderer.renderingResources;
                double startX = ((cx + this.x) + (((double)(this._parent.onNotes.width)) / 2));
                double endX   = default(double);
                if (((this._beat.nextBeat == default(global::alphatab.model.Beat)) || (this._beat.voice != this._beat.nextBeat.voice)))
                {
                    endX = (((cx + this.x) + (((double)(this._parent.onNotes.width)) / 2)) + this._parent.postNotes.width);
                }
                else
                {
                    endX = ((double)((cx + tabBarRenderer.getBeatX(this._beat.nextBeat))));
                }

                int startY     = (cy + this.y);
                int textOffset = ((int)((3 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                int sizeY      = ((int)((60 * this.renderer.stave.staveGroup.layout.renderer.settings.scale)));
                canvas.setTextAlign(global::alphatab.platform.model.TextAlign.Center);
                if ((this._beat.whammyBarPoints.length >= 2))
                {
                    double dx = (((endX - startX)) / 60);
                    double dy = (((double)(sizeY)) / 24);
                    canvas.beginPath();
                    {
                        int _g1 = 0;
                        int _g  = (this._beat.whammyBarPoints.length - 1);
                        while ((_g1 < _g))
                        {
                            int i = _g1++;
                            global::alphatab.model.BendPoint pt1 = ((global::alphatab.model.BendPoint)(this._beat.whammyBarPoints[i]));
                            global::alphatab.model.BendPoint pt2 = ((global::alphatab.model.BendPoint)(this._beat.whammyBarPoints[(i + 1)]));
                            if (((pt1.@value == pt2.@value) && (i == (this._beat.whammyBarPoints.length - 2))))
                            {
                                continue;
                            }

                            int pt1X = ((int)((startX + (dx * pt1.offset))));
                            int pt1Y = ((int)((startY - (dy * pt1.@value))));
                            int pt2X = ((int)((startX + (dx * pt2.offset))));
                            int pt2Y = ((int)((startY - (dy * pt2.@value))));
                            canvas.moveTo(((double)(pt1X)), ((double)(pt1Y)));
                            canvas.lineTo(((double)(pt2X)), ((double)(pt2Y)));
                            if ((pt2.@value != 0))
                            {
                                double dv = (pt2.@value / 4.0);
                                bool   up = ((pt2.@value - pt1.@value) >= 0);
                                string s  = "";
                                if ((dv < 0))
                                {
                                    s = global::haxe.lang.Runtime.concat(s, "-");
                                }

                                if (((dv >= 1) || (dv <= -1)))
                                {
                                    int __temp_stmt605 = default(int);
                                    {
                                        double v = global::System.Math.Abs(((double)(dv)));
                                        {
                                            double x = global::System.Math.Floor(((double)(v)));
                                            __temp_stmt605 = ((int)(x));
                                        }
                                    }

                                    string __temp_stmt604 = global::Std.@string(__temp_stmt605);
                                    string __temp_stmt603 = global::haxe.lang.Runtime.concat(__temp_stmt604, " ");
                                    s = global::haxe.lang.Runtime.concat(s, __temp_stmt603);
                                }

                                {
                                    double x1 = global::System.Math.Floor(((double)(dv)));
                                    dv -= ((double)(((int)(x1))));
                                }

                                if ((dv == 0.25))
                                {
                                    s = global::haxe.lang.Runtime.concat(s, "1/4");
                                }
                                else
                                {
                                    if ((dv == 0.5))
                                    {
                                        s = global::haxe.lang.Runtime.concat(s, "1/2");
                                    }
                                    else
                                    {
                                        if ((dv == 0.75))
                                        {
                                            s = global::haxe.lang.Runtime.concat(s, "3/4");
                                        }
                                    }
                                }

                                canvas.setFont(res.graceFont);
                                double size = canvas.measureText(s);
                                double sy   = default(double);
                                if (up)
                                {
                                    sy = ((pt2Y - res.graceFont.getSize()) - textOffset);
                                }
                                else
                                {
                                    sy = ((double)((pt2Y + textOffset)));
                                }

                                int sx = pt2X;
                                canvas.fillText(s, ((double)(sx)), sy);
                            }
                        }
                    }

                    canvas.stroke();
                }
            }
        }