package jadex.application.space.envsupport.observer.graphics.java2d;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import jadex.application.space.envsupport.math.IVector2;
import jadex.application.space.envsupport.observer.graphics.ModulateComposite;
import jadex.application.space.envsupport.observer.graphics.drawable.DrawableCombiner;
import jadex.application.space.envsupport.observer.graphics.drawable.Primitive;
import jadex.application.space.envsupport.observer.graphics.drawable.TexturedRectangle;
public class TexturedRectangleJ2DRenderer extends AbstractJ2DRenderer
{
/**
* Draws the primitive.
* @param dc the DrawableCombiner drawing the object
* @param primitive the primitive being drawn
* @param obj the object being drawn
* @param vp the viewport
*/
public void draw(DrawableCombiner dc, Primitive primitive, Object obj, ViewportJ2D vp)
{
BufferedImage image;
try
{
image = (BufferedImage) primitive.getRenderInfo(0);
}
catch (Exception e)
{
image = vp.getImage(((TexturedRectangle) primitive).getTexturePath());
primitive.setRenderInfo(0, image);
}
Graphics2D g = vp.getContext();
IVector2 size = (IVector2)dc.getBoundValue(obj, primitive.getSize(), vp);
g.translate(-size.getXAsDouble() / 2.0, -size.getYAsDouble() / 2.0);
if (!setupMatrix(dc, primitive, obj, g, vp))
return;
final Color currentColor = (Color) dc.getBoundValue(obj, primitive.getColor(), vp);
if (!Color.WHITE.equals(currentColor))
{
ModulateComposite modComposite = new ModulateComposite()
{
protected Color getColor()
{
return currentColor;
}
};
Composite c = g.getComposite();
g.setComposite(modComposite);
g.drawImage(image, vp.getImageTransform(image.getWidth(), image
.getHeight()), null);
g.setComposite(c);
}
else
{
g.drawImage(image, vp.getImageTransform(image.getWidth(), image
.getHeight()), null);
}
}
}