/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Flemming N. Larsen * - Initial implementation *******************************************************************************/ package net.sf.robocode.ui.gfx; import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.geom.Area; /** * An image that can be rendered. * * @author Flemming N. Larsen (original) */ public class RenderImage extends RenderObject { /** * Image */ protected final Image image; /** * Area containing the bounds of the image to paint */ protected final Area boundArea; /** * Constructs a new {@code RenderImage}, which has it's origin in the center * of the image. * * @param image the image to be rendered */ public RenderImage(Image image) { this(image, ((double) image.getWidth(null) / 2), ((double) image.getHeight(null) / 2)); } /** * Constructs a new {@code RenderImage} * * @param image the image to be rendered * @param originX the x coordinate of the origin for the rendered image * @param originY the y coordinate of the origin for the rendered image */ public RenderImage(Image image, double originX, double originY) { super(); this.image = image; baseTransform = AffineTransform.getTranslateInstance(-originX, -originY); boundArea = new Area(new Rectangle(0, 0, image.getWidth(null), image.getHeight(null))); } /** * Constructs a new {@code RenderImage} that is a copy of another * {@code RenderImage}. * * @param ri the {@code RenderImage} to copy */ public RenderImage(RenderImage ri) { super(ri); image = ri.image; boundArea = new Area(ri.boundArea); } @Override public void paint(Graphics2D g) { g.drawImage(image, transform, null); } @Override public Rectangle getBounds() { return boundArea.createTransformedArea(transform).getBounds(); } @Override public RenderObject copy() { return new RenderImage(this); } }