public override void DoLayout()
        {
            base.DoLayout();

            _bendGlyphs = new FastList<BendGlyph>();
            for (int i = 0; i < Beat.Notes.Count; i++)
            {
                var n = Beat.Notes[i];
                if (n.HasBend)
                {
                    var bendValueHeight = 6;
                    var bendHeight = n.MaxBendPoint.Value * bendValueHeight;
                    Renderer.RegisterOverflowTop(bendHeight);

                    var bend = new BendGlyph(n, bendValueHeight);
                    bend.X = OnNotes.X + OnNotes.Width;
                    bend.Renderer = Renderer;
                    _bendGlyphs.Add(bend);
                }
            }
        }
        public override void DoLayout()
        {
            base.DoLayout();

            _bendGlyphs = new FastList <BendGlyph>();
            for (int i = 0; i < Beat.Notes.Count; i++)
            {
                var n = Beat.Notes[i];
                if (n.HasBend)
                {
                    var bendValueHeight = 6;
                    var bendHeight      = n.MaxBendPoint.Value * bendValueHeight;
                    Renderer.RegisterOverflowTop(bendHeight);

                    var bend = new BendGlyph(n, bendValueHeight);
                    bend.X        = OnNotes.X + OnNotes.Width;
                    bend.Renderer = Renderer;
                    _bendGlyphs.Add(bend);
                }
            }
        }
示例#3
0
        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;
            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;
                        var s  = "";

                        if (dv >= 4 || dv <= -4)
                        {
                            int steps = dv / 4;
                            s += steps;
                            // Quaters
                            dv -= steps * 4;
                        }

                        if (dv > 0)
                        {
                            s += BendGlyph.GetFractionSign(dv);
                        }

                        if (s != "")
                        {
                            // draw label
                            canvas.Font = res.GraceFont;
                            //var size = canvas.MeasureText(s);
                            var sy = pt2Y;
                            if (pt2Y < pt1Y)
                            {
                                sy -= canvas.Font.Size;
                            }
                            else
                            {
                                sy += 3 * Scale;
                            }
                            var sx = pt2X;
                            canvas.FillText(s, sx, sy);
                        }
                    }
                }
                canvas.Stroke();
            }
            canvas.TextAlign = old;
        }