//----------------------------------------------------------------------------//
// //
// P i c t u r e V i e w //
// //
//----------------------------------------------------------------------------//
// <editor-fold defaultstate="collapsed" desc="hdr"> //
// Copyright © Hervé Bitteur and others 2000-2013. All rights reserved. //
// This software is released under the GNU General Public License. //
// Goto http://kenai.com/projects/audiveris to report bugs or suggestions. //
//----------------------------------------------------------------------------//
// </editor-fold>
package omr.sheet.picture;
import omr.score.ui.PagePhysicalPainter;
import omr.score.ui.PaintingParameters;
import omr.sheet.Sheet;
import omr.ui.Colors;
import omr.ui.view.RubberPanel;
import omr.ui.view.ScrollView;
import omr.util.WeakPropertyChangeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
/**
* Class {@code PictureView} defines the view dedicated to the display of
* the picture image of a music sheet.
*
* @author Hervé Bitteur
*/
public class PictureView
extends ScrollView
implements PropertyChangeListener
{
//~ Static fields/initializers ---------------------------------------------
/** Usual logger utility */
private static final Logger logger = LoggerFactory.getLogger(
PictureView.class);
//~ Instance fields --------------------------------------------------------
/** Link with sheet */
private final Sheet sheet;
//~ Constructors -----------------------------------------------------------
//-------------//
// PictureView //
//-------------//
/**
* Create a new {@code PictureView} instance, dedicated to a sheet.
*
* @param sheet the related sheet
*/
public PictureView (Sheet sheet)
{
this.sheet = sheet;
view = new MyView();
view.setName("Picture-View");
view.setPreferredSize(sheet.getDimension());
// Inject dependency of pixel location
view.setLocationService(sheet.getLocationService());
// Listen to all painting parameters
PaintingParameters.getInstance()
.addPropertyChangeListener(
new WeakPropertyChangeListener(this));
// Insert view
setView(view);
}
//~ Methods ----------------------------------------------------------------
//----------------//
// propertyChange //
//----------------//
@Override
public void propertyChange (PropertyChangeEvent evt)
{
view.repaint();
}
//~ Inner Classes ----------------------------------------------------------
//--------//
// MyView //
//--------//
private class MyView
extends RubberPanel
{
//~ Methods ------------------------------------------------------------
//--------//
// render //
//--------//
@Override
public void render (Graphics2D g)
{
PaintingParameters painting = PaintingParameters.getInstance();
// Render the picture image
if (painting.isInputPainting()) {
sheet.getPicture()
.render(g);
} else {
// Use a white background
Color oldColor = g.getColor();
g.setColor(Color.WHITE);
Rectangle rect = g.getClipBounds();
g.fill(rect);
g.setColor(oldColor);
}
// Render the recognized score entities?
if (painting.isOutputPainting()) {
if (sheet.getTargetBuilder() != null) {
sheet.getTargetBuilder()
.renderSystems(g); // TODO: Temporary
}
boolean mixed = painting.isInputPainting();
sheet.getPage()
.accept(
new PagePhysicalPainter(
g,
mixed ? Colors.MUSIC_PICTURE : Colors.MUSIC_ALONE,
mixed ? false : painting.isVoicePainting(),
true,
false));
} else {
if (sheet.getTargetBuilder() != null) {
sheet.getTargetBuilder()
.renderWarpGrid(g, true);
}
}
}
}
}