Ticket #11968: node-icons.patch
| File node-icons.patch, 8.7 KB (added by , 11 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java
diff --git src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java index 48bfb5a..0a021c7 100644
2 2 package org.openstreetmap.josm.gui; 3 3 4 4 import java.awt.Component; 5 import java.awt.Rectangle; 5 6 6 7 import javax.swing.DefaultListCellRenderer; 7 8 import javax.swing.ImageIcon; … … public class OsmPrimitivRenderer implements ListCellRenderer<OsmPrimitive>, Tabl 72 73 private Component renderer(Component def, OsmPrimitive value) { 73 74 if (value != null && def instanceof JLabel) { 74 75 ((JLabel) def).setText(getComponentText(value)); 75 ImageIcon icon = ImageProvider.get(value.getDisplayType()); 76 ImageIcon icon = ImageProvider.getPadded(value, 77 // Height of component no yet known, assume the default 16px. 78 new Rectangle(16, 16)); 76 79 if (icon != null) { 77 80 ((JLabel) def).setIcon(icon); 78 81 } else { -
src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableMemberCellRenderer.java
diff --git src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableMemberCellRenderer.java src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableMemberCellRenderer.java index 6f24fcd..4be80d0 100644
2 2 package org.openstreetmap.josm.gui.dialogs.relation; 3 3 4 4 import java.awt.Component; 5 import java.awt.Rectangle; 5 6 6 7 import javax.swing.JTable; 7 8 … … import org.openstreetmap.josm.data.osm.OsmPrimitive; 9 10 import org.openstreetmap.josm.gui.DefaultNameFormatter; 10 11 import org.openstreetmap.josm.tools.ImageProvider; 11 12 13 /** 14 * "Refers to" column in relation editor's member list. 15 */ 12 16 public class MemberTableMemberCellRenderer extends MemberTableCellRenderer { 13 17 14 18 public MemberTableMemberCellRenderer() { 15 19 super(); 16 20 } 17 21 18 protected void renderPrimitive(OsmPrimitive primitive) { 19 setIcon(ImageProvider.get(primitive.getDisplayType())); 22 protected void renderPrimitive(OsmPrimitive primitive, Rectangle cellSize) { 23 // Make icon the full height of the table cell. Icon background is square. 24 setIcon(ImageProvider.getPadded(primitive, cellSize)); 20 25 setText(primitive.getDisplayName(DefaultNameFormatter.getInstance())); 21 26 setToolTipText(DefaultNameFormatter.getInstance().buildDefaultToolTip(primitive)); 22 27 } … … public class MemberTableMemberCellRenderer extends MemberTableCellRenderer { 29 34 if (value == null) 30 35 return this; 31 36 37 Rectangle cellSize = table.getCellRect(row, column, false); 38 32 39 renderForeground(isSelected); 33 40 OsmPrimitive primitive = (OsmPrimitive) value; 34 41 renderBackground(getModel(table), primitive, isSelected); 35 renderPrimitive(primitive );42 renderPrimitive(primitive, cellSize); 36 43 return this; 37 44 } 38 45 } -
src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java
diff --git src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java index a336c33..d0aa431 100644
package org.openstreetmap.josm.gui.dialogs.relation; 3 3 4 4 import java.awt.Color; 5 5 import java.awt.Component; 6 import java.awt.Rectangle; 6 7 7 8 import javax.swing.JLabel; 8 9 import javax.swing.JTable; … … public class SelectionTableCellRenderer extends JLabel implements TableCellRende 57 58 setBackground(bgc); 58 59 } 59 60 60 protected void renderPrimitive(OsmPrimitive primitive ) {61 setIcon(ImageProvider.get (primitive.getDisplayType()));61 protected void renderPrimitive(OsmPrimitive primitive, Rectangle cellSize) { 62 setIcon(ImageProvider.getPadded(primitive, cellSize)); 62 63 setText(primitive.getDisplayName(DefaultNameFormatter.getInstance())); 63 64 setToolTipText(DefaultNameFormatter.getInstance().buildDefaultToolTip(primitive)); 64 65 } … … public class SelectionTableCellRenderer extends JLabel implements TableCellRende 71 72 if (value == null) 72 73 return this; 73 74 75 Rectangle cellSize = table.getCellRect(row, column, false); 76 74 77 renderBackground((OsmPrimitive) value); 75 renderPrimitive((OsmPrimitive) value );78 renderPrimitive((OsmPrimitive) value, cellSize); 76 79 return this; 77 80 } 78 81 -
src/org/openstreetmap/josm/tools/ImageProvider.java
diff --git src/org/openstreetmap/josm/tools/ImageProvider.java src/org/openstreetmap/josm/tools/ImageProvider.java index 66d0d6c..f968798 100644
import java.awt.Graphics2D; 11 11 import java.awt.GraphicsEnvironment; 12 12 import java.awt.Image; 13 13 import java.awt.Point; 14 import java.awt.Rectangle; 14 15 import java.awt.RenderingHints; 15 16 import java.awt.Toolkit; 16 17 import java.awt.Transparency; … … import javax.swing.ImageIcon; 55 56 import javax.xml.bind.DatatypeConverter; 56 57 57 58 import org.openstreetmap.josm.Main; 59 import org.openstreetmap.josm.data.osm.OsmPrimitive; 58 60 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 61 import org.openstreetmap.josm.gui.mappaint.ElemStyle; 62 import org.openstreetmap.josm.gui.mappaint.MapImage; 63 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles; 64 import org.openstreetmap.josm.gui.mappaint.NodeElemStyle; 65 import org.openstreetmap.josm.gui.mappaint.Range; 66 import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList; 59 67 import org.openstreetmap.josm.io.CachedFile; 60 68 import org.openstreetmap.josm.plugins.PluginHandler; 61 69 import org.w3c.dom.Element; … … public class ImageProvider { 1268 1276 } 1269 1277 1270 1278 /** 1279 * @param primitive Object for which an icon shall be fetched. The icon is chosen based on tags. 1280 * @param iconSize Target size of icon. Icon is padded if required. 1281 * @return Icon for {@code primitive} that fits in cell. 1282 */ 1283 public static ImageIcon getPadded(OsmPrimitive primitive, Rectangle iconSize) { 1284 // Check if the current styles have special icon for tagged nodes. 1285 if (primitive instanceof org.openstreetmap.josm.data.osm.Node) { 1286 Pair<StyleList, Range> nodeStyles = MapPaintStyles.getStyles().generateStyles(primitive, 100, false); 1287 for (ElemStyle style : nodeStyles.a) { 1288 if (style instanceof NodeElemStyle) { 1289 NodeElemStyle nodeStyle = (NodeElemStyle) style; 1290 MapImage icon = nodeStyle.mapImage; 1291 if (icon != null) { 1292 int backgroundWidth = iconSize.height; 1293 int backgroundHeight = iconSize.height; 1294 int iconWidth = icon.getWidth(); 1295 int iconHeight = icon.getHeight(); 1296 BufferedImage image = new BufferedImage(backgroundWidth, backgroundHeight, 1297 BufferedImage.TYPE_INT_ARGB); 1298 double scaleFactor = Math.min(backgroundWidth / (double) iconWidth, backgroundHeight 1299 / (double) iconHeight); 1300 BufferedImage iconImage = icon.getImage(false); 1301 Image scaledIcon; 1302 final int scaledWidth; 1303 final int scaledHeight; 1304 if (scaleFactor < 1) { 1305 // Scale icon such that it fits on background. 1306 scaledWidth = (int) (iconWidth * scaleFactor); 1307 scaledHeight = (int) (iconHeight * scaleFactor); 1308 scaledIcon = iconImage.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH); 1309 } else { 1310 // Use original size, don't upscale. 1311 scaledWidth = iconWidth; 1312 scaledHeight = iconHeight; 1313 scaledIcon = iconImage; 1314 } 1315 image.getGraphics().drawImage(scaledIcon, (backgroundWidth - scaledWidth) / 2, 1316 (backgroundHeight - scaledHeight) / 2, null); 1317 1318 return new ImageIcon(image); 1319 } 1320 } 1321 } 1322 } 1323 1324 // Use generic default icon. 1325 return ImageProvider.get(primitive.getDisplayType()); 1326 } 1327 1328 /** 1271 1329 * Constructs an image from the given SVG data. 1272 1330 * @param svg the SVG data 1273 1331 * @param dim the desired image dimension
