package games.strategy.triplea.image; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import java.util.prefs.Preferences; import javax.imageio.ImageIO; import games.strategy.debug.ClientLogger; import games.strategy.triplea.Constants; import games.strategy.triplea.ResourceLoader; import games.strategy.ui.Util; /** * Responsible for drawing countries on the map. * Is not responsible for drawing things on top of the map, such as units, routes etc. */ public class MapImage { private static Image loadImage(final ResourceLoader loader, final String name) { final URL mapFileUrl = loader.getResource(name); if (mapFileUrl == null) { throw new IllegalStateException("resource not found:" + name); } try { return ImageIO.read(mapFileUrl); } catch (final IOException e) { ClientLogger.logQuietly(e); throw new IllegalStateException(e.getMessage()); } } private BufferedImage m_smallMapImage; private static Font PROPERTY_MAP_FONT = null; private static Color PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR = null; private static Color PROPERTY_UNIT_COUNT_COLOR = null; private static Color PROPERTY_UNIT_FACTORY_DAMAGE_COLOR = null; private static Color PROPERTY_UNIT_HIT_DAMAGE_COLOR = null; private static final String PROPERTY_MAP_FONT_SIZE_STRING = "PROPERTY_MAP_FONT_SIZE"; private static final String PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR_STRING = "PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR"; private static final String PROPERTY_UNIT_COUNT_COLOR_STRING = "PROPERTY_UNIT_COUNT_COLOR"; private static final String PROPERTY_UNIT_FACTORY_DAMAGE_COLOR_STRING = "PROPERTY_UNIT_FACTORY_DAMAGE_COLOR"; private static final String PROPERTY_UNIT_HIT_DAMAGE_COLOR_STRING = "PROPERTY_UNIT_HIT_DAMAGE_COLOR"; public static Font getPropertyMapFont() { if (PROPERTY_MAP_FONT == null) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); PROPERTY_MAP_FONT = new Font("Ariel", Font.BOLD, pref.getInt(PROPERTY_MAP_FONT_SIZE_STRING, 12)); } return PROPERTY_MAP_FONT; } public static Color getPropertyTerritoryNameAndPUAndCommentcolor() { if (PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR == null) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR = new Color(pref.getInt(PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR_STRING, Color.black.getRGB())); } return PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR; } public static Color getPropertyUnitCountColor() { if (PROPERTY_UNIT_COUNT_COLOR == null) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); PROPERTY_UNIT_COUNT_COLOR = new Color(pref.getInt(PROPERTY_UNIT_COUNT_COLOR_STRING, Color.white.getRGB())); } return PROPERTY_UNIT_COUNT_COLOR; } public static Color getPropertyUnitFactoryDamageColor() { if (PROPERTY_UNIT_FACTORY_DAMAGE_COLOR == null) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); PROPERTY_UNIT_FACTORY_DAMAGE_COLOR = new Color(pref.getInt(PROPERTY_UNIT_FACTORY_DAMAGE_COLOR_STRING, Color.black.getRGB())); } return PROPERTY_UNIT_FACTORY_DAMAGE_COLOR; } public static Color getPropertyUnitHitDamageColor() { if (PROPERTY_UNIT_HIT_DAMAGE_COLOR == null) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); PROPERTY_UNIT_HIT_DAMAGE_COLOR = new Color(pref.getInt(PROPERTY_UNIT_HIT_DAMAGE_COLOR_STRING, Color.black.getRGB())); } return PROPERTY_UNIT_HIT_DAMAGE_COLOR; } public static void setPropertyMapFont(final Font font) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.putInt(PROPERTY_MAP_FONT_SIZE_STRING, font.getSize()); PROPERTY_MAP_FONT = font; } public static void setPropertyTerritoryNameAndPUAndCommentcolor(final Color color) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.putInt(PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR_STRING, color.getRGB()); PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR = color; } public static void setPropertyUnitCountColor(final Color color) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.putInt(PROPERTY_UNIT_COUNT_COLOR_STRING, color.getRGB()); PROPERTY_UNIT_COUNT_COLOR = color; } public static void setPropertyUnitFactoryDamageColor(final Color color) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.putInt(PROPERTY_UNIT_FACTORY_DAMAGE_COLOR_STRING, color.getRGB()); PROPERTY_UNIT_FACTORY_DAMAGE_COLOR = color; } public static void setPropertyUnitHitDamageColor(final Color color) { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.putInt(PROPERTY_UNIT_HIT_DAMAGE_COLOR_STRING, color.getRGB()); PROPERTY_UNIT_HIT_DAMAGE_COLOR = color; } public static void resetPropertyMapFont() { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.remove(PROPERTY_MAP_FONT_SIZE_STRING); PROPERTY_MAP_FONT = new Font("Ariel", Font.BOLD, 12); } public static void resetPropertyTerritoryNameAndPUAndCommentcolor() { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.remove(PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR_STRING); PROPERTY_TERRITORY_NAME_AND_PU_AND_COMMENT_COLOR = Color.black; } public static void resetPropertyUnitCountColor() { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.remove(PROPERTY_UNIT_COUNT_COLOR_STRING); PROPERTY_UNIT_COUNT_COLOR = Color.white; } public static void resetPropertyUnitFactoryDamageColor() { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.remove(PROPERTY_UNIT_FACTORY_DAMAGE_COLOR_STRING); PROPERTY_UNIT_FACTORY_DAMAGE_COLOR = Color.black; } public static void resetPropertyUnitHitDamageColor() { final Preferences pref = Preferences.userNodeForPackage(MapImage.class); pref.remove(PROPERTY_UNIT_HIT_DAMAGE_COLOR_STRING); PROPERTY_UNIT_HIT_DAMAGE_COLOR = Color.black; } /** Creates a new instance of MapImage. */ public MapImage() {} public BufferedImage getSmallMapImage() { return m_smallMapImage; } public void loadMaps(final ResourceLoader loader) { final Image smallFromFile = loadImage(loader, Constants.SMALL_MAP_FILENAME); m_smallMapImage = Util.createImage(smallFromFile.getWidth(null), smallFromFile.getHeight(null), false); final Graphics g = m_smallMapImage.getGraphics(); g.drawImage(smallFromFile, 0, 0, null); g.dispose(); smallFromFile.flush(); } }