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); } } }
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; }