private void DrawTiesInternal(ScoreRendererBase renderer, double arcStartX, double arcStartY, double arcEndY, double arcWidth, double arcHeight, int modifierY, Note element, Pen tiePen, double tieMidpointThickness) { var gap = tieMidpointThickness - tiePen.Thickness; renderer.DrawBezier( new Point(arcStartX, arcStartY), new Point(arcStartX + 0.25 * arcWidth, arcStartY + arcHeight * modifierY), new Point(arcStartX + 0.75 * arcWidth, arcStartY + arcHeight * modifierY), new Point(arcStartX + arcWidth, arcEndY), tiePen, element); if (gap >= tiePen.Thickness) { renderer.DrawBezier( new Point(arcStartX, arcStartY), new Point(arcStartX + 0.25 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness / 2) * modifierY), new Point(arcStartX + 0.75 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness / 2) * modifierY), new Point(arcStartX + arcWidth, arcEndY), tiePen, element); } renderer.DrawBezier( new Point(arcStartX, arcStartY), new Point(arcStartX + 0.25 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness) * modifierY), new Point(arcStartX + 0.75 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness) * modifierY), new Point(arcStartX + arcWidth, arcEndY), tiePen, element); }
private void DrawSlurs(ScoreRendererBase renderer, Note element, double notePositionY) { if (element.Slur == null) { return; } VerticalPlacement slurPlacement; if (element.Slur.Placement.HasValue) { slurPlacement = element.Slur.Placement.Value; } else { slurPlacement = element.StemDirection == VerticalDirection.Up ? VerticalPlacement.Below : VerticalPlacement.Above; } if (element.Slur.Type == NoteSlurType.Start) { slurStartPlacement = slurPlacement; if (slurPlacement == VerticalPlacement.Above) { measurementService.SlurStartPoint = new Point(scoreService.CursorPositionX, element.StemDirection == VerticalDirection.Down ? notePositionY : notePositionY + element.StemDefaultY); } else { measurementService.SlurStartPoint = new Point(scoreService.CursorPositionX, notePositionY); } } else if (element.Slur.Type == NoteSlurType.Stop) { if (slurStartPlacement == VerticalPlacement.Above) { renderer.DrawBezier(measurementService.SlurStartPoint.X + 10, measurementService.SlurStartPoint.Y + 18, measurementService.SlurStartPoint.X + 12, measurementService.SlurStartPoint.Y + 9, scoreService.CursorPositionX + 8, (element.StemDirection == VerticalDirection.Up ? element.StemDefaultY + scoreService.Systems.Take(scoreService.CurrentSystemNo - 1).Sum(s => s.Height) : notePositionY + 9), scoreService.CursorPositionX + 10, (element.StemDirection == VerticalDirection.Up ? element.StemDefaultY + scoreService.Systems.Take(scoreService.CurrentSystemNo - 1).Sum(s => s.Height) + 9 : notePositionY + 18), element); } else if (slurStartPlacement == VerticalPlacement.Below) { renderer.DrawBezier(measurementService.SlurStartPoint.X + 10, measurementService.SlurStartPoint.Y + 30, measurementService.SlurStartPoint.X + 12, measurementService.SlurStartPoint.Y + 44, scoreService.CursorPositionX + 8, notePositionY + 44, scoreService.CursorPositionX + 10, notePositionY + 30, element); } } }