package com.opendoorlogistics.core.gis.map.background;
import java.awt.Dimension;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import com.opendoorlogistics.codefromweb.jxmapviewer2.fork.swingx.mapviewer.GeoPosition;
import com.opendoorlogistics.codefromweb.jxmapviewer2.fork.swingx.mapviewer.TileFactoryInfo;
/**
* An ODLTileFactoryDecorator allows a fade to be applied to a tile factory
* @author Phil
*
*/
public class ODLTileFactoryDecorator implements ODLTileFactory{
private final ODLTileFactory factory;
private final FadeConfig fadeConfig;
public ODLTileFactoryDecorator(ODLTileFactory factory, FadeConfig fadeConfig) {
this.factory = factory;
this.fadeConfig = fadeConfig;
}
public MapTile getMapTile(int x, int y, int zoom) {
MapTile original= factory.getMapTile(x, y, zoom);
if(fadeConfig!=null){
return new MapTile() {
@Override
public boolean isLoaded() {
return original.isLoaded();
}
@Override
public int getZoom() {
return original.getZoom();
}
@Override
public int getY() {
return original.getY();
}
@Override
public int getX() {
return original.getX();
}
@Override
public BufferedImage getImage() {
BufferedImage img = original.getImage();
return img!=null ? BackgroundMapUtils.fadeWithGreyscale(img, fadeConfig):null;
}
};
}
return original;
}
public void addLoadedListener(MapTileLoadedListener listener) {
factory.addLoadedListener(listener);
}
public void removeLoadedListener(MapTileLoadedListener listener) {
factory.removeLoadedListener(listener);
}
public int getTileSize(int zoom) {
return factory.getTileSize(zoom);
}
public Dimension getMapSize(int zoom) {
return factory.getMapSize(zoom);
}
public GeoPosition pixelToGeo(Point2D pixelCoordinate, int zoom) {
return factory.pixelToGeo(pixelCoordinate, zoom);
}
public Point2D geoToPixel(GeoPosition c, int zoomLevel) {
return factory.geoToPixel(c, zoomLevel);
}
public TileFactoryInfo getInfo() {
return factory.getInfo();
}
public void dispose() {
factory.dispose();
}
public boolean isRenderedOffline() {
return factory.isRenderedOffline();
}
public BufferedImage renderSynchronously(int x, int y, int zoom) {
// get the image and apply the fade
BufferedImage img= factory.renderSynchronously(x, y, zoom);
return img!=null ? BackgroundMapUtils.fadeWithGreyscale(img, fadeConfig):null;
}
}