Changeset 9223 in josm


Ignore:
Timestamp:
2015-12-30T21:26:57+01:00 (3 years ago)
Author:
Don-vip
Message:

fix #12259 - adjust colors contrast in relation editor and history dialog

Location:
trunk/src/org/openstreetmap/josm
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableCellRenderer.java

    r8510 r9223  
    1111
    1212import org.openstreetmap.josm.data.osm.OsmPrimitive;
     13import org.openstreetmap.josm.gui.util.GuiHelper;
    1314
    1415/**
     
    4344    }
    4445
    45     protected void renderBackground(MemberTableModel model, OsmPrimitive primitive, boolean isSelected) {
     46    protected void renderBackgroundForeground(MemberTableModel model, OsmPrimitive primitive, boolean isSelected) {
    4647        Color bgc = UIManager.getColor("Table.background");
    4748        if (isSelected) {
     
    5253            bgc = BGCOLOR_DOUBLE_ENTRY;
    5354        }
    54         setBackground(bgc);
    55     }
    56 
    57     protected void renderForeground(boolean isSelected) {
    58         Color fgc;
    59         if (isSelected) {
    60             fgc = UIManager.getColor("Table.selectionForeground");
    61         } else {
    62             fgc = UIManager.getColor("Table.foreground");
    63         }
    64         setForeground(fgc);
     55        GuiHelper.setBackgroundReadable(this, bgc);
    6556    }
    6657
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java

    r8870 r9223  
    3333
    3434        this.value = (WayConnectionType) value;
    35         renderForeground(isSelected);
    3635        setToolTipText(((WayConnectionType) value).getToolTip());
    37         renderBackground(getModel(table), null, isSelected);
     36        renderBackgroundForeground(getModel(table), null, isSelected);
    3837        return this;
    3938    }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableMemberCellRenderer.java

    r8907 r9223  
    4040        Rectangle cellSize = table.getCellRect(row, column, false);
    4141
    42         renderForeground(isSelected);
    4342        OsmPrimitive primitive = (OsmPrimitive) value;
    44         renderBackground(getModel(table), primitive, isSelected);
     43        renderBackgroundForeground(getModel(table), primitive, isSelected);
    4544        renderPrimitive(primitive, cellSize);
    4645        return this;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableRoleCellRenderer.java

    r4072 r9223  
    1515            return this;
    1616
    17         renderForeground(isSelected);
    1817        String role = (String) value;
    19         renderBackground(getModel(table), null, isSelected);
     18        renderBackgroundForeground(getModel(table), null, isSelected);
    2019        setText(role);
    2120        return this;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java

    r8903 r9223  
    1313import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1414import org.openstreetmap.josm.gui.DefaultNameFormatter;
     15import org.openstreetmap.josm.gui.util.GuiHelper;
    1516import org.openstreetmap.josm.tools.ImageProvider;
    1617
     
    5657            bgc = BGCOLOR_DOUBLE_ENTRY;
    5758        }
    58         setBackground(bgc);
     59        GuiHelper.setBackgroundReadable(this, bgc);
    5960    }
    6061
  • trunk/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java

    r9078 r9223  
    1919import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
    2020import org.openstreetmap.josm.gui.NavigatableComponent;
     21import org.openstreetmap.josm.gui.util.GuiHelper;
    2122import org.openstreetmap.josm.tools.CheckParameterUtil;
    2223
     
    209210            gc.weightx = 1.0;
    210211            add(lblLat = new JLabel(), gc);
    211             lblLat.setBackground(Color.WHITE);
     212            GuiHelper.setBackgroundReadable(lblLat, Color.WHITE);
    212213            lblLat.setOpaque(true);
    213214            lblLat.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
     
    227228            gc.weightx = 1.0;
    228229            add(lblLon = new JLabel(), gc);
    229             lblLon.setBackground(Color.WHITE);
     230            GuiHelper.setBackgroundReadable(lblLon, Color.WHITE);
    230231            lblLon.setOpaque(true);
    231232            lblLon.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
     
    275276            if (coord == oppositeCoord ||
    276277                    (coord != null && oppositeCoord != null && coord.lat() == oppositeCoord.lat())) {
    277                 lblLat.setBackground(Color.WHITE);
     278                GuiHelper.setBackgroundReadable(lblLat, Color.WHITE);
    278279            } else {
    279                 lblLat.setBackground(BGCOLOR_DIFFERENCE);
     280                GuiHelper.setBackgroundReadable(lblLat, BGCOLOR_DIFFERENCE);
    280281            }
    281282            if (coord == oppositeCoord ||
    282283                    (coord != null && oppositeCoord != null && coord.lon() == oppositeCoord.lon())) {
    283                 lblLon.setBackground(Color.WHITE);
     284                GuiHelper.setBackgroundReadable(lblLon, Color.WHITE);
    284285            } else {
    285                 lblLon.setBackground(BGCOLOR_DIFFERENCE);
     286                GuiHelper.setBackgroundReadable(lblLon, BGCOLOR_DIFFERENCE);
    286287            }
    287288        }
     
    322323            gc.weightx = 1.0;
    323324            add(lblDistance = new JLabel(), gc);
    324             lblDistance.setBackground(Color.WHITE);
     325            GuiHelper.setBackgroundReadable(lblDistance, Color.WHITE);
    325326            lblDistance.setOpaque(true);
    326327            lblDistance.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
     
    335336            if (coord != null && oppositeCoord != null) {
    336337                double distance = coord.greatCircleDistance(oppositeCoord);
    337                 if (distance > 0) {
    338                     lblDistance.setBackground(BGCOLOR_DIFFERENCE);
    339                 } else {
    340                     lblDistance.setBackground(Color.WHITE);
    341                 }
     338                GuiHelper.setBackgroundReadable(lblDistance, distance > 0 ? BGCOLOR_DIFFERENCE : Color.WHITE);
    342339                lblDistance.setText(NavigatableComponent.getDistText(distance));
    343340            } else {
    344                 lblDistance.setBackground(coord != oppositeCoord ? BGCOLOR_DIFFERENCE : Color.WHITE);
     341                GuiHelper.setBackgroundReadable(lblDistance, coord != oppositeCoord ? BGCOLOR_DIFFERENCE : Color.WHITE);
    345342                lblDistance.setText(tr("(none)"));
    346343            }
  • trunk/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java

    r9078 r9223  
    1313
    1414import org.openstreetmap.josm.gui.history.TwoColumnDiff.Item.DiffItemType;
     15import org.openstreetmap.josm.gui.util.GuiHelper;
    1516import org.openstreetmap.josm.tools.ImageProvider;
    1617
     
    4647        }
    4748        setText(text);
    48         setBackground(bgColor);
     49        GuiHelper.setBackgroundReadable(this, bgColor);
    4950    }
    5051
  • trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java

    r9078 r9223  
    1717import org.openstreetmap.josm.data.osm.RelationMemberData;
    1818import org.openstreetmap.josm.gui.history.TwoColumnDiff.Item;
     19import org.openstreetmap.josm.gui.util.GuiHelper;
    1920import org.openstreetmap.josm.tools.ImageProvider;
    2021
     
    5859        setText(text);
    5960        setToolTipText(text);
    60         setBackground(bgColor);
     61        GuiHelper.setBackgroundReadable(this, bgColor);
    6162    }
    6263
     
    7576        setText(text);
    7677        setToolTipText(text);
    77         setBackground(bgColor);
     78        GuiHelper.setBackgroundReadable(this, bgColor);
    7879    }
    7980
  • trunk/src/org/openstreetmap/josm/gui/history/TagTableCellRenderer.java

    r9194 r9223  
    99import javax.swing.UIManager;
    1010import javax.swing.table.TableCellRenderer;
     11
     12import org.openstreetmap.josm.gui.util.GuiHelper;
    1113
    1214/**
     
    2426    }
    2527
    26     protected void setBackground(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected) {
     28    protected void setBackgroundReadable(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected) {
    2729        Color bgColor = UIManager.getColor("Table.background");
    2830        if (!model.hasTag(key) && model.isCurrentPointInTime()
     
    3941        }
    4042
    41         setBackground(bgColor);
     43        GuiHelper.setBackgroundReadable(this, bgColor);
    4244    }
    4345
     
    5759            setText(model.hasTag(key) ? key : "");
    5860            setToolTipText(getText());
    59             setBackground(key, model, isSelected);
     61            setBackgroundReadable(key, model, isSelected);
    6062            break;
    6163        case 1:
     
    6365            setText(model.hasTag(key) ? model.getValue(key) : "");
    6466            setToolTipText(getText());
    65             setBackground(key, model, isSelected);
     67            setBackgroundReadable(key, model, isSelected);
    6668            break;
    6769        }
  • trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java

    r9136 r9223  
    3434import org.openstreetmap.josm.data.osm.history.History;
    3535import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
     36import org.openstreetmap.josm.gui.util.GuiHelper;
    3637import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
    3738import org.openstreetmap.josm.io.XmlWriter;
     
    6465        setShowGrid(false);
    6566        setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    66         setBackground(UIManager.getColor("Button.background"));
     67        GuiHelper.setBackgroundReadable(this, UIManager.getColor("Button.background"));
    6768        setIntercellSpacing(new Dimension(6, 0));
    6869        putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java

    r9221 r9223  
    4747import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
    4848import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
     49import org.openstreetmap.josm.gui.util.GuiHelper;
    4950import org.openstreetmap.josm.tools.ColorHelper;
    5051import org.openstreetmap.josm.tools.GBC;
     
    230231                    Color c = (Color) o;
    231232                    JLabel l = new JLabel(ColorHelper.color2html(c));
    232                     l.setBackground(c);
    233                     // http://stackoverflow.com/a/3943023/2257172
    234                     l.setForeground((c.getRed()*0.299 + c.getGreen()*0.587 + c.getBlue()*0.114) > 186 ?
    235                             Color.BLACK : Color.WHITE);
     233                    GuiHelper.setBackgroundReadable(l, c);
    236234                    l.setOpaque(true);
    237235                    return l;
  • trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java

    r9070 r9223  
    55
    66import java.awt.BasicStroke;
     7import java.awt.Color;
    78import java.awt.Component;
    89import java.awt.Container;
     
    4344import org.openstreetmap.josm.gui.widgets.HtmlPanel;
    4445import org.openstreetmap.josm.tools.CheckParameterUtil;
     46import org.openstreetmap.josm.tools.ColorHelper;
    4547import org.openstreetmap.josm.tools.GBC;
    4648import org.openstreetmap.josm.tools.ImageOverlay;
     
    367369        }
    368370    }
     371
     372    /**
     373     * Sets the background color for this component, and adjust the foreground color so the text remains readable.
     374     * @param c component
     375     * @param background background color
     376     * @since 9223
     377     */
     378    public static void setBackgroundReadable(JComponent c, Color background) {
     379        c.setBackground(background);
     380        c.setForeground(ColorHelper.getForegroundColor(background));
     381    }
    369382}
  • trunk/src/org/openstreetmap/josm/tools/ColorHelper.java

    r8846 r9223  
    7272        return code;
    7373    }
     74
     75    /**
     76     * Determines the correct foreground color (black or white) to use for the given background,
     77     * so the text will be readable.
     78     * @param bg background color
     79     * @return {@code Color#BLACK} or {@code Color#WHITE}
     80     * @since 9223
     81     */
     82    public static Color getForegroundColor(Color bg) {
     83        // http://stackoverflow.com/a/3943023/2257172
     84        return (bg.getRed()*0.299 + bg.getGreen()*0.587 + bg.getBlue()*0.114) > 186 ?
     85                Color.BLACK : Color.WHITE;
     86    }
    7487}
Note: See TracChangeset for help on using the changeset viewer.