Ticket #4876: style-v3.patch

File style-v3.patch, 12.1 KB (added by petschge, 16 years ago)

Add color, filling and size logic as per the discussion in this tiket. Tested and works well for me. Please commit upstream.

  • src/org/openstreetmap/josm/gui/mappaint/SimpleNodeElemStyle.java

     
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.mappaint;
    33
     4import java.awt.Color;
    45import org.openstreetmap.josm.data.osm.Node;
    56import org.openstreetmap.josm.data.osm.OsmPrimitive;
    67import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
     
    1516        maxScale = 1500;
    1617    }
    1718
     19    private static final int max(int a, int b) {
     20        return (a >= b) ? a : b;
     21    }
     22
     23    private static final int max(int a, int b, int c) {
     24        return max(max(a,b), c);
     25    }
     26
     27    private static final int max(int a, int b, int c, int d) {
     28        return max(max(a,b), max(c,d));
     29    }
     30
    1831    @Override
    1932    public void paintPrimitive(OsmPrimitive primitive, MapPaintSettings settings, MapPainter painter,
    2033            boolean selected) {
    2134        Node n = (Node)primitive;
    2235        String name = painter.isShowNames()?painter.getNodeName(n):null;
     36
     37
    2338        if (n.isHighlighted()) {
    2439            painter.drawNode(n, settings.getHighlightColor(), settings.getSelectedNodeSize(), settings.isFillSelectedNode(), name);
    25         } else if (selected) {
    26             painter.drawNode(n, settings.getSelectedColor(), settings.getSelectedNodeSize(), settings.isFillSelectedNode(), name);
    2740        } else {
    28             painter.drawNode(
    29                 n,
    30                 (painter.isInactive() || n.isDisabled()) ? settings.getInactiveColor() : settings.getNodeColor(),
    31                 n.isJunctionNode() ? settings.getJunctionNodeSize() : settings.getUnselectedNodeSize(),
    32                 n.isTagged() ? settings.isFillTaggedNode() : settings.isFillUnselectedNode(),
    33                 name);
     41
     42            Color color;
     43            int size;
     44            boolean fill;
     45
     46            if (painter.isInactive() || n.isDisabled()) {
     47                color = settings.getInactiveColor();
     48            } else if (selected) {
     49                color = settings.getSelectedColor();
     50            } else if (n.isJunctionNode()) {
     51                if (n.isTagged()) {
     52                    color = settings.getTaggedJunctionColor();
     53                } else {
     54                    color = settings.getJunctionColor();
     55                }
     56            } else {
     57                if (n.isTagged()) {
     58                    color = settings.getTaggedColor();
     59                } else {
     60                    color = settings.getNodeColor();
     61                }
     62            }
     63
     64            size = max((selected ? settings.getSelectedNodeSize() : 0),
     65                       (n.isTagged() ? settings.getTaggedNodeSize() : 0),
     66                       (n.isJunctionNode() ? settings.getJunctionNodeSize() : 0),
     67                       settings.getUnselectedNodeSize());
     68
     69            fill = (selected && settings.isFillSelectedNode()) ||
     70                   (n.isTagged() && settings.isFillTaggedNode()) ||
     71                   (n.isJunctionNode() && settings.isFillJunctionNode()) ||
     72                    settings.isFillUnselectedNode();
     73
     74            painter.drawNode(n, color, size, fill, name);
    3475        }
    3576    }
    3677
  • src/org/openstreetmap/josm/data/osm/visitor/paint/SimplePaintVisitor.java

     
    6161    protected Color backgroundColor;
    6262    protected Color highlightColor;
    6363    protected Color taggedColor;
     64    protected Color junctionColor;
     65    protected Color taggedJunctionColor;
    6466    protected boolean showDirectionArrow;
    6567    protected boolean showRelevantDirectionsOnly;
    6668    protected boolean showHeadArrowOnly;
     
    6870    protected boolean fillSelectedNode;
    6971    protected boolean fillUnselectedNode;
    7072    protected boolean fillTaggedNode;
     73    protected boolean fillJunctionNode;
    7174    protected int selectedNodeSize;
    7275    protected int selectedNodeRadius;
    7376    protected int unselectedNodeSize;
    7477    protected int unselectedNodeRadius;
    7578    protected int junctionNodeSize;
    7679    protected int junctionNodeRadius;
     80    protected int taggedNodeSize;
     81    protected int taggedNodeRadius;
    7782    protected int defaultSegmentWidth;
    7883    protected int virtualNodeSize;
    7984    protected int virtualNodeSpace;
     
    97102        backgroundColor = PaintColors.BACKGROUND.get();
    98103        highlightColor = PaintColors.HIGHLIGHT.get();
    99104        taggedColor = PaintColors.TAGGED.get();
     105        junctionColor = PaintColors.JUNCTION.get();
     106
     107        if (taggedColor != nodeColor) {
     108            taggedJunctionColor = taggedColor;
     109        } else {
     110            taggedJunctionColor = junctionColor;
     111        }
    100112    }
    101113
    102114    protected void getSettings(boolean virtual) {
     
    111123        unselectedNodeRadius = unselectedNodeSize / 2;
    112124        junctionNodeSize = settings.getJunctionNodeSize();
    113125        junctionNodeRadius = junctionNodeSize / 2;
     126        taggedNodeSize = settings.getTaggedNodeSize();
     127        taggedNodeRadius = taggedNodeSize / 2;
    114128        defaultSegmentWidth = settings.getDefaultSegmentWidth();
    115129        fillSelectedNode = settings.isFillSelectedNode();
    116130        fillUnselectedNode = settings.isFillUnselectedNode();
     131        fillJunctionNode = settings.isFillJunctionNode();
    117132        fillTaggedNode = settings.isFillTaggedNode();
    118133        virtualNodeSize = virtual ? Main.pref.getInteger("mappaint.node.virtual-size", 8) / 2 : 0;
    119134        virtualNodeSpace = Main.pref.getInteger("mappaint.node.virtual-space", 70);
     
    223238        //}
    224239    }
    225240
     241    private static final int max(int a, int b) {
     242        return (a >= b) ? a : b;
     243    }
     244    private static final int max(int a, int b, int c) {
     245        return max(max(a, b), c);
     246    }
     247    private static final int max(int a, int b, int c, int d) {
     248        return max(max(a, b), max(c, d));
     249    }
     250
    226251    /**
    227252     * Draw a small rectangle.
    228253     * White if selected (as always) or red otherwise.
     
    234259
    235260        if (n.isHighlighted()) {
    236261            drawNode(n, highlightColor, selectedNodeSize, unselectedNodeRadius, fillSelectedNode);
    237         } else if (ds.isSelected(n)) {
    238             drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
    239262        } else {
    240             boolean junction = n.isJunctionNode();
    241             drawNode(
    242                 n,
    243                 (inactive || n.isDisabled()) ? inactiveColor :
    244                     (n.isTagged() ? taggedColor : nodeColor),
    245                 junction ? junctionNodeSize : unselectedNodeSize,
    246                 junction ? junctionNodeRadius : unselectedNodeRadius,
    247                 n.isTagged() ? fillTaggedNode : fillUnselectedNode);
     263            Color color;
     264            int size;
     265            int radius;
     266            boolean fill;
     267
     268            if (inactive || n.isDisabled()) {
     269                color = inactiveColor;
     270            } else if (ds.isSelected(n)) {
     271                color = selectedColor;
     272            } else if (n.isJunctionNode()) {
     273                if (n.isTagged()) {
     274                    color = taggedJunctionColor;
     275                } else {
     276                    color = junctionColor;
     277                }
     278            } else {
     279                if (n.isTagged()) {
     280                    color = taggedColor;
     281                } else {
     282                    color = nodeColor;
     283                }
     284            }
     285
     286            size = max((ds.isSelected(n) ? selectedNodeSize : 0),
     287                       (n.isTagged() ? taggedNodeSize : 0),
     288                       (n.isJunctionNode() ? junctionNodeSize : 0),
     289                       unselectedNodeSize);
     290
     291            radius = max((ds.isSelected(n) ? selectedNodeRadius : 0),
     292                         (n.isTagged() ? taggedNodeRadius : 0),
     293                         (n.isJunctionNode() ? junctionNodeRadius : 0),
     294                         unselectedNodeRadius);
     295
     296            fill = (ds.isSelected(n) && fillSelectedNode) ||
     297                   (n.isTagged() && fillTaggedNode) ||
     298                   (n.isJunctionNode() && fillJunctionNode) ||
     299                    fillUnselectedNode;
     300
     301            drawNode(n, color, size, radius, fill);
    248302        }
    249303    }
    250304
  • src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java

     
    2323    private int selectedNodeSize;
    2424    private int junctionNodeSize;
    2525    private int unselectedNodeSize;
     26    private int taggedNodeSize;
    2627    private boolean fillSelectedNode;
    2728    private boolean fillUnselectedNode;
    2829    private boolean fillTaggedNode;
     30    private boolean fillJunctionNode;
    2931    private Color selectedColor;
    3032    private Color highlightColor;
    3133    private Color inactiveColor;
    3234    private Color nodeColor;
    3335    private Color taggedColor;
     36    private Color junctionColor;
     37    private Color taggedJunctionColor;
    3438
    3539    private MapPaintSettings() {
    3640        load();
     
    4852        inactiveColor = PaintColors.INACTIVE.get();
    4953        nodeColor = PaintColors.NODE.get();
    5054        taggedColor = PaintColors.TAGGED.get();
     55        junctionColor = PaintColors.JUNCTION.get();
     56        if (taggedColor != nodeColor) {
     57            taggedJunctionColor = taggedColor;
     58        } else {
     59            taggedJunctionColor = junctionColor;
     60        }
    5161
     62
    5263        showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false);
    5364        showHeadArrowOnly = Main.pref.getBoolean("draw.segment.head_only", false);
    5465
     
    5970        selectedNodeSize = Main.pref.getInteger("mappaint.node.selected-size", 5);
    6071        unselectedNodeSize = Main.pref.getInteger("mappaint.node.unselected-size", 3);
    6172        junctionNodeSize = Main.pref.getInteger("mappaint.node.junction-size", 5);
     73        taggedNodeSize = Main.pref.getInteger("mappaint.node.tagged-size", 5);
    6274        fillSelectedNode = Main.pref.getBoolean("mappaint.node.fill-selected", true);
    6375        fillUnselectedNode = Main.pref.getBoolean("mappaint.node.fill-unselected", false);
    6476        fillTaggedNode = Main.pref.getBoolean("mappaint.node.fill-tagged", true);
     77        fillJunctionNode = Main.pref.getBoolean("mappaint.node.fill-junction", false);
    6578    }
    6679
    6780    public void preferenceChanged(PreferenceChangeEvent e) {
     
    104117        return taggedColor;
    105118    }
    106119
     120    public Color getJunctionColor() {
     121        return junctionColor;
     122    }
     123
     124    public Color getTaggedJunctionColor() {
     125        return taggedJunctionColor;
     126    }
     127
    107128    public boolean isShowOrderNumber() {
    108129        return showOrderNumber;
    109130    }
     
    140161        return unselectedNodeSize;
    141162    }
    142163
     164    public int getTaggedNodeSize() {
     165        return taggedNodeSize;
     166    }
     167
    143168    public boolean isFillSelectedNode() {
    144169        return fillSelectedNode;
    145170    }
     
    148173        return fillUnselectedNode;
    149174    }
    150175
     176    public boolean isFillJunctionNode() {
     177        return fillJunctionNode;
     178    }
     179
    151180    public boolean isFillTaggedNode() {
    152181        return fillTaggedNode;
    153182    }
  • src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java

     
    1313    INACTIVE(marktr("inactive"), Color.darkGray),
    1414    SELECTED(marktr("selected"), Color.red),
    1515    NODE(marktr("node"), Color.yellow),
     16    JUNCTION(marktr("junction"), Color.yellow),
    1617    TAGGED(marktr("tagged"), new Color(204, 255, 255)), // turquoise
    1718    DEFAULT_WAY(marktr("way"),  new Color(0,0,128)), // dark blue
    1819    RELATION(marktr("relation"), new Color(0,128,128)), // teal