//----------------------------------------------------------------------------// // // // B a c k T o B a c k 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.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.Rectangle2D; /** * Class {@code BackToBackSymbol} displays a BACK_TO_BACK_REPEAT_SIGN. * * @author Hervé Bitteur */ public class BackToBackSymbol extends ShapeSymbol { //~ Static fields/initializers --------------------------------------------- // Total width, computed from width of RIGHT_REPEAT_SIGN symbol private static final double WIDTH_RATIO = 1.6; // Abscissa of thin barline, computed from width of RIGHT_REPEAT_SIGN symbol private static final double DX_RATIO = 1.15; //~ Instance fields -------------------------------------------------------- // The RIGHT_REPEAT_SIGN symbol private final ShapeSymbol rightSymbol = Symbols.getSymbol( RIGHT_REPEAT_SIGN); // The THIN_BARLINE symbol private final ShapeSymbol thinSymbol = Symbols.getSymbol(THIN_BARLINE); // The REPEAT_DOT_PAIR symbol private final ShapeSymbol dotsSymbol = Symbols.getSymbol(REPEAT_DOT_PAIR); //~ Constructors ----------------------------------------------------------- //------------------// // BackToBackSymbol // //------------------// /** * Create a BackToBackSymbol * * @param isIcon true for an icon */ public BackToBackSymbol (boolean isIcon) { super(isIcon, Shape.DOUBLE_BARLINE, false); } //~ Methods ---------------------------------------------------------------- //------------// // createIcon // //------------// @Override protected ShapeSymbol createIcon () { return new BackToBackSymbol(true); } //-----------// // getParams // //-----------// @Override protected MyParams getParams (MusicFont font) { MyParams p = new MyParams(); p.layout = font.layout(rightSymbol); p.thinLayout = font.layout(thinSymbol); p.dotsLayout = font.layout(dotsSymbol); Rectangle2D rightRect = p.layout.getBounds(); p.dx = (int) Math.ceil(rightRect.getWidth() * DX_RATIO); p.rect = new Rectangle( (int) Math.ceil(rightRect.getWidth() * WIDTH_RATIO), (int) Math.ceil(rightRect.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.x += p.dx; MusicFont.paint(g, p.thinLayout, loc, AREA_CENTER); loc.x = location.x + p.rect.width; MusicFont.paint(g, p.dotsLayout, loc, MIDDLE_RIGHT); } //~ Inner Classes ---------------------------------------------------------- //----------// // MyParams // //----------// protected class MyParams extends Params { //~ Instance fields ---------------------------------------------------- TextLayout thinLayout; TextLayout dotsLayout; int dx; } }