Ignore:
Timestamp:
2020-01-04T20:16:33+01:00 (4 years ago)
Author:
Don-vip
Message:

fix #18509 - Display GPX colors in layer manager (patch by Bjoeni)

File:
1 edited

Legend:

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

    r15592 r15632  
    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;
     
    1721import java.util.Arrays;
    1822import java.util.List;
    19 import java.util.Optional;
    2023import java.util.concurrent.CopyOnWriteArrayList;
    2124
     
    456459        private final ImageIcon iconEyeTranslucent;
    457460        private boolean isTranslucent;
     461        private Layer layer;
    458462
    459463        /**
     
    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;
     
    480484
    481485        public void updateStatus(Layer layer) {
     486            this.layer = layer;
    482487            boolean visible = layer.isVisible();
    483488            setSelected(visible);
     
    493498                tr("layer is currently visible (click to hide layer)") :
    494499                tr("layer is currently hidden (click to show layer)"));
     500        }
     501
     502        private class EyeIcon extends ImageIcon {
     503            private final boolean translucent;
     504
     505            EyeIcon(String name) {
     506                this(name, false);
     507            }
     508
     509            EyeIcon(String name, boolean translucent) {
     510                super(ImageProvider.get("dialogs/layerlist", name).getImage());
     511                this.translucent = translucent;
     512            }
     513
     514            @Override
     515            public synchronized void paintIcon(Component comp, Graphics g, int x, int y) {
     516                Color c;
     517                if (Config.getPref().getBoolean("dialog.layer.colorname", true)
     518                        && layer != null && (c = layer.getColor()) != null) {
     519                    if (g instanceof Graphics2D) {
     520                        ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     521                    }
     522                    if (translucent) {
     523                        g.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 125));
     524                    } else {
     525                        g.setColor(c);
     526                    }
     527                    g.fillOval(x, y + 1, getIconWidth(), getIconHeight() - 2);
     528                }
     529                super.paintIcon(comp, g, x, y);
     530            }
    495531        }
    496532    }
     
    649685            if (isActiveLayer(layer)) {
    650686                label.setFont(label.getFont().deriveFont(Font.BOLD));
    651             }
    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")));
    656687            }
    657688            label.setIcon(layer.getIcon());
Note: See TracChangeset for help on using the changeset viewer.