if (s.isProperLineStyle()) {
hasIndependentLineStyle = true;
}
}
}
p.a = new StyleList(tmp);
isOuterWayOfSomeMP = true;
}
if (!hasIndependentLineStyle) {
Pair<StyleList, Range> mpElemStyles;
synchronized(r) {
mpElemStyles = getStyleCacheWithRange(r, scale, nc);
}
ElemStyle mpLine = null;
for (ElemStyle s : mpElemStyles.a) {
if (s.isProperLineStyle()) {
mpLine = s;
break;
}
}
p.b = Range.cut(p.b, mpElemStyles.b);
if (mpLine != null) {
p.a = new StyleList(p.a, mpLine);
break;
} else if (wayColor == null && isDefaultLines()) {
AreaElemStyle mpArea = Utils.find(mpElemStyles.a, AreaElemStyle.class);
if (mpArea != null) {
wayColor = mpArea.color;
}
}
}
}
}
if (isOuterWayOfSomeMP) {
if (isDefaultLines()) {
boolean hasLineStyle = false;
for (ElemStyle s : p.a) {
if (s.isProperLineStyle()) {
hasLineStyle = true;
break;
}
}
if (!hasLineStyle) {
p.a = new StyleList(p.a, LineElemStyle.createSimpleLineStyle(wayColor, true));
}
}
return p;
}
if (!isDefaultLines()) return p;
for (OsmPrimitive referrer : osm.getReferrers()) {
Relation ref = (Relation) referrer;
if (!drawMultipolygon || !ref.isMultipolygon() || !ref.isUsable()) {
continue;
}
final Multipolygon multipolygon = MultipolygonCache.getInstance().get(nc, ref);
if (multipolygon.getInnerWays().contains(osm)) {
Iterator<Way> it = multipolygon.getOuterWays().iterator();
p = generateStyles(osm, scale, it.hasNext() ? it.next() : null, false);
boolean hasIndependentElemStyle = false;
for (ElemStyle s : p.a) {
if (s.isProperLineStyle() || s instanceof AreaElemStyle) {
hasIndependentElemStyle = true;
break;
}
}
if (!hasIndependentElemStyle && !multipolygon.getOuterWays().isEmpty()) {
Color mpColor = null;
StyleList mpElemStyles = null;
synchronized (ref) {
mpElemStyles = get(ref, scale, nc);
}
for (ElemStyle mpS : mpElemStyles) {
if (mpS instanceof AreaElemStyle) {
mpColor = ((AreaElemStyle) mpS).color;
break;
}
}
p.a = new StyleList(p.a, LineElemStyle.createSimpleLineStyle(mpColor, true));
}
return p;
}
}
return p;
}
else if (osm instanceof Relation)
{
Pair<StyleList, Range> p = generateStyles(osm, scale, null, true);
if (drawMultipolygon && ((Relation)osm).isMultipolygon()) {
if (!Utils.exists(p.a, AreaElemStyle.class)) {
// look at outer ways to find area style
Multipolygon multipolygon = MultipolygonCache.getInstance().get(nc, (Relation) osm);
for (Way w : multipolygon.getOuterWays()) {
Pair<StyleList, Range> wayStyles = generateStyles(w, scale, null, false);
p.b = Range.cut(p.b, wayStyles.b);
ElemStyle area = Utils.find(wayStyles.a, AreaElemStyle.class);
if (area != null) {
p.a = new StyleList(p.a, area);
break;
}
}
}
}