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 }