package wombat.scheme.libraries.gui;
import java.util.*;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import wombat.scheme.libraries.TurtleAPI;
import wombat.scheme.libraries.types.*;
/**
* An extension of the image frame specifically for turtles.
*/
public class TurtleFrame extends ImageFrame {
private static final long serialVersionUID = -7570576454913232510L;
/**
* Create a new turtle frame.
*/
public TurtleFrame() {
super(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB));
}
/**
* Update the turtle frame.
* @param turtles The
* @param lines
*/
public void update(Map<String, TurtleData> turtles, List<LineData> lines) {
setTitle("draw-turtle (live)");
final int SPACING = 10;
final int RADIUS = 3;
BufferedImage turtleImage = TurtleAPI.linesToImage(lines, SPACING);
Graphics2D g = (Graphics2D) turtleImage.getGraphics();
double[] minMax = TurtleAPI.linesToMinMax(lines);
double xOffset = -(minMax[0] - SPACING) - RADIUS;
double yOffset = -(minMax[2] - SPACING) - RADIUS;
for (TurtleData t : turtles.values()) {
if (t.Live) {
g.setColor(t.C);
if (t.Pen)
g.fillOval((int) (t.X + xOffset), (int) (t.Y + yOffset), RADIUS * 2, RADIUS * 2);
else
g.drawOval((int) (t.X + xOffset), (int) (t.Y + yOffset), RADIUS * 2, RADIUS * 2);
}
}
MyImage = turtleImage;
int scaleWidth = (int) (MyImage.getWidth(null) * Scale);
int scaleHeight = (int) (MyImage.getHeight(null) * Scale);
Dimension d = new Dimension(scaleWidth, scaleHeight);
ImageDisplay.setIcon(new ImageIcon(MyImage.getScaledInstance(scaleWidth, scaleHeight, Image.SCALE_SMOOTH)));
ImageDisplay.setSize(d);
ImageDisplay.setMinimumSize(d);
ImageDisplay.setPreferredSize(d);
ImageDisplay.setMaximumSize(d);
pack();
invalidate();
validate();
repaint();
}
}