package com.xenoage.zong.renderer.stamping; import com.xenoage.utils.math.Units; import com.xenoage.utils.math.geom.Point2f; import com.xenoage.zong.musiclayout.stampings.StaffCursorStamping; import com.xenoage.zong.musiclayout.stampings.StaffStamping; 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 static com.xenoage.utils.color.Color.color; /** * Renderer for a cursor stamping * that belongs to one staff. * * @author Andreas Wenger */ public class StaffCursorRenderer extends StampingRenderer { /** * Draws the given {@link StaffCursorStamping} on the given {@link Canvas}, * using the given {@link RendererArgs}. */ @Override public void draw(Stamping stamping, Canvas canvas, RendererArgs args) { StaffCursorStamping cursor = (StaffCursorStamping) stamping; float viewScaling = args.targetScaling; StaffStamping parentStaff = cursor.parentStaff; float x, y1, y2; if (canvas.getFormat() == CanvasFormat.Raster) { float staffY = parentStaff.positionMm.y; BitmapStaff ss = parentStaff.getBitmapInfo().getBitmapStaff(viewScaling); //top: one interline space above staff y1 = staffY + ss.getYMm(parentStaff.linesCount * 2); //bottom: one interline space under staff y2 = staffY + ss.getYMm(-2); } else { y1 = parentStaff.computeYMm(parentStaff.linesCount * 2); y2 = parentStaff.computeYMm(-2); } x = parentStaff.positionMm.x + cursor.xMm + cursor.offsetIs * parentStaff.is; canvas.drawLine(new Point2f(x, y1), new Point2f(x, y2), color(30, 200, 30), getCursorWidth(viewScaling)); } public float getCursorWidth(float viewScaling) { //cursor width: at least 2 px return Units.pxToMm(Math.max(2, Units.mmToPx(0.5f, viewScaling)), viewScaling); } }