Changeset 3322 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2010-06-09T09:41:00+02:00 (14 years ago)
Author:
stoecker
Message:

fix #5078 - regressions in drawing code - please test if everything works as expected

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintVisitor.java

    r3316 r3322  
    120120
    121121        if (isZoomOk(nodeStyle)) {
    122             nodeStyle.paintPrimitive(n, paintSettings, painter, n.isSelected(),
     122            nodeStyle.paintPrimitive(n, paintSettings, painter, data.isSelected(n),
    123123            false);
    124124        }
     
    164164        if(!isZoomOk(wayStyle))
    165165            return;
    166 
    167         if (wayStyle == null) {
    168             wayStyle = LineElemStyle.UNTAGGED_WAY;
    169         }
    170166
    171167        if(wayStyle instanceof LineElemStyle) {
     
    182178    }
    183179
    184     public void drawSelectedMember(OsmPrimitive osm, ElemStyle style, boolean area,
    185             boolean areaselected)
    186     {
    187         if(osm instanceof Way)
    188         {
    189             if(style instanceof AreaElemStyle) {
    190                 Way way = (Way)osm;
    191                 AreaElemStyle areaStyle = (AreaElemStyle)style;
    192                 areaStyle.getLineStyle().paintPrimitive(way, paintSettings, painter, true, true);
    193                 if(area) {
    194                     painter.drawArea(getPolygon(way), (areaselected ? paintSettings.getRelationSelectedColor() : areaStyle.color), painter.getAreaName(way));
    195                 }
    196             } else {
    197                 style.paintPrimitive(osm, paintSettings, painter, true, true);
    198             }
    199         }
    200         else if(osm instanceof Node)
    201         {
    202             if(isZoomOk(style)) {
    203                 style.paintPrimitive(osm, paintSettings, painter, true, true);
    204             }
    205         }
    206         osm.mappaintDrawnCode = paintid;
    207     }
    208 
    209180    public void paintUnselectedRelation(Relation r) {
    210 
    211181        if (drawMultipolygon && "multipolygon".equals(r.get("type")))
    212         {
    213             if(drawMultipolygon(r))
    214                 return;
    215         }
     182            drawMultipolygon(r);
    216183        else if (drawRestriction && "restriction".equals(r.get("type")))
    217         {
    218184            drawRestriction(r);
    219         }
    220 
    221         if(data.isSelected(r)) /* draw ways*/
    222         {
    223             for (RelationMember m : r.getMembers())
    224             {
    225                 if (m.isWay() && m.getMember().isDrawable())
    226                 {
    227                     drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember(), false)
    228                             : null, true, true);
    229                 }
    230             }
    231         }
    232185    }
    233186
     
    454407            if(!visible)
    455408                return drawn;
    456             for (Way wInner : multipolygon.getInnerWays())
    457             {
     409            for (Way wInner : multipolygon.getInnerWays()) {
    458410                ElemStyle innerStyle = getPrimitiveStyle(wInner, true);
    459                 if(innerStyle == null)
    460                 {
    461                     if (data.isSelected(wInner)) {
     411                if(innerStyle == null) {
     412                    if (data.isSelected(wInner))
    462413                        continue;
    463                     }
    464414                    if(zoomok && (wInner.mappaintDrawnCode != paintid || multipolygon.getOuterWays().isEmpty())) {
    465                         ((AreaElemStyle)wayStyle).getLineStyle().paintPrimitive(wInner, paintSettings, painter, (data.isSelected(wInner)
    466                                 || data.isSelected(r)), r.isSelected());
     415                        ((AreaElemStyle)wayStyle).getLineStyle().paintPrimitive(wInner, paintSettings,
     416                        painter, (data.isSelected(wInner) || data.isSelected(r)), false);
    467417                    }
    468418                    wInner.mappaintDrawnCode = paintid;
     
    470420                else
    471421                {
    472                     if(data.isSelected(r))
    473                     {
    474                         drawSelectedMember(wInner, innerStyle,
    475                                 !wayStyle.equals(innerStyle), data.isSelected(wInner));
    476                     }
    477422                    if(wayStyle.equals(innerStyle))
    478423                    {
    479                         if(!data.isSelected(r)) {
    480                             wInner.mappaintDrawnAreaCode = paintid;
     424                        wInner.mappaintDrawnAreaCode = paintid;
     425                        if(!data.isSelected(wInner))
     426                        {
     427                            wInner.mappaintDrawnCode = paintid;
     428                            drawWay(wInner, 0);
    481429                        }
    482430                    }
    483431                }
    484432            }
    485             for (Way wOuter : multipolygon.getOuterWays())
    486             {
     433            for (Way wOuter : multipolygon.getOuterWays()) {
    487434                ElemStyle outerStyle = getPrimitiveStyle(wOuter, true);
    488                 if(outerStyle == null)
    489                 {
     435                if(outerStyle == null) {
    490436                    // Selected ways are drawn at the very end
    491                     if (data.isSelected(wOuter)) {
     437                    if (data.isSelected(wOuter))
    492438                        continue;
    493                     }
    494                     if(zoomok)
    495                     {
    496                         ((AreaElemStyle)wayStyle).getLineStyle().paintPrimitive(wOuter, paintSettings, painter, (data.isSelected(wOuter) || data.isSelected(r)), r.isSelected());
     439                    if(zoomok) {
     440                        ((AreaElemStyle)wayStyle).getLineStyle().paintPrimitive(wOuter, paintSettings, painter,
     441                        (data.isSelected(wOuter) || data.isSelected(r)), r.isSelected());
    497442                    }
    498443                    wOuter.mappaintDrawnCode = paintid;
    499                 }
    500                 else
    501                 {
    502                     if(data.isSelected(r))
    503                     {
    504                         drawSelectedMember(wOuter, outerStyle, false, false);
    505                     }
    506                     else if(outerStyle instanceof AreaElemStyle) {
    507                         wOuter.mappaintDrawnAreaCode = paintid;
     444                } else if(outerStyle instanceof AreaElemStyle) {
     445                    wOuter.mappaintDrawnAreaCode = paintid;
     446                    if(!data.isSelected(wOuter)) {
     447                        wOuter.mappaintDrawnCode = paintid;
     448                        drawWay(wOuter, 0);
    508449                    }
    509450                }
     
    611552        if (fillAreas > dist && styles != null && styles.hasAreas()) {
    612553            Collection<Way> noAreaWays = new LinkedList<Way>();
     554            final Collection<Way> ways = data.searchWays(bbox);
     555
     556            /*** disabled ***/
     557            for (final Way osm : ways) {
     558                if (osm.isDisabled() && osm.isDrawable() && osm.mappaintDrawnCode != paintid) {
     559                    drawWay(osm, 0);
     560                    osm.mappaintDrawnCode = paintid;
     561                }
     562            }
    613563
    614564            /*** RELATIONS ***/
     
    620570
    621571            /*** AREAS ***/
    622             for (final Way osm : selectedLast(data, data.searchWays(bbox))) {
     572            for (final Way osm : selectedLast(data, ways)) {
    623573                if (osm.isDrawable() && osm.mappaintDrawnCode != paintid) {
    624                     if (isPrimitiveArea(osm) && osm.mappaintDrawnAreaCode != paintid) {
    625                         drawWay(osm, fillAreas);
    626                     } else {
     574                    if (isPrimitiveArea(osm)) {
     575                        if(osm.mappaintDrawnAreaCode != paintid)
     576                            drawWay(osm, fillAreas);
     577                    } else if(!data.isSelected(osm)) {
    627578                        noAreaWays.add(osm);
    628579                    }
     
    633584            for (final Way osm : noAreaWays) {
    634585                drawWay(osm, 0);
     586                osm.mappaintDrawnCode = paintid;
    635587            }
    636588        } else {
    637589            drawMultipolygon = false;
     590            final Collection<Way> ways = data.searchWays(bbox);
     591
     592            /*** WAYS (disabled)  ***/
     593            for (final Way way: ways) {
     594                if (way.isDisabled() && way.isDrawable() && !data.isSelected(way)) {
     595                    drawWay(way, 0);
     596                    way.mappaintDrawnCode = paintid;
     597                }
     598            }
    638599
    639600            /*** RELATIONS ***/
     
    645606
    646607            /*** WAYS (filling disabled)  ***/
    647             for (final Way way: data.searchWays(bbox)) {
     608            for (final Way way: ways) {
    648609                if (way.isDrawable() && !data.isSelected(way)) {
    649610                    drawWay(way, 0);
     
    654615        /*** SELECTED  ***/
    655616        for (final OsmPrimitive osm : data.getSelected()) {
    656             if (osm.isUsable() && !(osm instanceof Node) && osm.mappaintDrawnCode != paintid) {
     617            if (osm.isUsable() && !(osm instanceof Node) && (osm instanceof Relation || osm.mappaintDrawnCode != paintid)) {
    657618                osm.visit(new AbstractVisitor() {
    658619                    public void visit(Way w) {
     
    665626
    666627                    public void visit(Relation r) {
    667                         /* TODO: is it possible to do this like the nodes/ways code? */
    668                         // Only nodes are painted, ways was already painted before (this might cause that
    669                         // way in selected relation is hidden by another way)
    670628                        for (RelationMember m : r.getMembers()) {
    671                             if (m.isNode() && m.getMember().isDrawable()) {
    672                                 drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember(), false) : null, true, true);
     629                            OsmPrimitive osm = m.getMember();
     630                            if(osm.isDrawable()) {
     631                                ElemStyle style = getPrimitiveStyle(m.getMember(), false);
     632                                if(osm instanceof Way)
     633                                {
     634                                    if(style instanceof AreaElemStyle) {
     635                                        ((AreaElemStyle)style).getLineStyle().paintPrimitive(osm, paintSettings, painter, true, true);
     636                                    } else {
     637                                        style.paintPrimitive(osm, paintSettings, painter, true, true);
     638                                    }
     639                                }
     640                                else if(osm instanceof Node)
     641                                {
     642                                    if(isZoomOk(style)) {
     643                                        style.paintPrimitive(osm, paintSettings, painter, true, true);
     644                                    }
     645                                }
     646                                osm.mappaintDrawnCode = paintid;
    673647                            }
    674648                        }
     
    680654        /*** NODES ***/
    681655        for (final Node osm: data.searchNodes(bbox)) {
    682             if (!osm.isIncomplete() && !osm.isDeleted() && (data.isSelected(osm) || !osm.isFiltered())
     656            if (!osm.isIncomplete() && !osm.isDeleted() && (data.isSelected(osm) || !osm.isDisabledAndHidden())
    683657                    && osm.mappaintDrawnCode != paintid) {
    684658                drawNode(osm);
Note: See TracChangeset for help on using the changeset viewer.