//----------------------------------------------------------------------------// // // // B r a c k e t 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.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.font.TextLayout; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; /** * Class {@code BracketSymbol} displays a BRACKET symbol: [ * * @author Hervé Bitteur */ public class BracketSymbol extends ShapeSymbol { //~ Static fields/initializers --------------------------------------------- // The upper serif private static final BasicSymbol upperSymbol = Symbols.SYMBOL_BRACKET_UPPER_SERIF; // The lower serif private static final BasicSymbol lowerSymbol = Symbols.SYMBOL_BRACKET_LOWER_SERIF; //~ Constructors ----------------------------------------------------------- //---------------// // BracketSymbol // //---------------// /** * Create a BracketSymbol (which is made of upper and lower parts) * * @param isIcon true for an icon */ public BracketSymbol (boolean isIcon) { super(isIcon, Shape.BRACE, false); } //~ Methods ---------------------------------------------------------------- //------------// // createIcon // //------------// @Override protected ShapeSymbol createIcon () { return new BracketSymbol(true); } //-----------// // getParams // //-----------// @Override protected Params getParams (MusicFont font) { MyParams p = new MyParams(); AffineTransform at = isIcon ? tiny : null; p.upperLayout = font.layout(upperSymbol.getString(), at); p.layout = font.layout(Shape.THICK_BARLINE, at); p.lowerLayout = font.layout(lowerSymbol.getString(), at); Rectangle2D upperRect = p.upperLayout.getBounds(); Rectangle2D trunkRect = p.layout.getBounds(); Rectangle2D lowerRect = p.lowerLayout.getBounds(); p.rect = new Rectangle( (int) Math.ceil(upperRect.getWidth()), (int) Math.floor( upperRect.getHeight() + trunkRect.getHeight() + lowerRect.getHeight())); return p; } //-------// // paint // //-------// @Override protected void paint (Graphics2D g, Params params, Point location, Alignment alignment) { MyParams p = (MyParams) params; Point loc = alignment.translatedPoint(MIDDLE_LEFT, p.rect, location); MusicFont.paint(g, p.layout, loc, MIDDLE_LEFT); loc.y -= (p.rect.height / 2); MusicFont.paint(g, p.upperLayout, loc, TOP_LEFT); loc.y += (2 * (p.rect.height / 2)); MusicFont.paint(g, p.lowerLayout, loc, BOTTOM_LEFT); } //~ Inner Classes ---------------------------------------------------------- //--------// // Params // //--------// protected class MyParams extends Params { //~ Instance fields ---------------------------------------------------- TextLayout upperLayout; TextLayout lowerLayout; } }