package com.xenoage.zong.musiclayout.notator.beam;
import com.xenoage.utils.annotations.MaybeNull;
import com.xenoage.zong.core.music.beam.Beam;
import com.xenoage.zong.core.position.MPElement;
import com.xenoage.zong.musiclayout.layouter.Context;
import com.xenoage.zong.musiclayout.notation.BeamNotation;
import com.xenoage.zong.musiclayout.notation.ChordNotation;
import com.xenoage.zong.musiclayout.notation.Notations;
import com.xenoage.zong.musiclayout.notation.beam.Fragments;
import com.xenoage.zong.musiclayout.notation.chord.StemNotation;
import com.xenoage.zong.musiclayout.notator.ElementNotator;
import com.xenoage.zong.musiclayout.notator.beam.lines.BeamRules;
import java.util.List;
import static com.xenoage.zong.musiclayout.notator.beam.BeamFragmenter.beamFragmenter;
/**
* Computes {@link BeamNotation}s and modifies the {@link StemNotation}s of a {@link Beam}.
*
* @author Andreas Wenger
*/
public class BeamNotator
implements ElementNotator {
public static final BeamNotator beamNotator = new BeamNotator();
@Override @MaybeNull public BeamNotation compute(MPElement element, Context context, Notations notations) {
return compute((Beam) element, notations);
}
@MaybeNull public BeamNotation compute(Beam beam, Notations notations) {
//compute fragments
List<Fragments> fragments = beamFragmenter.compute(beam);
//get minimum stem length and gap
BeamRules beamRules = BeamRules.getRules(beam);
float gapIs = beamRules.getGapIs();
//collect chords
List<ChordNotation> chords = notations.getBeamChords(beam);
//create notation
BeamNotation beamNotation = new BeamNotation(beam, beam.getMP(), fragments, gapIs, chords);
return beamNotation;
}
}