// Copyright 2001, FreeHEP.
package org.freehep.graphicsio.font.truetype.test;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import javax.swing.JPanel;
import org.freehep.graphicsio.font.truetype.TTFGlyfTable;
/**
* @author Simon Fischer
* @version $Id: GlyphPanel.java 8584 2006-08-10 23:06:37Z duns $
*/
public class GlyphPanel extends JPanel {
private TTFGlyfTable.Glyph glyph;
private Rectangle maxCharBounds;
private final static AffineTransform transform = new AffineTransform();
static {
transform.scale(0.2, -0.2);
transform.translate(1500, -2250);
}
public GlyphPanel(TTFGlyfTable.Glyph glyph, Rectangle maxCharBounds) {
this.glyph = glyph;
this.maxCharBounds = maxCharBounds;
this.setBackground(Color.white);
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setBackground(Color.white);
g2d.clearRect(0, 0, 1000, 700);
g2d.setTransform(transform);
g2d.setColor(new Color(200, 200, 255));
g2d.fill(maxCharBounds);
Rectangle bbox = glyph.getShape().getBounds();
g2d.setColor(Color.lightGray);
g2d.fill(bbox);
g2d.setColor(Color.black);
g2d.drawLine(-10000, glyph.yMin, 10000, glyph.yMin);
g2d.drawLine(glyph.xMin, -10000, glyph.xMin, 10000);
g2d.drawLine(-10000, glyph.yMax, 10000, glyph.yMax);
g2d.drawLine(glyph.xMax, -10000, glyph.xMax, 10000);
g2d.setFont(new Font("Helvetica", Font.PLAIN, 60));
drawString(g2d, "yMin=" + glyph.yMin, glyph.xMin - 325, glyph.yMin);
drawString(g2d, "yMax=" + glyph.yMax, glyph.xMin - 325, glyph.yMax);
drawString(g2d, "xMin=" + glyph.xMin, glyph.xMin + 20, glyph.yMin - 75);
drawString(g2d, "xMax=" + glyph.xMax, glyph.xMax + 20, glyph.yMin - 75);
g2d.fillOval(-10, -10, 21, 21);
g2d.fill(glyph.getShape());
g2d.setStroke(new BasicStroke(5));
g2d.setColor(Color.red);
g2d.draw(glyph.getShape());
}
private void drawString(Graphics2D g2d, String str, int x, int y) {
AffineTransform tx = g2d.getTransform();
g2d.translate(0, y);
g2d.scale(1, -1);
g2d.drawString(str, x, 0);
g2d.setTransform(tx);
}
public Dimension getPreferredSize() {
return new Dimension(1000, 700);
}
}