package com.xenoage.zong.musiclayout.spacer.system;
import com.xenoage.zong.core.Score;
import com.xenoage.zong.core.format.ScoreFormat;
import com.xenoage.zong.core.format.StaffLayout;
import com.xenoage.zong.core.header.ScoreHeader;
import com.xenoage.zong.musiclayout.spacing.StavesSpacing;
import static com.xenoage.utils.kernel.Range.range;
/**
* Arranges staves vertically within a system into a {@link StavesSpacing}.
*
* @author Andreas Wenger
*/
public class StavesSpacer {
public static final StavesSpacer stavesSpacer = new StavesSpacer();
public StavesSpacing compute(Score score, int systemIndex) {
//compute staff distances
ScoreFormat scoreFormat = score.getFormat();
ScoreHeader scoreHeader = score.getHeader();
float[] distancesMm = new float[score.getStavesCount() - 1];
for (int iStaff : range(1, distancesMm.length)) {
StaffLayout staffLayout = scoreHeader.getStaffLayout(systemIndex, iStaff);
float staffDistanceMm = 0;
if (staffLayout != null) {
//use custom staff distance
staffDistanceMm = staffLayout.getDistance();
}
else {
//use default staff distance
staffDistanceMm = scoreFormat.getStaffLayoutNotNull(iStaff).getDistance();
}
distancesMm[iStaff - 1] = staffDistanceMm;
}
//create spacing
StavesSpacing stavesSpacing = new StavesSpacing(score.getStavesList().getStaves(), distancesMm,
scoreFormat.getInterlineSpace());
return stavesSpacing;
}
}