package ij.plugin.frame; import java.awt.*; import java.awt.event.*; import ij.*; import ij.plugin.*; import ij.gui.*; /** Displays a window that allows the user to set the font, size and style. */ public class Fonts extends PlugInFrame implements PlugIn, ItemListener { public static final String LOC_KEY = "fonts.loc"; private static String[] sizes = {"8","9","10","12","14","18","24","28","36","48","60","72","100","150","225","350"}; private static int[] isizes = {8,9,10,12,14,18,24,28,36,48,60,72,100,150,225,350}; private Panel panel; private Choice font; private Choice size; private Choice style; private Checkbox checkbox; private static Frame instance; public Fonts() { super("Fonts"); if (instance!=null) { WindowManager.toFront(instance); return; } WindowManager.addWindow(this); instance = this; setLayout(new FlowLayout(FlowLayout.CENTER, 10, 5)); font = new Choice(); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fonts = ge.getAvailableFontFamilyNames(); font.add("SansSerif"); font.add("Serif"); font.add("Monospaced"); for (int i=0; i<fonts.length; i++) { String f = fonts[i]; if (!(f.equals("SansSerif")||f.equals("Serif")||f.equals("Monospaced"))) font.add(f); } font.select(TextRoi.getFont()); font.addItemListener(this); add(font); size = new Choice(); for (int i=0; i<sizes.length; i++) size.add(sizes[i]); size.select(getSizeIndex()); size.addItemListener(this); add(size); style = new Choice(); style.add("Plain"); style.add("Bold"); style.add("Italic"); style.add("Bold+Italic"); style.add("Center"); style.add("Right"); style.add("Center+Bold"); style.add("Right+Bold"); int i = TextRoi.getStyle(); int justificaton = TextRoi.getGlobalJustification(); String s = "Plain"; if (i==Font.BOLD) { if (justificaton==TextRoi.CENTER) s = "Center+Bold"; else if (justificaton==TextRoi.RIGHT) s = "Right+Bold"; else s = "Bold"; } else if (i==Font.ITALIC) s = "Italic"; else if (i==(Font.BOLD+Font.ITALIC)) s = "Bold+Italic"; else if (i==Font.PLAIN) { if (justificaton==TextRoi.CENTER) s = "Center"; else if (justificaton==TextRoi.RIGHT) s = "Right"; } style.select(s); style.addItemListener(this); add(style); checkbox = new Checkbox("Smooth", TextRoi.isAntialiased()); add(checkbox); checkbox.addItemListener(this); pack(); Point loc = Prefs.getLocation(LOC_KEY); if (loc!=null) setLocation(loc); else GUI.center(this); show(); IJ.register(Fonts.class); } int getSizeIndex() { int size = TextRoi.getSize(); int index=0; for (int i=0; i<isizes.length; i++) { if (size>=isizes[i]) index = i; } return index; } public void itemStateChanged(ItemEvent e) { String fontName = font.getSelectedItem(); int fontSize = Integer.parseInt(size.getSelectedItem()); String styleName = style.getSelectedItem(); int fontStyle = Font.PLAIN; int justification = TextRoi.LEFT; if (styleName.endsWith("Bold")) fontStyle = Font.BOLD; else if (styleName.equals("Italic")) fontStyle = Font.ITALIC; else if (styleName.equals("Bold+Italic")) fontStyle = Font.BOLD+Font.ITALIC; if (styleName.startsWith("Center")) justification = TextRoi.CENTER; else if (styleName.startsWith("Right")) justification = TextRoi.RIGHT; TextRoi.setFont(fontName, fontSize, fontStyle, checkbox.getState()); TextRoi.setGlobalJustification(justification); IJ.showStatus(fontSize+" point "+fontName + " " + styleName); } public void close() { super.close(); instance = null; Prefs.saveLocation(LOC_KEY, getLocation()); } }