package com.xenoage.zong.renderer.stamping; import com.xenoage.utils.color.Color; import com.xenoage.utils.math.geom.Point2f; import com.xenoage.zong.core.music.format.SP; import com.xenoage.zong.musiclayout.stampings.StaffStamping; import com.xenoage.zong.musiclayout.stampings.StaffSymbolStamping; import com.xenoage.zong.musiclayout.stampings.Stamping; import com.xenoage.zong.musiclayout.stampings.bitmap.BitmapStaff; import com.xenoage.zong.renderer.RendererArgs; import com.xenoage.zong.renderer.canvas.Canvas; import com.xenoage.zong.renderer.canvas.CanvasFormat; import com.xenoage.zong.renderer.symbol.SymbolsRenderer; import com.xenoage.zong.symbols.Symbol; /** * Renderer for symbol stampings * that belong to a staff. * * @author Andreas Wenger */ public class StaffSymbolRenderer extends StampingRenderer { /** * Draws the given {@link StaffSymbolStamping} on the given {@link Canvas}, * using the given {@link RendererArgs}. */ @Override public void draw(Stamping stamping, Canvas canvas, RendererArgs args) { StaffSymbolStamping s = (StaffSymbolStamping) stamping; drawWith(s.symbol, s.color, s.position, s.scaling, s.parentStaff, s.mirrorV, canvas, args); } /** * Paints the given symbol using the given information and rendering parameters. */ public static void drawWith(Symbol symbol, Color color, SP position, float scaling, StaffStamping parentStaff, boolean mirrorV, Canvas canvas, RendererArgs args) { float viewScaling = args.targetScaling; float symbolScaling = scaling * parentStaff.is; float yPosition; if (canvas.getFormat() == CanvasFormat.Raster) { BitmapStaff ss = parentStaff.getBitmapInfo().getBitmapStaff(viewScaling); yPosition = parentStaff.positionMm.y + ss.getYMm(position.lp); symbolScaling *= ss.heightScaling; /* //TEST int x = Units.mmToPx(positionX, viewScaling); int yOffset = ss.getYOffsetPx(); int yTopLine = Units.mmToPx( endStaff.getPosition().y + endStaff.getLineWidth() / 2, viewScaling) + yOffset; for (int i = 0; i < 2; i++) params.renderTarget.drawLine( new Point2i(x + i, yTopLine), new Point2i(x + i, yTopLine + ss.getHeightPx()), Color.red, 1); */ } else { yPosition = parentStaff.computeYMm(position.lp); } Point2f correctedPosition = new Point2f(position.xMm, yPosition); SymbolsRenderer.draw(symbol, canvas, (color != null ? color : Color.black), correctedPosition, new Point2f(symbolScaling, (mirrorV ? -1 : 1) * symbolScaling)); } }