/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2007 - 2008, Open Source Geospatial Foundation (OSGeo)
* (C) 2008 - 2009, Johann Sorel
*
* 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.gui.swing.render2d.control.navigation;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import javax.swing.JComponent;
import org.geotoolkit.gui.swing.render2d.JMap2D;
import org.geotoolkit.gui.swing.render2d.decoration.MapDecoration;
/**
* Zoom pan decoration
*
* @author Johann Sorel
* @module
*/
public class ZoomDecoration extends JComponent implements MapDecoration{
private final Color borderColor = Color.GRAY;
private final Color fillColor = new Color(0.7f,0.7f,0.7f,0.3f);
private Image buffer = null;
private JMap2D map = null;
private int startx = 0;
private int starty = 0;
private int width = 0;
private int height = 0;
private boolean draw = false;
private boolean fill = false;
private int lenght = 30;
private Rectangle lastRect = new Rectangle(0,0,0,0);
public ZoomDecoration(){
setOpaque(false);
setFocusable(false);
}
public void setFill(final boolean fill){
this.fill = fill;
}
public void setCoord(final int sx, final int sy, final int ex, final int ey, final boolean draw){
startx = sx;
starty = sy;
width = ex;
height = ey;
this.draw = draw;
lastRect.add(new Rectangle(startx-(2+lenght),starty-(2+lenght),width+(4+2*lenght),height+(4+2*lenght)));
repaint(lastRect);
}
@Override
public void paintComponent(final Graphics g) {
if(draw){
if(fill){
g.setColor(fillColor);
g.fillRect(startx, starty, width, height);
}
Graphics2D g2 = (Graphics2D) g;
if(buffer != null){
g2.drawImage(buffer, startx, starty, null);
}
g2.setColor(borderColor);
g2.setStroke(new BasicStroke(4,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
g2.drawLine(startx, starty, startx+lenght, starty);
g2.drawLine(startx, starty, startx, starty+lenght);
g2.drawLine(startx+width, starty, startx+width-lenght, starty);
g2.drawLine(startx+width, starty, startx+width, starty+lenght);
g2.drawLine(startx, starty+height, startx+lenght, starty+height);
g2.drawLine(startx, starty+height, startx, starty+height-lenght);
g2.drawLine(startx+width, starty+height, startx+width-lenght, starty+height);
g2.drawLine(startx+width, starty+height, startx+width, starty+height-lenght);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
g2.setStroke(new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
g2.drawRect(startx, starty, width, height);
lastRect.setBounds(startx-(2+lenght),starty-(2+lenght),width+(4+2*lenght),height+(4+2*lenght));
}
}
@Override
public void refresh() {
repaint();
}
@Override
public JComponent getComponent() {
return this;
}
@Override
public void setMap2D(final JMap2D map) {
this.map = map;
}
@Override
public JMap2D getMap2D() {
return map;
}
@Override
public void dispose() {
map = null;
setBuffer(null);
}
/**
* @return the buffer
*/
public Image getBuffer() {
return buffer;
}
/**
* @param buffer the buffer to set
*/
public void setBuffer(final Image buffer) {
this.buffer = buffer;
}
}