//----------------------------------------------------------------------------// // // // L e d g e r S y m b o l // // // //----------------------------------------------------------------------------// // <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.ui.symbol; import omr.glyph.Shape; import static omr.ui.symbol.Alignment.*; import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.Rectangle2D; /** * Class {@code LedgerSymbol} implements a decorated ledger symbol. * * @author Hervé Bitteur */ public class LedgerSymbol extends ShapeSymbol { //~ Static fields/initializers --------------------------------------------- // The head part private static final BasicSymbol head = Symbols.getSymbol( Shape.NOTEHEAD_BLACK); //~ Constructors ----------------------------------------------------------- //--------------// // LedgerSymbol // //--------------// /** * Create a LedgerSymbol (with decoration?) standard size * * @param decorated true for a decorated image */ public LedgerSymbol (boolean decorated) { this(false, decorated); } //--------------// // LedgerSymbol // //--------------// /** * Create a LedgerSymbol (with decoration?) * * @param isIcon true for an icon * @param decorated true for a decorated image */ protected LedgerSymbol (boolean isIcon, boolean decorated) { super(isIcon, Shape.LEDGER, decorated); } //~ Methods ---------------------------------------------------------------- //-------------// // getRefPoint // //-------------// /** * Report the symbol reference point at ledger ordinate. */ @Override public Point getRefPoint (Rectangle box) { return new Point( box.x + (box.width / 2), box.y + (int) Math.rint(box.height * 0.67)); } //------------// // createIcon // //------------// @Override protected ShapeSymbol createIcon () { return new LedgerSymbol(true, true); } //-----------// // getParams // //-----------// @Override protected Params getParams (MusicFont font) { Params p = new Params(); // Head layout p.layout = font.layout(head.getString()); // Use a ledger length twice as large as note head Rectangle2D hRect = p.layout.getBounds(); p.rect = new Rectangle( (int) Math.ceil(2 * hRect.getWidth()), (int) Math.ceil(hRect.getHeight())); return p; } //-------// // paint // //-------// @Override protected void paint (Graphics2D g, Params params, Point location, Alignment alignment) { Point loc = alignment.translatedPoint( AREA_CENTER, params.rect, location); if (decorated) { // Draw a note head (using composite) Composite oldComposite = g.getComposite(); g.setComposite(decoComposite); MusicFont.paint(g, params.layout, loc, AREA_CENTER); g.setComposite(oldComposite); } // Ledger g.drawLine( loc.x - (params.rect.width / 2), loc.y, loc.x + (params.rect.width / 2), loc.y); } }