package com.xenoage.zong.renderer.stamping; import com.xenoage.utils.color.Color; import com.xenoage.zong.musiclayout.stampings.LegerLineStamping; import com.xenoage.zong.musiclayout.stampings.StaffStamping; import com.xenoage.zong.musiclayout.stampings.Stamping; import com.xenoage.zong.musiclayout.stampings.bitmap.BitmapLine; 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 static com.xenoage.utils.math.geom.Point2f.p; /** * Renderer for a leger line stamping. * * Leger lines belong to a staff. They have * a horizontal position around which they * are centered. They are 2 spaces long. * * @author Andreas Wenger */ public class LegerLineRenderer extends StampingRenderer { /** * Draws the given {@link LegerLineStamping} on the given {@link Canvas}, * using the given {@link RendererArgs}. */ @Override public void draw(Stamping stamping, Canvas canvas, RendererArgs args) { LegerLineStamping legerLine = (LegerLineStamping) stamping; StaffStamping parentStaff = legerLine.parentStaff; float linePosition = legerLine.sp.lp; float scaling = args.targetScaling; float width = legerLine.widthIs * parentStaff.is; float p1xMm = legerLine.sp.xMm - width / 2; float p2xMm = p1xMm + width; float lineWidthMm = parentStaff.getLineWidthMm(); Color color = Color.black; float yMm = 0; if (canvas.getFormat() == CanvasFormat.Raster) { //render on screen or print BitmapLine screenLine = new BitmapLine(lineWidthMm, color, scaling); BitmapStaff screenStaff = parentStaff.getBitmapInfo().getBitmapStaff(scaling); yMm = parentStaff.positionMm.y + screenStaff.getYMm(linePosition); lineWidthMm = screenLine.widthMm; } else if (canvas.getFormat() == CanvasFormat.Vector) { //render with high quality yMm = parentStaff.computeYMm(linePosition); } canvas.drawLine(p(p1xMm, yMm), p(p2xMm, yMm), color, lineWidthMm); } }