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());
}
}