package com.xenoage.zong.renderer.stamping; import com.xenoage.utils.color.Color; import com.xenoage.utils.math.geom.Point2f; 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.color.Color.color; /** * Renderer for a staff stamping. * * @author Andreas Wenger */ public class StaffRenderer extends StampingRenderer { /** * Draws the given {@link StaffStamping} on the given {@link Canvas}, * using the given {@link RendererArgs}. */ @Override public void draw(Stamping stamping, Canvas canvas, RendererArgs args) { StaffStamping staff = (StaffStamping) stamping; float scaling = args.targetScaling; Point2f position = staff.positionMm; //TODO: custom line width float lineWidthMm = staff.getLineWidthMm(); float length = staff.lengthMm; Color color = Color.black; if (canvas.getFormat() == CanvasFormat.Raster) { //render on screen BitmapLine screenLine = staff.getBitmapInfo().getBitmapLine(scaling, lineWidthMm, color); BitmapStaff ss = staff.getBitmapInfo().getBitmapStaff(scaling); position = new Point2f(position.x, position.y + ss.yOffsetMm); if (ss.isSimplifiedStaff) { //simplified staff (fill rectangle) color = screenLine.color; color = color(color.r, color.g, color.b, (int) (0.7f * color.a)); //don't forget the line heights, they belong into the rectangle position = position.add(0, -1 * ss.lineHeightMm / 2); canvas.drawSimplifiedStaff(position, length, ss.heightMm + ss.lineHeightMm, color); } else { //normal staff (draw lines) canvas.drawStaff(position, length, staff.linesCount, screenLine.color, screenLine.widthMm, ss.interlineSpaceMm); } } else //if (canvas.getFormat() == CanvasFormat.Vector) { //render with high quality canvas.drawStaff(position, length, staff.linesCount, color, lineWidthMm, staff.is); } } }