package com.xenoage.zong.renderer.stamping; import com.xenoage.zong.musiclayout.stampings.TimeStamping; 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.SymbolPool; import com.xenoage.zong.symbols.common.CommonSymbol; import static com.xenoage.zong.core.music.format.SP.sp; /** * Renderer for a {@link TimeStamping}. * * @author Andreas Wenger */ public class TimeRenderer extends StampingRenderer { /** * Draws the given {@link TimeStamping} on the given {@link Canvas}, * using the given {@link RendererArgs}. */ @Override public void draw(Stamping stamping, Canvas canvas, RendererArgs args) { TimeStamping s = (TimeStamping) stamping; SymbolPool symbolPool = args.symbolPool; float interlineSpace = s.parentStaff.is; float linesCount = s.parentStaff.linesCount; //write numerator digits float offsetX = s.numeratorOffsetIs * interlineSpace; String num = Integer.toString(s.time.element.getType().getNumerator()); for (int i = 0; i < num.length(); i++) { int d = num.charAt(i) - '0'; Symbol symbol = symbolPool.getSymbol(CommonSymbol.getDigit(d)); if (symbol != null) { float symbolWidth = symbol.boundingRect.size.width; StaffSymbolRenderer.drawWith(symbol, null, sp(s.xMm + offsetX, linesCount + 1), 1, s.parentStaff, false, canvas, args); offsetX += (symbolWidth + s.digitGapIs) * interlineSpace; } } //write denominator digits offsetX = s.denominatorOffsetIs * interlineSpace; String den = Integer.toString(s.time.element.getType().getDenominator()); for (int i = 0; i < den.length(); i++) { int d = den.charAt(i) - '0'; Symbol symbol = symbolPool.getSymbol(CommonSymbol.getDigit(d)); if (symbol != null) { float symbolWidth = symbol.boundingRect.size.width; StaffSymbolRenderer.drawWith(symbol, null, sp(s.xMm + offsetX, linesCount - 3), 1, s.parentStaff, false, canvas, args); offsetX += (symbolWidth + s.digitGapIs) * interlineSpace; } } } }