public float GetBeatX(Beat beat, BeatXPosition requestedPosition = BeatXPosition.PreNotes) { var container = GetBeatContainer(beat); if (container != null) { switch (requestedPosition) { case BeatXPosition.PreNotes: return(container.VoiceContainer.X + container.X); case BeatXPosition.OnNotes: return(container.VoiceContainer.X + container.X + container.OnNotes.X); case BeatXPosition.MiddleNotes: return(container.VoiceContainer.X + container.X + container.OnTimeX); case BeatXPosition.PostNotes: return(container.VoiceContainer.X + container.X + container.OnNotes.X + container.OnNotes.Width); case BeatXPosition.EndBeat: return(container.VoiceContainer.X + container.X + container.Width); } } return(0); }
protected GroupedEffectGlyph(BeatXPosition endPosition) : base(0, 0) { _endPosition = endPosition; }
public float GetBeatX(Beat beat, BeatXPosition requestedPosition = BeatXPosition.PreNotes) { var container = GetBeatContainer(beat); if (container != null) { switch (requestedPosition) { case BeatXPosition.PreNotes: return container.VoiceContainer.X + container.X + container.PreNotes.X; case BeatXPosition.OnNotes: return container.VoiceContainer.X + container.X + container.OnNotes.X; case BeatXPosition.PostNotes: return container.VoiceContainer.X + container.X + container.OnNotes.X + container.OnNotes.Width; case BeatXPosition.EndBeat: return container.VoiceContainer.X + container.X + container.Width; } } return 0; }
public override void Paint(float cx, float cy, ICanvas canvas) { var startNoteRenderer = Renderer; Beat endBeat = _beat.NextBeat; TabBarRenderer endNoteRenderer = null; BeatXPosition endXPositionType = BeatXPosition.PreNotes; if (endBeat != null) { endNoteRenderer = Renderer.ScoreRenderer.Layout.GetRendererForBar <TabBarRenderer>(Renderer.Staff.StaveId, endBeat.Voice.Bar); if (endNoteRenderer == null || endNoteRenderer.Staff != startNoteRenderer.Staff) { endBeat = null; endNoteRenderer = null; } else if (endNoteRenderer != startNoteRenderer && !endBeat.HasWhammyBar) { endBeat = null; endNoteRenderer = null; } else { endXPositionType = endBeat.HasWhammyBar && (startNoteRenderer.Settings.DisplayMode != DisplayMode.SongBook || endBeat.WhammyBarType != WhammyType.Dip) ? BeatXPosition.MiddleNotes : BeatXPosition.PreNotes; } } float startX; float endX; if (_isSimpleDip) { startX = cx + startNoteRenderer.X + startNoteRenderer.GetBeatX(_beat, BeatXPosition.OnNotes) - ScoreWhammyBarGlyph.SimpleDipPadding * Scale; endX = cx + startNoteRenderer.X + startNoteRenderer.GetBeatX(_beat, BeatXPosition.PostNotes) + ScoreWhammyBarGlyph.SimpleDipPadding * Scale; } else { startX = cx + startNoteRenderer.X + startNoteRenderer.GetBeatX(_beat, BeatXPosition.MiddleNotes); endX = endNoteRenderer == null ? cx + startNoteRenderer.X + startNoteRenderer.Width - 2 * Scale : cx + endNoteRenderer.X + endNoteRenderer.GetBeatX(endBeat, endXPositionType); } var old = canvas.TextAlign; canvas.TextAlign = TextAlign.Center; if (_renderPoints.Count >= 2) { var dx = (endX - startX) / BendPoint.MaxPosition; canvas.BeginPath(); var zeroY = cy + Renderer.Staff.GetSharedLayoutData(TopOffsetSharedDataKey, 0); var slurText = _beat.WhammyStyle == BendStyle.Gradual ? "grad." : ""; for (int i = 0, j = _renderPoints.Count - 1; i < j; i++) { var firstPt = _renderPoints[i]; var secondPt = _renderPoints[i + 1]; var nextPt = i < j - 2 ? _renderPoints[i + 2] : null; var isFirst = i == 0; // draw pre-bend if previous if (i == 0 && firstPt.Value != 0 && !_beat.IsContinuedWhammy) { PaintWhammy(false, new BendPoint(), firstPt, secondPt, startX, zeroY, dx, canvas); isFirst = false; } PaintWhammy(isFirst, firstPt, secondPt, nextPt, startX, zeroY, dx, canvas, slurText); slurText = ""; } canvas.Stroke(); } canvas.TextAlign = old; }
protected virtual float CalculateEndX(BarRendererBase endBeatRenderer, Beat endBeat, float cx, BeatXPosition endPosition) { if (endBeat == null) { return(cx + endBeatRenderer.X + X + Width); } else { return(cx + endBeatRenderer.X + endBeatRenderer.GetBeatX(endBeat, endPosition)); } }