

---

 core-dave/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java |   39 ++++------
 1 file changed, 17 insertions(+), 22 deletions(-)

diff -puN src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java~more-multipolygon-work src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
--- core/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java~more-multipolygon-work	2009-10-30 09:52:35.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	2009-10-30 10:44:53.000000000 -0700
@@ -491,7 +491,7 @@ public class MapPaintVisitor extends Sim
             }
             PolyData pd = new PolyData(w);
             pd.selected = selected;
-            res.add(new PolyData(w));
+            res.add(pd);
         } /* while(left != 0) */
 
         return res;
@@ -952,13 +952,10 @@ public class MapPaintVisitor extends Sim
                         m.getMember().getDisplayName(DefaultNameFormatter.getInstance())), true);
             } else if(m.getMember().incomplete) {
                 incomplete = true;
-            } else
-            {
-                if(m.isWay())
-                {
+            } else {
+                if(m.isWay()) {
                     Way w = m.getWay();
-                    if(w.getNodesCount() < 2)
-                    {
+                    if(w.getNodesCount() < 2) {
                         r.putError(tr("Way ''{0}'' with less than two points.",
                                 w.getDisplayName(DefaultNameFormatter.getInstance())), true);
                     }
@@ -966,8 +963,7 @@ public class MapPaintVisitor extends Sim
                         inner.add(w);
                     } else if("outer".equals(m.getRole())) {
                         outer.add(w);
-                    } else
-                    {
+                    } else {
                         r.putError(tr("No useful role ''{0}'' for Way ''{1}''.",
                                 m.getRole(), w.getDisplayName(DefaultNameFormatter.getInstance())), true);
                         if(!m.hasRole()) {
@@ -1030,30 +1026,29 @@ public class MapPaintVisitor extends Sim
             }
             else if(zoomok)
             {
-                LinkedList<PolyData> poly = new LinkedList<PolyData>();
+                LinkedList<PolyData> outerPoly = new LinkedList<PolyData>();
                 for (Way w : outerclosed) {
-                    poly.add(new PolyData(w));
+                    outerPoly.add(new PolyData(w));
                 }
-                poly.addAll(joinWays(outerjoin, incomplete ? null : r));
+                outerPoly.addAll(joinWays(outerjoin, incomplete ? null : r));
                 for (Way wInner : innerclosed)
                 {
                     PolyData pdInner = new PolyData(wInner);
                     // incomplete is probably redundant
-                    addInnerToOuters(r, incomplete, pdInner, poly);
+                    addInnerToOuters(r, incomplete, pdInner, outerPoly);
                 }
                 for (PolyData pdInner : joinWays(innerjoin, incomplete ? null : r)) {
-                    addInnerToOuters(r, incomplete, pdInner, poly);
+                    addInnerToOuters(r, incomplete, pdInner, outerPoly);
                 }
                 AreaElemStyle areaStyle = (AreaElemStyle)wayStyle;
-                for (PolyData pd : poly)
-                {
+                for (PolyData pd : outerPoly) {
                     Polygon p = pd.get();
-                    if(isPolygonVisible(p))
-                    {
-                        boolean selected = (data.isSelected(pd.way) || data.isSelected(r));
-                        drawAreaPolygon(p, selected ? selectedColor : areaStyle.color);
-                        visible = true;
-                    }
+                    if(!isPolygonVisible(p))
+                        continue;
+
+                    boolean selected = pd.selected || data.isSelected(pd.way) || data.isSelected(r);
+                    drawAreaPolygon(p, selected ? selectedColor : areaStyle.color);
+                    visible = true;
                 }
             }
             if(!visible) /* nothing visible, so disable relation and all its ways */
_
