Add support for 8x8 and 32x32 marker icons (default still 16x16)

This commit is contained in:
Mike Primm 2011-12-01 15:19:40 +08:00 committed by mikeprimm
parent 52a09d41b4
commit 348a37af87
4 changed files with 76 additions and 7 deletions

View file

@ -1,5 +1,6 @@
package org.dynmap.markers.impl;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@ -17,6 +18,8 @@ import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.imageio.ImageIO;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.World;
@ -38,6 +41,7 @@ import org.dynmap.markers.AreaMarker;
import org.dynmap.markers.Marker;
import org.dynmap.markers.MarkerAPI;
import org.dynmap.markers.MarkerIcon;
import org.dynmap.markers.MarkerIcon.MarkerSize;
import org.dynmap.markers.MarkerSet;
import org.dynmap.web.Json;
@ -82,6 +86,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
public String set;
public boolean markup;
public String desc;
public String dim;
public MarkerUpdated(Marker m, boolean deleted) {
this.id = m.getMarkerID();
@ -93,6 +98,7 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
this.icon = m.getMarkerIcon().getMarkerIconID();
this.markup = m.isLabelMarkup();
this.desc = m.getDescription();
this.dim = m.getMarkerIcon().getMarkerIconSize().getSize();
if(deleted)
msg = "markerdeleted";
else
@ -269,7 +275,9 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
InputStream in = null;
File infile = new File(markerdir, ico.getMarkerIconID() + ".png"); /* Get source file name */
File outfile = new File(markertiledir, ico.getMarkerIconID() + ".png"); /* Destination */
BufferedImage im = null;
OutputStream out = null;
try {
out = new FileOutputStream(outfile);
} catch (IOException iox) {
@ -280,6 +288,26 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
in = getClass().getResourceAsStream("/markers/" + ico.getMarkerIconID() + ".png");
}
else if(infile.canRead()) { /* If it exists and is readable */
try {
im = ImageIO.read(infile);
} catch (IOException e) {
} catch (IndexOutOfBoundsException e) {
}
if(im != null) {
MarkerIconImpl icon = (MarkerIconImpl)ico;
int w = im.getWidth(); /* Get width */
if(w <= 8) { /* Small size? */
icon.setMarkerIconSize(MarkerSize.MARKER_8x8);
}
else if(w > 16) {
icon.setMarkerIconSize(MarkerSize.MARKER_32x32);
}
else {
icon.setMarkerIconSize(MarkerSize.MARKER_16x16);
}
im.flush();
}
try {
in = new FileInputStream(infile);
} catch (IOException iox) {
@ -1447,7 +1475,9 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener<DynmapWorld> {
mdata.put("x", m.getX());
mdata.put("y", m.getY());
mdata.put("z", m.getZ());
mdata.put("icon", m.getMarkerIcon().getMarkerIconID());
MarkerIcon mi = m.getMarkerIcon();
mdata.put("icon", mi.getMarkerIconID());
mdata.put("dim", mi.getMarkerIconSize().getSize());
mdata.put("label", m.getLabel());
mdata.put("markup", m.isLabelMarkup());
if(m.getDescription() != null)

View file

@ -15,6 +15,7 @@ class MarkerIconImpl implements MarkerIcon {
private String iconid;
private String label;
private boolean is_builtin;
private MarkerSize size = MarkerSize.MARKER_16x16;
MarkerIconImpl(String id) {
iconid = id;
@ -93,4 +94,12 @@ class MarkerIconImpl implements MarkerIcon {
return true;
}
@Override
public MarkerSize getMarkerIconSize() {
return size;
}
void setMarkerIconSize(MarkerSize sz) {
size = sz;
}
}