package com.xenoage.zong.musiclayout.notator; import static com.xenoage.zong.core.music.Pitch.pi; import static com.xenoage.zong.core.music.util.Interval.Before; import com.xenoage.zong.core.music.clef.ClefType; import com.xenoage.zong.core.music.key.TraditionalKey; import com.xenoage.zong.core.position.MPElement; import com.xenoage.zong.musiclayout.layouter.Context; import com.xenoage.zong.musiclayout.notation.Notations; import com.xenoage.zong.musiclayout.notation.TraditionalKeyNotation; import com.xenoage.zong.musiclayout.spacing.ElementWidth; /** * Computes a {@link TraditionalKeyNotation} from a {@link TraditionalKey}. * * @author Andreas Wenger */ public class TraditionalKeyNotator implements ElementNotator { public static final TraditionalKeyNotator traditionalKeyNotator = new TraditionalKeyNotator(); @Override public TraditionalKeyNotation compute(MPElement element, Context context, Notations notations) { return compute((TraditionalKey) element, context); } public TraditionalKeyNotation compute(TraditionalKey key, Context context) { //compute width float width = 0; int fifth = key.getFifths(); if (fifth > 0) width = fifth * context.settings.spacings.widthSharp; else width = -fifth * context.settings.spacings.widthFlat; ElementWidth keyWidth = new ElementWidth(0, width, 1); //compute LPs ClefType contextClef = context.score.getClef(context.mp, Before); int c4Lp = contextClef.getLp(pi(0, 0, 4)); int minLp = contextClef.getKeySignatureLowestLp(fifth); return new TraditionalKeyNotation(key, keyWidth, c4Lp, minLp); } }