[tiled] r671 - in trunk/src/tiled: io/xml mapeditor/dialogs mapeditor/resources mapeditor/widget
svn@biggeruniverse.com
svn at biggeruniverse.com
Thu Jun 22 17:09:37 PDT 2006
Author: bjorn
Date: 2006-06-22 19:09:36 -0500 (Thu, 22 Jun 2006)
New Revision: 671
Added:
trunk/src/tiled/mapeditor/resources/empty.png
Modified:
trunk/src/tiled/io/xml/XMLMapTransformer.java
trunk/src/tiled/io/xml/XMLMapWriter.java
trunk/src/tiled/mapeditor/dialogs/ConfigurationDialog.java
trunk/src/tiled/mapeditor/widget/TileButton.java
Log:
Fixed configuration, saving and loading for the choice between embedding images in tiles or using shared images. Is seems to me however that Tiled would be better off going either way instead of supporting both options. With the current tileset implementation and tileset editing interface, it would make more sense to only support shared images. Also, you don't want to be accidentally saving a map with images embedded in tiles if any of your images are shared by multiple tiles.
Modified: trunk/src/tiled/io/xml/XMLMapTransformer.java
===================================================================
--- trunk/src/tiled/io/xml/XMLMapTransformer.java 2006-06-22 22:30:03 UTC (rev 670)
+++ trunk/src/tiled/io/xml/XMLMapTransformer.java 2006-06-23 00:09:36 UTC (rev 671)
@@ -134,20 +134,6 @@
}
}
- private static Node findChild(Node node, String childName) {
- NodeList children = node.getChildNodes();
-
- // Do an initial pass to see what's in here
- for (int i = 0; i < children.getLength(); i++) {
- Node child = children.item(i);
- if (child.getNodeName().equalsIgnoreCase(childName)) {
- return child;
- }
- }
-
- return null;
- }
-
private Object unmarshalClass(Class reflector, Node node)
throws InstantiationException, IllegalAccessException,
InvocationTargetException {
@@ -343,46 +329,50 @@
boolean hasTilesetImage = false;
NodeList children = t.getChildNodes();
- //if we have a tileset image, load it (tileset can have only one image element)
- Node child = findChild(t, "image");
- if(child != null) {
- String imgSource = getAttributeValue(child, "source");
- String id = getAttributeValue(child, "id");
- String transStr = getAttributeValue(child, "trans");
+ for (int i = 0; i < children.getLength(); i++) {
+ Node child = children.item(i);
- hasTilesetImage = true;
-
- if (imgSource != null && id == null) {
- // Not a shared image, but an entire set in one image
- // file
-
- // FIXME: importTileBitmap does not fully support URLs
- String sourcePath = imgSource;
- if (!Util.checkRoot(imgSource)) {
- sourcePath = tilesetBaseDir + imgSource;
+ if (child.getNodeName().equalsIgnoreCase("image")) {
+ if (hasTilesetImage) {
+ logger.warn("Ignoring illegal image element after tileset image.");
+ continue;
}
- logger.info("Importing " + sourcePath + "...");
+ String imgSource = getAttributeValue(child, "source");
+ String id = getAttributeValue(child, "id");
+ String transStr = getAttributeValue(child, "trans");
- if (transStr != null) {
- Color color = new Color(Integer.parseInt(transStr, 16));
- set.setTransparentColor(color);
- }
+ if (imgSource != null && id == null) {
+ // Not a shared image, but an entire set in one image
+ // file. There should be only one image element in this
+ // case.
+ hasTilesetImage = true;
- set.importTileBitmap(sourcePath, new BasicTileCutter(
- tileWidth, tileHeight, tileSpacing, 0));
- } else {
- set.addImage(unmarshalImage(child, tilesetBaseDir),
- Integer.parseInt(getAttributeValue(child, "id")));
- }
- }
+ // FIXME: importTileBitmap does not fully support URLs
+ String sourcePath = imgSource;
+ if (!Util.checkRoot(imgSource)) {
+ sourcePath = tilesetBaseDir + imgSource;
+ }
- //spin through and find tile elements
- for (int i = 0; i < children.getLength(); i++) {
- Node c = children.item(i);
+ logger.info("Importing " + sourcePath + "...");
- if (c.getNodeName().equalsIgnoreCase("tile")) {
- Tile tile = unmarshalTile(set, c, tilesetBaseDir);
+ if (transStr != null) {
+ int colorInt = Integer.parseInt(transStr, 16);
+ Color color = new Color(colorInt);
+ set.setTransparentColor(color);
+ }
+
+ set.importTileBitmap(sourcePath, new BasicTileCutter(
+ tileWidth, tileHeight, tileSpacing, 0));
+ } else {
+ Image image = unmarshalImage(child, tilesetBaseDir);
+ String idValue = getAttributeValue(child, "id");
+ int imageId = Integer.parseInt(idValue);
+ set.addImage(image, imageId);
+ }
+ }
+ else if (child.getNodeName().equalsIgnoreCase("tile")) {
+ Tile tile = unmarshalTile(set, child, tilesetBaseDir);
if (!hasTilesetImage || tile.getId() >= set.getMaxTileId()) {
set.addTile(tile);
} else {
Modified: trunk/src/tiled/io/xml/XMLMapWriter.java
===================================================================
--- trunk/src/tiled/io/xml/XMLMapWriter.java 2006-06-22 22:30:03 UTC (rev 670)
+++ trunk/src/tiled/io/xml/XMLMapWriter.java 2006-06-23 00:09:36 UTC (rev 671)
@@ -289,14 +289,13 @@
if (embedImages) {
needWrite = true;
} else {
+ // As long as one has properties, they all need to be written.
+ // TODO: This shouldn't be necessary
while (tileIterator.hasNext()) {
Tile tile = (Tile)tileIterator.next();
if (!tile.getProperties().isEmpty()) {
needWrite = true;
break;
- // As long as one has properties, they all
- // need to be written.
- // TODO: This shouldn't be necessary
}
}
}
@@ -425,28 +424,30 @@
w.endElement();
}
+ /**
+ * Used to write tile elements for tilesets not based on a tileset image.
+ *
+ * @param tile the tile instance that should be written
+ * @param w the writer to write to
+ * @throws IOException when an io error occurs
+ */
private static void writeTile(Tile tile, XMLWriter w) throws IOException {
w.startElement("tile");
+ w.writeAttribute("id", tile.getId());
- int tileId = tile.getId();
-
- w.writeAttribute("id", tileId);
-
//if (groundHeight != getHeight()) {
// w.writeAttribute("groundheight", "" + groundHeight);
//}
writeProperties(tile.getProperties(), w);
- Image tileImage = tile.getImage();
-
Preferences prefs = TiledConfiguration.node("saving");
-
boolean embedImages = prefs.getBoolean("embedImages", true);
boolean tileSetImages = prefs.getBoolean("tileSetImages", false);
+ Image tileImage = tile.getImage();
// Write encoded data
- if (tileImage != null && !tileSetImages) {
+ if (tileImage != null) {
if (embedImages && !tileSetImages) {
w.startElement("image");
w.writeAttribute("format", "png");
@@ -456,18 +457,17 @@
ImageHelper.imageToPNG(tileImage))));
w.endElement();
w.endElement();
- } else if (tileSetImages) {
+ } else if (embedImages && tileSetImages) {
w.startElement("image");
w.writeAttribute("id", tile.getImageId());
w.endElement();
} else {
String prefix = prefs.get("tileImagePrefix", "tile");
- String filename = prefs.get("maplocation", "") +
- prefix + tileId + ".png";
+ String filename = prefix + tile.getId() + ".png";
+ String path = prefs.get("maplocation", "") + filename;
w.startElement("image");
- w.writeAttribute("source", prefix + tileId + ".png");
- FileOutputStream fw = new FileOutputStream(
- new File(filename));
+ w.writeAttribute("source", filename);
+ FileOutputStream fw = new FileOutputStream(new File(path));
byte[] data = ImageHelper.imageToPNG(tileImage);
fw.write(data, 0, data.length);
fw.close();
@@ -602,7 +602,7 @@
return
"The core Tiled TMX format writer\n" +
"\n" +
- "Tiled Map Editor, (c) 2005\n" +
+ "Tiled Map Editor, (c) 2004-2006\n" +
"Adam Turk\n" +
"Bjorn Lindeijer";
}
Modified: trunk/src/tiled/mapeditor/dialogs/ConfigurationDialog.java
===================================================================
--- trunk/src/tiled/mapeditor/dialogs/ConfigurationDialog.java 2006-06-22 22:30:03 UTC (rev 670)
+++ trunk/src/tiled/mapeditor/dialogs/ConfigurationDialog.java 2006-06-23 00:09:36 UTC (rev 671)
@@ -245,9 +245,7 @@
public void itemStateChanged(ItemEvent itemEvent) {
final boolean embed = cbEmbedImages.isSelected();
savingPrefs.putBoolean("embedImages", embed);
- rbEmbedInTiles.setSelected(embed && rbEmbedInTiles.isSelected());
rbEmbedInTiles.setEnabled(embed);
- rbEmbedInSet.setSelected(embed && rbEmbedInSet.isSelected());
rbEmbedInSet.setEnabled(embed);
}
});
@@ -281,8 +279,8 @@
rbEmbedInTiles.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
- savingPrefs.putBoolean("embedImages",
- rbEmbedInTiles.isSelected());
+ savingPrefs.putBoolean("tileSetImages",
+ !rbEmbedInTiles.isSelected());
}
});
@@ -308,9 +306,16 @@
undoDepth.setValue(prefs.getInt("undoDepth", 30));
gridOpacitySlider.setValue(displayPrefs.getInt("gridOpacity", 255));
- if (savingPrefs.getBoolean("embedImages", true)) {
+ boolean embedImages = savingPrefs.getBoolean("embedImages", true);
+ if (embedImages) {
cbEmbedImages.setSelected(true);
- rbEmbedInTiles.setSelected(true);
+
+ if (savingPrefs.getBoolean("tileSetImages", false)) {
+ rbEmbedInSet.setSelected(true);
+ }
+ else {
+ rbEmbedInTiles.setSelected(true);
+ }
}
cbBinaryEncode.setSelected(savingPrefs.getBoolean("encodeLayerData", true));
@@ -319,6 +324,8 @@
cbReportIOWarnings.setSelected(ioPrefs.getBoolean("reportWarnings", false));
cbCompressLayerData.setEnabled(cbBinaryEncode.isSelected());
+ rbEmbedInTiles.setEnabled(embedImages);
+ rbEmbedInSet.setEnabled(embedImages);
}
private static void doExport() {
Added: trunk/src/tiled/mapeditor/resources/empty.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/tiled/mapeditor/resources/empty.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/tiled/mapeditor/widget/TileButton.java
===================================================================
--- trunk/src/tiled/mapeditor/widget/TileButton.java 2006-06-22 22:30:03 UTC (rev 670)
+++ trunk/src/tiled/mapeditor/widget/TileButton.java 2006-06-23 00:09:36 UTC (rev 671)
@@ -12,12 +12,13 @@
package tiled.mapeditor.widget;
-import java.awt.*;
+import java.awt.Image;
+import java.awt.Insets;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
-import javax.swing.*;
-import javax.swing.event.EventListenerList;
-
-import tiled.core.*;
+import tiled.core.Tile;
import tiled.mapeditor.Resources;
/**
More information about the tiled-commit
mailing list