content: package edu.cmu.hcii.whyline.io;
  
  import java.awt.Color;
  import java.awt.Graphics2D;
  import java.awt.Image;
  import java.awt.Rectangle;
  import java.awt.Shape;
  
  import edu.cmu.hcii.whyline.trace.*;
  
  /**
   * @author Andrew J. Ko
   *
   */
  public final class DrawImageWithSizeAndColorWithinAreaEvent extends DrawImageEvent {
  
  	private static final String[] ARGUMENT_NAMES = { "graphics", "image", "destination x1", "destination y1", "destination x2", "destination y2", "source x1", "source y1", "source x2", "source y2", "color", "observer" }; 
  	public String getArgumentName(int index) { return ARGUMENT_NAMES[index]; }
  
  	public DrawImageWithSizeAndColorWithinAreaEvent(Trace trace, int eventID) {
  		
  		super(trace, eventID);
  
  	}
  
  	public void paintWithImage(Graphics2D g, Image image) {
  		
  		if(image == null) {
  			double destX = Math.min(getDX1(), getDX2());
  			double destY = Math.min(getDY1(), getDY2());
  			double destWidth = Math.abs(getDX1() - getDX2());
  			double destHeight = Math.abs(getDY1() - getDY2());
  			drawPlaceholder(g, "image " + getImageID(), (int)destX, (int)destY, (int)destWidth, (int)destHeight, getColor());
  		}
  		else
  			g.drawImage(image, getDX1(), getDY1(), getDX2(), getDY2(), getSX1(), getSY1(), getSX2(), getSY2(), getColor(), null);		
  		
  	}
  	
  	protected Shape makeShape() {
  		
  		return new Rectangle(getWindowX(), getWindowY(), Math.abs(getDX1() - getDX2()), Math.abs(getDY1() - getDY2()));
  		
  	}
  
  	public int getWindowX() { return paintState.getOriginX() + Math.min(getDX1(), getDX2()); }
  	public int getWindowY() { return paintState.getOriginY() + Math.min(getDY1(), getDY2()); }
  
  	public void transformContextToDrawPrimitive(Graphics2D g) {
  		
  		g.translate(getWindowX(), getWindowY());
  
  	}
  
  	public int getDX1() { return getInteger(2); }
  	public int getDY1() { return getInteger(3); }
  	public int getDX2() { return getInteger(4); }
  	public int getDY2() { return getInteger(5); }
  	public int getSX1() { return getInteger(6); }
  	public int getSY1() { return getInteger(7); }
  	public int getSX2() { return getInteger(8); }
  	public int getSY2() { return getInteger(9); }
  
  	public Color getColor() { 
  		try { return (Color)getArgument(10).getImmutable();
  		} catch(NoValueException e) { return null; }
  	}
  	
  	public long getObserver() { return getLong(11); }
  	
  	public String getHumanReadableName() { return "scaled image"; }
  
  	public String toString() { return super.toString() + "\tdrawImageWithSizeAndColorWithinArea " + getImage() + " " + getDX1() + " " + getDY1() + " " + getDX2() + " " + getDY2() + " " + getSX1() + " " + getSY1() + " " + getSX2() + " " + getSY2() + " " + getColor() + " " + getObserver(); }
  
  }
  