001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.mappaint;
003    
004    import org.openstreetmap.josm.data.osm.OsmPrimitive;
005    import org.openstreetmap.josm.data.osm.Way;
006    import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
007    import org.openstreetmap.josm.data.osm.visitor.paint.MapPainter;
008    import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
009    
010    /**
011     * similar to mapnik's LinePatternSymbolizer
012     */
013    public class LinePatternElemStyle extends ElemStyle {
014    
015        public MapImage pattern;
016    
017        public LinePatternElemStyle(Cascade c, MapImage pattern) {
018            super(c, 2.9f);
019            this.pattern = pattern;
020        }
021    
022        public static LinePatternElemStyle create(Environment env) {
023            Cascade c = env.mc.getCascade(env.layer);
024    
025            IconReference iconRef = c.get("pattern-image", null, IconReference.class);
026            if (iconRef == null)
027                return null;
028            MapImage pattern = new MapImage(iconRef.iconName, iconRef.source);
029            return new LinePatternElemStyle(c, pattern);
030        }
031    
032        @Override
033        public void paintPrimitive(OsmPrimitive primitive, MapPaintSettings paintSettings, MapPainter painter, boolean selected, boolean member) {
034            Way w = (Way)primitive;
035            painter.drawLinePattern(w, pattern.getImage());
036        }
037    
038        @Override
039        public boolean isProperLineStyle() {
040            return true;
041        }
042    
043        @Override
044        public boolean equals(Object obj) {
045            if (obj == null || getClass() != obj.getClass())
046                return false;
047            if (!super.equals(obj))
048                return false;
049            final LinePatternElemStyle other = (LinePatternElemStyle) obj;
050            return pattern.equals(other.pattern);
051        }
052    
053        @Override
054        public int hashCode() {
055            return pattern.hashCode();
056        }
057    
058        @Override
059        public String toString() {
060            return "LinePatternElemStyle{" + super.toString() + "pattern=[" + pattern + "]}";
061        }
062    }