package com.xenoage.zong.renderer.frames; import com.xenoage.utils.math.geom.Rectangle2f; import com.xenoage.zong.layout.frames.Frame; import com.xenoage.zong.layout.frames.ScoreFrame; import com.xenoage.zong.musiclayout.ScoreFrameLayout; import com.xenoage.zong.musiclayout.stampings.Stamping; import com.xenoage.zong.renderer.RendererArgs; import com.xenoage.zong.renderer.canvas.Canvas; import com.xenoage.zong.renderer.canvas.CanvasDecoration; import com.xenoage.zong.renderer.stamping.StampingRenderer; /** * Renderer for a {@link ScoreFrame}. * * @author Andreas Wenger */ public class ScoreFrameRenderer extends FrameRenderer { @Override protected void paintTransformed(Frame frame, Canvas canvas, RendererArgs args) { Rectangle2f rect = getLocalRect(frame); //draw musical elements ScoreFrame scoreFrame = (ScoreFrame) frame; ScoreFrameLayout scoreLayout = scoreFrame.getScoreFrameLayout(); if (scoreLayout != null) { //the coordinates of the layout elements are relative to the upper left //corner, so we have to translate them canvas.transformSave(); canvas.transformTranslate(rect.x1(), rect.y1()); //get musical stampings, and in interactive mode, also //stampings like for playback and selection Iterable<Stamping> stampings = (canvas.getDecoration() == CanvasDecoration.Interactive ? scoreLayout .getAllStampings() : scoreLayout.getMusicalStampings()); //render them for (Stamping s : stampings) { StampingRenderer.drawAny(s, canvas, args); } //restore old transformation canvas.transformRestore(); } } }