AlphaTab.Rendering.Glyphs.WhammyBarGlyph.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)
        {
            var tabBarRenderer = (TabBarRenderer)Renderer;
            var res = Renderer.Resources;
            var startX = cx + X + _parent.OnNotes.Width / 2;
            var endX = _beat.NextBeat == null || _beat.Voice != _beat.NextBeat.Voice
                    ? cx + X + _parent.Width
                    : cx + tabBarRenderer.GetBeatX(_beat.NextBeat);
            var startY = cy + X;
            var textOffset = 3 * Scale;

            var sizeY = WhammyMaxOffset * Scale;

            var old = canvas.TextAlign;
            canvas.TextAlign = TextAlign.Center;
            if (_beat.WhammyBarPoints.Count >= 2)
            {
                var dx = (endX - startX) / Beat.WhammyBarMaxPosition;
                var dy = sizeY / Beat.WhammyBarMaxValue;

                canvas.BeginPath();
                for (int i = 0, j = _beat.WhammyBarPoints.Count - 1; i < j; i++)
                {
                    var pt1 = _beat.WhammyBarPoints[i];
                    var pt2 = _beat.WhammyBarPoints[i + 1];

                    if (pt1.Value == pt2.Value && i == _beat.WhammyBarPoints.Count - 2) continue;

                    var pt1X = startX + (dx * pt1.Offset);
                    var pt1Y = startY - (dy * pt1.Value);

                    var pt2X = startX + (dx * pt2.Offset);
                    var pt2Y = startY - (dy * pt2.Value);

                    canvas.MoveTo(pt1X, pt1Y);
                    canvas.LineTo(pt2X, pt2Y);

                    if (pt2.Value != 0)
                    {
                        var dv = pt2.Value / 4.0;
                        var up = (pt2.Value - pt1.Value) >= 0;
                        var s = "";
                        if (dv < 0) s += "-";

                        if (dv >= 1 || dv <= -1)
                            s += Math.Abs(dv) + " ";

                        dv -= (int)dv;
                        if (dv == 0.25)
                            s += "1/4";
                        else if (dv == 0.5)
                            s += "1/2";
                        else if (dv == 0.75)
                            s += "3/4";

                        canvas.Font = res.GraceFont;
                        //var size = canvas.MeasureText(s);
                        var sy = up
                                    ? pt2Y - res.GraceFont.Size - textOffset
                                    : pt2Y + textOffset;
                        var sx = pt2X;
                        canvas.FillText(s, sx, sy);

                    }
                }
                canvas.Stroke();
            }
            canvas.TextAlign = old;
        }