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.StyledMapRenderer;
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, StyledMapRenderer 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 }