content: package aimax.osm.gui.swing.viewer;
  
  import java.awt.BasicStroke;
  import java.awt.Color;
  import java.awt.Graphics2D;
  import java.awt.Image;
  import java.awt.RenderingHints;
  
  import aimax.osm.viewer.UColor;
  import aimax.osm.viewer.UnifiedImageBuilder;
  
  /**
   * Specialized image builder for AWT images.
   * 
   * @author Ruediger Lunde
   */
  public class AWTImageBuilder implements UnifiedImageBuilder<Image> {
  
  	private Image result;
  	private Graphics2D g2;
  	boolean areaFillMode;
  
  	@Override
  	public void initialize(Image image) {
  		result = image;
  		g2 = (Graphics2D) image.getGraphics();
  		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
  				RenderingHints.VALUE_ANTIALIAS_ON);
  	}
  
  	/** Returns the width of the image under construction. */
  	@Override
  	public int getWidth() {
  		return result.getWidth(null);
  	}
  
  	/** Returns the height of the image under construction. */
  	@Override
  	public int getHeight() {
  		return result.getHeight(null);
  	}
  
  	@Override
  	public void drawLine(int x1, int y1, int x2, int y2) {
  		g2.drawLine(x1, y1, x2, y2);
  	}
  
  	@Override
  	public void drawRect(int x, int y, int width, int height) {
  		if (areaFillMode)
  			g2.fillRect(x, y, width, height);
  		else
  			g2.drawRect(x, y, width, height);
  
  	}
  
  	@Override
  	public void drawOval(int x, int y, int width, int height) {
  		if (areaFillMode)
  			g2.fillOval(x, y, width, height);
  		else
  			g2.drawOval(x, y, width, height);
  
  	}
  
  	@Override
  	public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) {
  		g2.drawPolyline(xPoints, yPoints, nPoints);
  
  	}
  
  	@Override
  	public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) {
  		if (areaFillMode)
  			g2.fillPolygon(xPoints, yPoints, nPoints);
  		else
  			g2.drawPolygon(xPoints, yPoints, nPoints);
  
  	}
  
  	@Override
  	public void drawString(String text, int x, int y) {
  		g2.drawString(text, x, y);
  
  	}
  
  	@Override
  	public Image getResult() {
  		return result;
  	}
  
  	@Override
  	public void setColor(UColor color) {
  		g2.setColor(new Color(color.getRed(), color.getGreen(),
  				color.getBlue(), color.getAlpha()));
  
  	}
  
  	@Override
  	public void setLineStyle(boolean dashed, float width) {
  		float[] dash = null;
  		if (dashed) {
  			dash = new float[] { width * 2f };
  		}
  		g2.setStroke(new BasicStroke(width, BasicStroke.CAP_ROUND,
  				BasicStroke.JOIN_ROUND, 10.0f, dash, 0.0f));
  	}
  
  	@Override
  	public void setAreaFilled(boolean value) {
  		areaFillMode = value;
  
  	}
  
  	@Override
  	public void setFontSize(float size) {
  		g2.setFont(g2.getFont().deriveFont(size));
  	}
  
  	@Override
  	public float getFontSize() {
  		return g2.getFont().getSize();
  	}
  
  }
  