001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.gui.jmapviewer;
003    
004    import java.awt.BasicStroke;
005    import java.awt.Color;
006    import java.awt.Graphics;
007    import java.awt.Graphics2D;
008    import java.awt.Point;
009    import java.awt.Polygon;
010    import java.awt.Stroke;
011    import java.util.List;
012    
013    import org.openstreetmap.gui.jmapviewer.interfaces.MapPolygon;
014    
015    /**
016     * @author Vincent
017     *
018     */
019    public class MapPolygonImpl implements MapPolygon {
020    
021        private List<Coordinate> points;
022        private Color color;
023        private Stroke stroke;
024    
025        public MapPolygonImpl(List<Coordinate> points) {
026            this(points, Color.BLUE, new BasicStroke(2));
027        }
028    
029        public MapPolygonImpl(List<Coordinate> points, Color color, Stroke stroke) {
030            this.points = points;
031            this.color = color;
032            this.stroke = stroke;
033        }
034    
035        /* (non-Javadoc)
036         * @see org.openstreetmap.gui.jmapviewer.interfaces.MapPolygon#getPoints()
037         */
038        @Override
039        public List<Coordinate> getPoints() {
040            return this.points;
041        }
042    
043        /* (non-Javadoc)
044         * @see org.openstreetmap.gui.jmapviewer.interfaces.MapPolygon#paint(java.awt.Graphics, java.util.List)
045         */
046        @Override
047        public void paint(Graphics g, List<Point> points) {
048            Polygon polygon = new Polygon();
049            for (Point p : points) {
050                polygon.addPoint(p.x, p.y);
051            }
052            paint(g, polygon);
053        }
054    
055        /* (non-Javadoc)
056         * @see org.openstreetmap.gui.jmapviewer.interfaces.MapPolygon#paint(java.awt.Graphics, java.awt.Polygon)
057         */
058        @Override
059        public void paint(Graphics g, Polygon polygon) {
060            // Prepare graphics
061            Color oldColor = g.getColor();
062            g.setColor(color);
063            Stroke oldStroke = null;
064            if (g instanceof Graphics2D) {
065                Graphics2D g2 = (Graphics2D) g;
066                oldStroke = g2.getStroke();
067                g2.setStroke(stroke);
068            }
069            // Draw
070            g.drawPolygon(polygon);
071            // Restore graphics
072            g.setColor(oldColor);
073            if (g instanceof Graphics2D) {
074                ((Graphics2D) g).setStroke(oldStroke);
075            }
076        }
077    
078        /* (non-Javadoc)
079         * @see java.lang.Object#toString()
080         */
081        @Override
082        public String toString() {
083            return "MapPolygon [points=" + points + "]";
084        }
085    }