Changeset 24548 in osm for applications/editors


Ignore:
Timestamp:
2010-12-03T12:57:17+01:00 (14 years ago)
Author:
upliner
Message:

implement fade for WMS layers

Location:
applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferenceEditor.java

    r24544 r24548  
    44import static org.openstreetmap.josm.tools.I18n.trc;
    55
     6import java.awt.Color;
    67import java.awt.Component;
    78import java.awt.Dimension;
     
    2223import javax.swing.JButton;
    2324import javax.swing.JCheckBox;
     25import javax.swing.JColorChooser;
    2426import javax.swing.JComboBox;
    2527import javax.swing.JEditorPane;
     
    4446import org.openstreetmap.josm.plugins.imagery.wms.AddWMSLayerPanel;
    4547import org.openstreetmap.josm.plugins.imagery.wms.WMSAdapter;
     48import org.openstreetmap.josm.tools.ColorHelper;
    4649import org.openstreetmap.josm.tools.GBC;
    4750
     
    5053    private JComboBox browser;
    5154
     55    // Common settings
     56    private Color colFadeColor;
     57    private JButton btnFadeColor;
     58    private JSlider fadeAmount = new JSlider(0, 100);
     59
     60    // WMS Settings
    5261    JCheckBox overlapCheckBox;
    5362    JSpinner spinEast;
     
    6271    private JCheckBox autozoomActive = new JCheckBox();
    6372    private JCheckBox autoloadTiles = new JCheckBox();
     73    private JSpinner minZoomLvl;
    6474    private JSpinner maxZoomLvl;
    65     private JSpinner minZoomLvl = new JSpinner();
    66     private JSlider fadeBackground = new JSlider(0, 100);
    6775
    6876
     
    186194    }
    187195
     196    private JPanel buildCommonSettingsPanel(final PreferenceTabbedPane gui) {
     197        final JPanel p = new JPanel(new GridBagLayout());
     198
     199        this.colFadeColor = ImageryPreferences.getFadeColor();
     200        this.btnFadeColor = new JButton();
     201        this.btnFadeColor.setBackground(colFadeColor);
     202        this.btnFadeColor.setText(ColorHelper.color2html(colFadeColor));
     203
     204        this.btnFadeColor.addActionListener(new ActionListener() {
     205            @Override
     206            public void actionPerformed(ActionEvent e) {
     207                JColorChooser chooser = new JColorChooser(colFadeColor);
     208                int answer = JOptionPane.showConfirmDialog(
     209                        gui, chooser,
     210                        tr("Choose a color for {0}", tr("imagery fade")),
     211                        JOptionPane.OK_CANCEL_OPTION,
     212                        JOptionPane.PLAIN_MESSAGE);
     213                if (answer == JOptionPane.OK_OPTION) {
     214                    colFadeColor = chooser.getColor();
     215                    btnFadeColor.setBackground(colFadeColor);
     216                    btnFadeColor.setText(ColorHelper.color2html(colFadeColor));
     217                }
     218            }
     219        });
     220
     221        p.add(new JLabel(tr("Fade Color: ")), GBC.std());
     222        p.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
     223        p.add(this.btnFadeColor, GBC.eol().fill(GBC.HORIZONTAL));
     224
     225        p.add(new JLabel(tr("Fade amount: ")), GBC.std());
     226        p.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
     227        p.add(this.fadeAmount, GBC.eol().fill(GBC.HORIZONTAL));
     228
     229        this.fadeAmount.setValue(ImageryPreferences.PROP_FADE_AMOUNT.get());
     230        return p;
     231    }
     232
    188233    private JPanel buildWMSSettingsPanel() {
    189         final JPanel pnlW = new JPanel(new GridBagLayout());
     234        final JPanel p = new JPanel(new GridBagLayout());
    190235        browser = new JComboBox(new String[] {
    191236                "webkit-image {0}",
     
    195240        browser.setEditable(true);
    196241        browser.setSelectedItem(Main.pref.get("wmsplugin.browser", "webkit-image {0}"));
    197         pnlW.add(new JLabel(tr("Downloader:")), GBC.eol().fill(GBC.HORIZONTAL));
    198         pnlW.add(browser);
     242        p.add(new JLabel(tr("Downloader:")), GBC.eol().fill(GBC.HORIZONTAL));
     243        p.add(browser);
    199244
    200245        // Overlap
    201         pnlW.add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
     246        p.add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
    202247
    203248        overlapCheckBox = new JCheckBox(tr("Overlap tiles"), wmsAdapter.PROP_OVERLAP.get());
     
    214259        overlapPanel.add(spinNorth);
    215260
    216         pnlW.add(overlapPanel);
     261        p.add(overlapPanel);
    217262
    218263        // Simultaneous connections
    219         pnlW.add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
     264        p.add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
    220265        JLabel labelSimConn = new JLabel(tr("Simultaneous connections"));
    221266        spinSimConn = new JSpinner(new SpinnerNumberModel(wmsAdapter.PROP_SIMULTANEOUS_CONNECTIONS.get(), 1, 30, 1));
     
    223268        overlapPanelSimConn.add(labelSimConn);
    224269        overlapPanelSimConn.add(spinSimConn);
    225         pnlW.add(overlapPanelSimConn, GBC.eol().fill(GBC.HORIZONTAL));
     270        p.add(overlapPanelSimConn, GBC.eol().fill(GBC.HORIZONTAL));
    226271
    227272        allowRemoteControl = Main.pref.getBoolean("wmsplugin.remotecontrol", true);
     
    230275        remotePanel.add(remoteCheckBox);
    231276
    232         pnlW.add(remotePanel,GBC.eol().fill(GBC.HORIZONTAL));
    233         return pnlW;
     277        p.add(remotePanel,GBC.eol().fill(GBC.HORIZONTAL));
     278        return p;
    234279    }
    235280
     
    255300        tmsTab.add(this.maxZoomLvl, GBC.eol().fill(GBC.HORIZONTAL));
    256301
    257         tmsTab.add(new JLabel(tr("Fade background: ")), GBC.std());
    258         tmsTab.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
    259         tmsTab.add(this.fadeBackground, GBC.eol().fill(GBC.HORIZONTAL));
    260 
    261302        tmsTab.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
    262303
     
    265306        this.maxZoomLvl.setValue(TMSPreferences.getMaxZoomLvl(null));
    266307        this.minZoomLvl.setValue(TMSPreferences.getMinZoomLvl(null));
    267         this.fadeBackground.setValue(TMSPreferences.PROP_FADE_BACKGROUND.get());
    268308        return tmsTab;
    269309    }
    270310
    271     private Component buildSettingsPanel() {
    272         // TODO: make some settings common for WMS and TMS
     311    private void addSettingsSection(final JPanel p, String name, JPanel section) {
     312        final JLabel lbl = new JLabel(name);
     313        lbl.setFont(lbl.getFont().deriveFont(Font.BOLD));
     314        p.add(lbl);
     315        p.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 0));
     316        p.add(section,GBC.eol().insets(20,5,0,5));
     317    }
     318
     319    private Component buildSettingsPanel(final PreferenceTabbedPane gui) {
    273320        final JPanel p = new JPanel(new GridBagLayout());
    274321        p.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    275322
    276         final JLabel lblW = new JLabel(tr("WMS Settings"));
    277         lblW.setFont(lblW.getFont().deriveFont(Font.BOLD));
    278         p.add(lblW);
    279         p.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 0));
    280         p.add(buildWMSSettingsPanel(),GBC.eol().insets(20,5,0,0));
    281 
    282         final JLabel lblT = new JLabel(tr("TMS Settings"));
    283         lblT.setFont(lblT.getFont().deriveFont(Font.BOLD));
    284         p.add(lblT);
    285         p.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 0));
    286         p.add(buildTMSSettingsPanel(),GBC.eol().insets(20,5,0,0));
     323        addSettingsSection(p, tr("Common Settings"), buildCommonSettingsPanel(gui));
     324        addSettingsSection(p, tr("WMS Settings"), buildWMSSettingsPanel());
     325        addSettingsSection(p, tr("TMS Settings"), buildTMSSettingsPanel());
    287326
    288327        p.add(new JPanel(),GBC.eol().fill(GBC.BOTH));
     
    295334        JTabbedPane pane = new JTabbedPane();
    296335        pane.add(buildImageryProvidersPanel(gui));
    297         pane.add(buildSettingsPanel());
     336        pane.add(buildSettingsPanel(gui));
    298337        pane.setTitleAt(0, tr("Imagery providers"));
    299338        pane.setTitleAt(1, tr("Settings"));
     
    320359        TMSPreferences.setMaxZoomLvl((Integer)this.maxZoomLvl.getValue());
    321360        TMSPreferences.setMinZoomLvl((Integer)this.minZoomLvl.getValue());
    322         TMSPreferences.PROP_FADE_BACKGROUND.put(this.fadeBackground.getValue());
     361
     362        ImageryPreferences.PROP_FADE_AMOUNT.put(this.fadeAmount.getValue());
     363        ImageryPreferences.setFadeColor(this.colFadeColor);
    323364
    324365        return false;
  • applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java

    r24544 r24548  
    5353import org.openstreetmap.josm.gui.layer.Layer;
    5454import org.openstreetmap.josm.plugins.imagery.ImageryInfo;
     55import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType;
    5556import org.openstreetmap.josm.plugins.imagery.ImageryLayer;
    56 import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType;
     57import org.openstreetmap.josm.plugins.imagery.ImageryPreferences;
    5758
    5859/**
     
    690691                        img_x_end, img_y_end,
    691692                        this);
    692         float fadeBackground = TMSPreferences.getFadeBackground();
    693         if (fadeBackground != 0f) {
     693        if (ImageryPreferences.PROP_FADE_AMOUNT.get() != 0) {
    694694            // dimm by painting opaque rect...
    695             // TODO: make fade color configurable and implement same feature for WMS layers
    696             g.setColor(new Color(1f, 1f, 1f, fadeBackground));
     695            g.setColor(ImageryPreferences.getFadeColorWithAlpha());
    697696            g.fillRect(target.x, target.y,
    698697                       target.width, target.height);
  • applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSPreferences.java

    r24544 r24548  
    2626    public static final IntegerProperty PROP_MIN_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".min_zoom_lvl", DEFAULT_MIN_ZOOM);
    2727    public static final IntegerProperty PROP_MAX_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".max_zoom_lvl", DEFAULT_MAX_ZOOM);
    28     public static final IntegerProperty PROP_FADE_BACKGROUND = new IntegerProperty(PREFERENCE_PREFIX + ".fade_background", 0);
    2928    public static final BooleanProperty PROP_DRAW_DEBUG = new BooleanProperty(PREFERENCE_PREFIX + ".draw_debug", false);
    30 
    31     public static void setFadeBackground(float fadeBackground) {
    32         PROP_FADE_BACKGROUND.put(Math.round(fadeBackground*100));
    33     }
    34 
    35     /**
    36      *
    37      * @return  number between 0 and 1, inclusive
    38      */
    39     public static float getFadeBackground() {
    40         float parsed = (PROP_FADE_BACKGROUND.get())/100.0f;
    41         if(parsed < 0f) {
    42             parsed = 0f;
    43         } else {
    44             if(parsed > 1f) {
    45                 parsed = 1f;
    46             }
    47         }
    48         return parsed;
    49     }
    5029
    5130    static int checkMaxZoomLvl(int maxZoomLvl, TileSource ts)
  • applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/GeorefImage.java

    r24501 r24548  
    1919import org.openstreetmap.josm.data.coor.EastNorth;
    2020import org.openstreetmap.josm.gui.NavigatableComponent;
     21import org.openstreetmap.josm.plugins.imagery.ImageryPreferences;
    2122
    2223public class GeorefImage implements Serializable {
     
    3334    private int yIndex;
    3435
     36    private static final Color transparentColor = new Color(0,0,0,0);
     37    private Color fadeColor = transparentColor;
    3538
    3639    public EastNorth getMin() {
     
    122125            return false;
    123126
     127        // TODO: implement per-layer fade color
     128        Color newFadeColor;
     129        if (ImageryPreferences.PROP_FADE_AMOUNT.get() == 0)
     130            newFadeColor = transparentColor;
     131        else
     132            newFadeColor = ImageryPreferences.getFadeColorWithAlpha();
     133
    124134        BufferedImage img = reImg == null?null:reImg.get();
    125         if(img != null && img.getWidth() == width && img.getHeight() == height) {
     135        if(img != null && img.getWidth() == width && img.getHeight() == height && fadeColor.equals(newFadeColor)) {
    126136            g.drawImage(img, x, y, null);
    127137            return true;
    128138        }
     139
     140        fadeColor = newFadeColor;
    129141
    130142        boolean alphaChannel = WMSLayer.PROP_ALPHA_CHANNEL.get() && getImage().getTransparency() != Transparency.OPAQUE;
     
    143155            // Also prevent caching if we're out of memory soon
    144156            if(width > 2000 || height > 2000 || width*height*multipl > freeMem) {
    145                 fallbackDraw(g, getImage(), x, y, width, height);
     157                fallbackDraw(g, getImage(), x, y, width, height, alphaChannel);
    146158            } else {
    147159                // We haven't got a saved resized copy, so resize and cache it
     
    151163                        0, 0, getImage().getWidth(null), getImage().getHeight(null), // src
    152164                        null);
     165                if (!alphaChannel) {
     166                    drawFadeRect(img.getGraphics(), 0, 0, width, height);
     167                }
    153168                img.getGraphics().dispose();
    154169                g.drawImage(img, x, y, null);
     
    156171            }
    157172        } catch(Exception e) {
    158             fallbackDraw(g, getImage(), x, y, width, height);
     173            fallbackDraw(g, getImage(), x, y, width, height, alphaChannel);
    159174        }
    160175        return true;
    161176    }
    162177
    163     private void fallbackDraw(Graphics g, Image img, int x, int y, int width, int height) {
     178    private void fallbackDraw(Graphics g, Image img, int x, int y, int width, int height, boolean alphaChannel) {
    164179        flushedResizedCachedInstance();
    165180        g.drawImage(
     
    167182                0, 0, img.getWidth(null), img.getHeight(null),
    168183                null);
     184        if (!alphaChannel) { //FIXME: fading for layers with alpha channel currently is not supported
     185            drawFadeRect(g, x, y, width, height);
     186        }
     187    }
     188
     189    private void drawFadeRect(Graphics g, int x, int y, int width, int height) {
     190        if (fadeColor != transparentColor) {
     191            g.setColor(fadeColor);
     192            g.fillRect(x, y, width, height);
     193        }
    169194    }
    170195
Note: See TracChangeset for help on using the changeset viewer.