package com.xenoage.zong.renderer.stamping;
import com.xenoage.zong.core.music.key.TraditionalKey;
import com.xenoage.zong.musiclayout.stampings.KeySignatureStamping;
import com.xenoage.zong.musiclayout.stampings.Stamping;
import com.xenoage.zong.renderer.RendererArgs;
import com.xenoage.zong.renderer.canvas.Canvas;
import com.xenoage.zong.symbols.Symbol;
import com.xenoage.zong.symbols.common.CommonSymbol;
import static com.xenoage.zong.core.music.format.SP.sp;
/**
* Renderer for a {@link KeySignatureStamping}.
*
* @author Andreas Wenger
*/
public class KeySignatureRenderer
extends StampingRenderer {
/**
* Draws the given {@link KeySignatureStamping} on the given {@link Canvas},
* using the given {@link RendererArgs}.
*/
@Override public void draw(Stamping stamping, Canvas canvas, RendererArgs args) {
KeySignatureStamping s = (KeySignatureStamping) stamping;
int fifths = s.key.element.getFifths();
if (fifths == 0)
return;
boolean useSharps = (fifths > 0);
float distance = s.distanceMm;
Symbol symbol = args.symbolPool.getSymbol(useSharps ? CommonSymbol.AccidentalSharp
: CommonSymbol.AccidentalFlat);
//paint sharps/flats
fifths = Math.abs(fifths);
float interlineSpace = s.parentStaff.is;
for (int i = 0; i < fifths; i++) {
int linePosition = TraditionalKey.getLinePosition(i, useSharps, s.key.c4Lp,
s.key.minLp);
StaffSymbolRenderer.drawWith(symbol, null,
sp(s.xMm + i * distance * interlineSpace, linePosition), 1, s.parentStaff, false,
canvas, args);
}
}
}