/* * 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.selection; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.awt.geom.GeneralPath; import java.util.List; import javax.swing.JComponent; import org.geotoolkit.gui.swing.render2d.JMap2D; import org.geotoolkit.gui.swing.render2d.decoration.MapDecoration; /** * Selection decoration * * @author Johann Sorel * @module */ public class DefaultSelectionDecoration extends JComponent implements MapDecoration{ private static final Color MAIN_COLOR = Color.GREEN; private static final Color SHADOW_COLOR = new Color(0f, 0f, 0f, 0.5f); private static final int SHADOW_STEP = 2; List<Point> points = null; public DefaultSelectionDecoration(){} public void setPoints(final List<Point> points){ this.points = points; repaint(); } @Override public void paintComponent(final Graphics g) { if(points != null && points.size() > 1){ Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD); path.moveTo(points.get(0).x, points.get(0).y); for(int i=1;i<points.size();i++){ Point p = points.get(i); path.lineTo(p.x, p.y); } g2.setStroke(new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); //draw a shadow g2.translate(SHADOW_STEP, SHADOW_STEP); g2.setColor(SHADOW_COLOR); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f)); g2.fill(path); //draw the lines g2.translate(-SHADOW_STEP, -SHADOW_STEP); g2.setColor(MAIN_COLOR); g2.fill(path); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); g2.draw(path); //draw start cross paintCross(g2, points.get(0)); //draw end cross paintCross(g2, points.get(points.size()-1)); } } private void paintCross(final Graphics2D g2, final Point p){ g2.setStroke(new BasicStroke(3,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER)); //draw a shadow p.x +=SHADOW_STEP; p.y +=SHADOW_STEP; g2.setColor(SHADOW_COLOR); g2.drawLine((int)p.x, (int)p.y-6, (int)p.x, (int)p.y+6); g2.drawLine((int)p.x-6, (int)p.y, (int)p.x+6, (int)p.y); ///draw the start cross p.x -=SHADOW_STEP; p.y -=SHADOW_STEP; g2.setColor(MAIN_COLOR); g2.drawLine((int)p.x, (int)p.y-6, (int)p.x, (int)p.y+6); g2.drawLine((int)p.x-6, (int)p.y, (int)p.x+6, (int)p.y); } @Override public void refresh() { repaint(); } @Override public JComponent getComponent() { return this; } @Override public void setMap2D(final JMap2D map) { } @Override public JMap2D getMap2D() { return null; } @Override public void dispose() { } }