/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2009, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.display2d.ext.image;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import static javax.swing.SwingConstants.*;
import org.geotoolkit.display2d.canvas.J2DCanvas;
import org.geotoolkit.display2d.canvas.RenderingContext2D;
import org.geotoolkit.display2d.ext.PositionedGraphic2D;
import org.opengis.geometry.Envelope;
/**
* Graphic decoration to paint an Image.
*
* @author Johann Sorel (Geomatys)
* @module
*/
public class GraphicImageJ2D extends PositionedGraphic2D{
private final ImageTemplate template;
public GraphicImageJ2D(final J2DCanvas canvas, final ImageTemplate template){
super(canvas);
this.template = template;
}
@Override
public Object getUserObject() {
return template;
}
@Override
public Envelope getEnvelope() {
return null;
}
@Override
protected void paint(final RenderingContext2D context, final int position, final int[] offset) {
final Graphics2D g = context.getGraphics();
context.switchToDisplayCRS();
Rectangle bounds = context.getCanvasDisplayBounds();
Dimension estimate = J2DImageUtilities.estimate(g, template, true);
final int imgHeight = estimate.height;
final int imgWidth = estimate.width;
int x = 0;
int y = 0;
switch(position){
case NORTH :
x = (bounds.width - imgWidth) / 2 + offset[0];
y = offset[1];
break;
case NORTH_EAST :
x = (bounds.width - imgWidth) - offset[0];
y = offset[1];
break;
case NORTH_WEST :
x = offset[0];
y = offset[1];
break;
case SOUTH :
x = (bounds.width - imgWidth) / 2 + offset[0];
y = (bounds.height - imgHeight) - offset[1];
break;
case SOUTH_EAST :
x = (bounds.width - imgWidth) - offset[0];
y = (bounds.height - imgHeight) - offset[1];
break;
case SOUTH_WEST :
x = offset[0];
y = (bounds.height - imgHeight) - offset[1];
break;
case CENTER :
x = (bounds.width - imgWidth) / 2 + offset[0];
y = (bounds.height - imgHeight) / 2 + offset[1];
break;
case EAST :
x = (bounds.width - imgWidth) - offset[0];
y = (bounds.height - imgHeight) / 2 + offset[1];
break;
case WEST :
x = offset[0];
y = (bounds.height - imgHeight) / 2 + offset[1];
break;
}
J2DImageUtilities.paint(g, template, x, y);
}
}