Ignore:
Timestamp:
2011-02-06T15:48:58+01:00 (14 years ago)
Author:
bastiK
Message:

mapcss: fill-image

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
5 edited

Legend:

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

    r3848 r3862  
    77import java.awt.Font;
    88import java.awt.GridBagLayout;
     9import java.util.ArrayList;
    910import java.util.Collection;
    1011import java.util.List;
     
    3435import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
    3536import org.openstreetmap.josm.gui.mappaint.MultiCascade;
     37import org.openstreetmap.josm.gui.mappaint.StyleCache;
    3638import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList;
    3739import org.openstreetmap.josm.gui.mappaint.StyleSource;
     
    300302            txtMappaint.append("\n\n");
    301303        }
     304
     305        if (sel.size() == 2) {
     306            List<OsmPrimitive> selList = new ArrayList<OsmPrimitive>(sel);
     307            StyleCache sc1 = selList.get(0).mappaintStyle;
     308            StyleCache sc2 = selList.get(1).mappaintStyle;
     309            if (sc1 == sc2) {
     310                txtMappaint.append("The 2 selected Objects have identical style caches.");
     311            }
     312            if (!sc1.equals(sc2)) {
     313                txtMappaint.append("The 2 selected Objects have different style caches.");
     314            }
     315            if (sc1.equals(sc2) && sc1 != sc2) {
     316                txtMappaint.append("Warning: The 2 selected Objects have equal, but not identical style caches.");
     317            }
     318        }
    302319    }
    303320
  • trunk/src/org/openstreetmap/josm/gui/mappaint/AreaElemStyle.java

    r3859 r3862  
    33
    44import java.awt.Color;
     5import java.awt.Rectangle;
     6import java.awt.TexturePaint;
     7import java.awt.image.BufferedImage;
     8
     9import javax.swing.ImageIcon;
    510
    611import org.openstreetmap.josm.Main;
     
    1015import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
    1116import org.openstreetmap.josm.data.osm.visitor.paint.MapPainter;
     17import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.IconReference;
    1218import org.openstreetmap.josm.tools.Utils;
     19
    1320
    1421public class AreaElemStyle extends ElemStyle
    1522{
    1623    public Color color;
     24    public BufferedImage fillImage;
    1725
    18     protected AreaElemStyle(Cascade c, Color color) {
     26    protected AreaElemStyle(Cascade c, Color color, BufferedImage fillImage) {
    1927        super(c);
    2028        this.color = color;
     29        this.fillImage = fillImage;
    2130    }
    2231
    2332    public static AreaElemStyle create(Cascade c) {
     33        BufferedImage fillImage = null;
     34        IconReference iconRef = c.get("fill-image", null, IconReference.class);
     35        if (iconRef != null) {
     36            ImageIcon icon = MapPaintStyles.getIcon(iconRef, false);
     37            if (icon != null) {
     38                if (!(icon.getImage() instanceof BufferedImage)) {
     39                    icon = MapPaintStyles.getIcon(iconRef, true);
     40                }
     41                if (!(icon.getImage() instanceof BufferedImage))
     42                    throw new RuntimeException();
     43                fillImage = (BufferedImage) icon.getImage();
     44            }
     45        }
     46
    2447        Color color = c.get("fill-color", null, Color.class);
    25         if (color == null)
     48        if (color != null) {
     49
     50            int alpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.fillalpha", 50))));
     51            Integer pAlpha = color_float2int(c.get("fill-opacity", null, float.class));
     52            if (pAlpha != null) {
     53                alpha = pAlpha;
     54            }
     55            color = new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha);
     56        }
     57       
     58        if (fillImage != null || color != null)
     59            return new AreaElemStyle(c, color, fillImage);
     60        else
    2661            return null;
    27         int alpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.fillalpha", 50))));
    28         Integer pAlpha = color_float2int(c.get("fill-opacity", null, float.class));
    29         if (pAlpha != null) {
    30             alpha = pAlpha;
    31         }
    32         color = new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha);
    33         return new AreaElemStyle(c, color);
    3462    }
    3563
     
    3866        if (osm instanceof Way)
    3967        {
    40             painter.drawArea((Way) osm,
    41                     osm.isSelected() ? paintSettings.getSelectedColor(color.getAlpha()) : color,
     68            Color myColor = color;
     69            if (color != null) {
     70                if (osm.isSelected()) {
     71                    myColor = paintSettings.getSelectedColor(color.getAlpha());
     72                }
     73            }
     74            painter.drawArea((Way) osm, myColor, fillImage,
    4275                    painter.isShowNames() ? painter.getAreaName(osm) : null);
    4376        } else if (osm instanceof Relation)
    4477        {
    45             painter.drawArea((Relation) osm,
    46                     selected ? paintSettings.getRelationSelectedColor(color.getAlpha()) : color,
     78            Color myColor = color;
     79            if (color != null) {
     80                if (selected) {
     81                    myColor = paintSettings.getRelationSelectedColor(color.getAlpha());
     82                }
     83            }
     84            painter.drawArea((Relation) osm, myColor, fillImage,
    4785                    painter.getAreaName(osm));
    4886        }
     
    5593        if (!super.equals(obj))
    5694            return false;
    57         return Utils.equal(color, ((AreaElemStyle) obj).color);
     95        AreaElemStyle other = (AreaElemStyle) obj;
     96        // we should get the same image object due to caching
     97        if (fillImage != other.fillImage && (fillImage == null || other.fillImage == null || fillImage != other.fillImage))
     98            return false;
     99        if (!Utils.equal(color, other.color))
     100            return false;
     101        return true;
    58102    }
    59103
    60104    @Override
    61105    public int hashCode() {
    62         return 11 * super.hashCode() + color.hashCode();
     106        int hash = 3;
     107        hash = 61 * hash + (this.color != null ? this.color.hashCode() : 0);
     108        hash = 61 * hash + (this.fillImage != null ? this.fillImage.hashCode() : 0);
     109        return hash;
    63110    }
    64111
  • trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java

    r3858 r3862  
    6060    }
    6161
    62     public static ImageIcon getIcon(IconReference ref)
     62    public static ImageIcon getIcon(IconReference ref, boolean sanitize)
    6363    {
    6464        String styleName = ref.source.getPrefName();
     
    7878            }
    7979        }
    80         ImageIcon i = ImageProvider.getIfAvailable(dirs, "mappaint."+styleName, null, ref.iconName, ref.source.zipIcons);
     80        ImageIcon i = ImageProvider.getIfAvailable(dirs, "mappaint."+styleName, null, ref.iconName, ref.source.zipIcons, sanitize);
    8181        if(i == null)
    8282        {
  • trunk/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java

    r3855 r3862  
    3737        if (iconRef == null)
    3838            return null;
    39 
    40         ImageIcon icon = MapPaintStyles.getIcon(iconRef);
     39        ImageIcon icon = MapPaintStyles.getIcon(iconRef, false);
     40       
    4141        String text = c.get("text", null, String.class);
    4242
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java

    r3860 r3862  
    3636        public void execute(Environment env) {
    3737            Object value = (val instanceof Expression) ? ((Expression) val).evaluate(env) : val;
    38             if (key.equals("icon-image")) {
     38            if (key.equals("icon-image") || key.equals("fill-image")) {
    3939                if (value instanceof String) {
    4040                    value = new IconReference((String) value, env.source);
Note: See TracChangeset for help on using the changeset viewer.