package com.xenoage.zong.musiclayout.spacer; import com.xenoage.zong.core.Score; import com.xenoage.zong.core.music.beam.Beam; import com.xenoage.zong.core.position.MP; import com.xenoage.zong.core.util.BeamIterator; import com.xenoage.zong.musiclayout.notation.BeamNotation; import com.xenoage.zong.musiclayout.notation.Notations; import com.xenoage.zong.musiclayout.spacing.BeamSpacing; import com.xenoage.zong.musiclayout.spacing.FramesSpacing; import lombok.val; import java.util.Map; import static com.xenoage.utils.collections.CollectionUtils.map; import static com.xenoage.zong.musiclayout.spacer.beam.BeamSpacer.beamSpacer; /** * Computes the {@link BeamSpacing}s for a score. * * @author Andreas Wenger */ public class BeamsSpacer { public static final BeamsSpacer beamsSpacer = new BeamsSpacer(); public Map<Beam, BeamSpacing> compute(Score score, Notations notations, FramesSpacing frames) { Map<Beam, BeamSpacing> ret = map(); BeamIterator itB = new BeamIterator(score); for (Beam beam : itB) { MP mp = itB.getMp(); int staffLinesCount = score.getStaff(mp).getLinesCount(); val frame = frames.getFrame(mp.measure); val system = frame.getSystem(mp.measure); val beamNotation = (BeamNotation) notations.get(beam); ret.put(beam, beamSpacer.compute(beamNotation, system, score)); } return ret; } }