Ticket #18509: 18509.patch

File 18509.patch, 4.5 KB (added by Bjoeni, 3 months ago)
  • src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java

    Cannot display: file marked as a binary type.
    svn:mime-type = image/png
    Cannot display: file marked as a binary type.
    svn:mime-type = image/png
     
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.Color;
    67import java.awt.Component;
    78import java.awt.Dimension;
    89import java.awt.Font;
     10import java.awt.Graphics;
     11import java.awt.Graphics2D;
    912import java.awt.GraphicsEnvironment;
     13import java.awt.RenderingHints;
    1014import java.awt.event.ActionEvent;
    1115import java.awt.event.InputEvent;
    1216import java.awt.event.KeyEvent;
     
    1620import java.util.ArrayList;
    1721import java.util.Arrays;
    1822import java.util.List;
    19 import java.util.Optional;
    2023import java.util.concurrent.CopyOnWriteArrayList;
    2124
    2225import javax.swing.AbstractAction;
     
    455458        private final ImageIcon iconEye;
    456459        private final ImageIcon iconEyeTranslucent;
    457460        private boolean isTranslucent;
     461        private Layer layer;
    458462
    459463        /**
    460464         * Constructs a new {@code LayerVisibleCheckBox}.
    461465         */
    462466        LayerVisibleCheckBox() {
    463             iconEye = ImageProvider.get("dialogs/layerlist", "eye");
    464             iconEyeTranslucent = ImageProvider.get("dialogs/layerlist", "eye-translucent");
     467            iconEye = new EyeIcon("eye");
     468            iconEyeTranslucent = new EyeIcon("eye-translucent", true);
    465469            setIcon(ImageProvider.get("dialogs/layerlist", "eye-off"));
    466             setPressedIcon(ImageProvider.get("dialogs/layerlist", "eye-pressed"));
     470            setPressedIcon(new EyeIcon("eye-pressed"));
    467471            setSelectedIcon(iconEye);
    468472            isTranslucent = false;
    469473        }
     
    479483        }
    480484
    481485        public void updateStatus(Layer layer) {
     486            this.layer = layer;
    482487            boolean visible = layer.isVisible();
    483488            setSelected(visible);
    484489            if (displayLayerNumbers()) {
     
    493498                tr("layer is currently visible (click to hide layer)") :
    494499                tr("layer is currently hidden (click to show layer)"));
    495500        }
     501
     502        class EyeIcon extends ImageIcon {
     503            private boolean translucent;
     504            public EyeIcon(String name) {
     505                this(name, false);
     506            }
     507            public EyeIcon(String name, boolean translucent) {
     508                super(ImageProvider.get("dialogs/layerlist", name).getImage());
     509                this.translucent = translucent;
     510            }
     511            @Override
     512            public synchronized void paintIcon(Component comp, Graphics g, int x, int y) {
     513                Color c;
     514                if (Config.getPref().getBoolean("dialog.layer.colorname", true)
     515                        && layer != null && (c = layer.getColor()) != null) {
     516                    if (g instanceof Graphics2D) {
     517                        Graphics2D g2d = (Graphics2D) g;
     518                        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
     519                                RenderingHints.VALUE_ANTIALIAS_ON);
     520                    }
     521                    if (translucent) {
     522                        g.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 125));
     523                    } else {
     524                        g.setColor(c);
     525                    }
     526                    g.fillOval(x, y + 1, getIconWidth(), getIconHeight() - 2);
     527                }
     528                super.paintIcon(comp, g, x, y);
     529            }
     530        }
    496531    }
    497532
    498533    private static class NativeScaleLayerCheckBox extends JCheckBox {
     
    649684            if (isActiveLayer(layer)) {
    650685                label.setFont(label.getFont().deriveFont(Font.BOLD));
    651686            }
    652             if (Config.getPref().getBoolean("dialog.layer.colorname", true)) {
    653                 label.setForeground(Optional
    654                         .ofNullable(layer.getColor())
    655                         .orElse(UIManager.getColor(isSelected ? "Table.selectionForeground" : "Table.foreground")));
    656             }
    657687            label.setIcon(layer.getIcon());
    658688            label.setToolTipText(layer.getToolTipText());
    659689            return label;