use of com.xenoage.zong.core.music.format.BezierPoint in project Zong by Xenoage.
the class OtherReader method readBezierPoint.
@MaybeNull
public static BezierPoint readBezierPoint(MxlPosition mxlPosition, MxlBezier mxlBezier, float tenthsMm, int staffLinesCount, float noteLP, Fraction chordDuration) {
Float px = mxlPosition.getDefaultX();
Float py = mxlPosition.getDefaultY();
Float cx = (mxlBezier != null ? mxlBezier.getBezierX() : null);
Float cy = (mxlBezier != null ? mxlBezier.getBezierY() : null);
SP point = null;
SP control = null;
float halfNoteWidth = getNoteheadWidth(chordDuration) / 2;
if (px != null && py != null) {
float fpx = notNull(px, 0).floatValue();
float fpy = notNull(py, 0).floatValue();
// default-x is relative to left side of note. thus, substract the half width
// of a note (TODO: note type. e.g., whole note is wider)
point = sp((fpx / 10 - halfNoteWidth) * tenthsMm, (staffLinesCount - 1) * 2 + fpy / 10 * 2 - noteLP);
}
if (cx != null && cy != null) {
float fcx = notNull(cx, 0).floatValue();
float fcy = notNull(cy, 0).floatValue();
control = sp((fcx / 10 - halfNoteWidth) * tenthsMm, fcy / 10 * 2);
}
if (point != null || control != null)
return new BezierPoint(point, control);
else
return null;
}
Aggregations