From: Cameron S. <cam...@us...> - 2001-11-21 03:09:24
|
Update of /cvsroot/geotools/geotools/src/uk/ac/leeds/ccg/geotools In directory usw-pr-cvs1:/tmp/cvs-serv22670 Modified Files: ImageMarker.java Log Message: Provide an interface which allows ImageMarker to handle it's own ImageObserver events and send notifyLayerChangedListeners instead Index: ImageMarker.java =================================================================== RCS file: /cvsroot/geotools/geotools/src/uk/ac/leeds/ccg/geotools/ImageMarker.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ImageMarker.java 2001/02/21 15:02:15 1.1 --- ImageMarker.java 2001/11/21 03:09:21 1.2 *************** *** 4,41 **** import java.awt.image.*; /** ! * ImageMarker * @author Pet...@co... **/ ! public class ImageMarker implements uk.ac.leeds.ccg.geotools.Marker { ! Image mkOffImage,mkOnImage; ImageObserver imgObserver; ! public ImageMarker(Image mkOffImg, Image mkOnImg, ImageObserver imgOb){ ! this.mkOffImage=mkOffImg; ! this.mkOnImage=mkOnImg; this.imgObserver=imgOb; } public void paintScaled(GeoGraphics gg,GeoPoint p,int size) { Scaler s = gg.getScale(); - ShadeStyle st = gg.getStyle(); int mid[] = s.toGraphics(p); Graphics g = gg.getGraphics(); ! int h = mkOffImage.getHeight(imgObserver); ! int w = mkOffImage.getWidth(imgObserver); int x = mid[0]-w/2; int y = mid[1]-h/2; ! g.drawImage(mkOffImage,x,y,imgObserver); } public void paintHighlight(Graphics g,GeoPoint p,int size,Scaler scale,ShadeStyle style) { int mid[] = scale.toGraphics(p); ! int h = mkOnImage.getHeight(imgObserver); ! int w = mkOnImage.getWidth(imgObserver); int x = mid[0]-w/2; int y = mid[1]-h/2; ! g.drawImage(mkOnImage,x,y,imgObserver); ! } ! } \ No newline at end of file --- 4,106 ---- import java.awt.image.*; /** ! * ImageMarker creates a marker icon out of images passed in as parameters. ! * The (x,y) point provided is used as the center point of the icon. * @author Pet...@co... + * @author <a href="mailto:ca...@sh...">Cameron Shorter</a> **/ ! public class ImageMarker implements ! uk.ac.leeds.ccg.geotools.Marker, ! ImageObserver { ! boolean DEBUG=true; ! // image[0] = normal image ! // image[1] = highlighted image ! Image marker[]=new Image[2]; ImageObserver imgObserver; + Layer layer=null; + boolean layerNotified[]={false,false}; ! /** ! * Initialise the class, providing an ImageObserver to notify if the icons ! * have not been loaded when we first try to draw it. ! * @param normalImage Icon to use normally ! * @param highlightedImage Icon to use during hover-over mode ! */ ! public ImageMarker(Image normalImage, Image highlightedImage, ImageObserver imgOb){ ! this.marker[0]=normalImage; ! this.marker[1]=highlightedImage; this.imgObserver=imgOb; + if(DEBUG)System.out.println("ImageMarker1 created"); + } + + /** + * Initialise the class, if the icons are not ready to be drawn when first + * called, a notifyLayerChangedListeners event is sent when the icons are + * loaded. + * @param normalImage Icon to use normally + * @param highlightedImage Icon to use during hover-over mode + */ + public ImageMarker(Image normalImage, Image highlightedImage, Layer layer){ + this.marker[0]=normalImage; + this.marker[1]=highlightedImage; + this.imgObserver=this; + this.layer=layer; + if(DEBUG)System.out.println("ImageMarker2 created for layer="+layer); } + /** + * Draw the normal icon at the location specified. + */ public void paintScaled(GeoGraphics gg,GeoPoint p,int size) { Scaler s = gg.getScale(); int mid[] = s.toGraphics(p); Graphics g = gg.getGraphics(); ! int h = marker[0].getHeight(imgObserver); ! int w = marker[0].getWidth(imgObserver); int x = mid[0]-w/2; int y = mid[1]-h/2; ! g.drawImage(marker[0],x,y,imgObserver); } + /** + * Draw the highlighted icon at the location specified. + */ public void paintHighlight(Graphics g,GeoPoint p,int size,Scaler scale,ShadeStyle style) { int mid[] = scale.toGraphics(p); ! int h = marker[1].getHeight(imgObserver); ! int w = marker[1].getWidth(imgObserver); int x = mid[0]-w/2; int y = mid[1]-h/2; ! g.drawImage(marker[1],x,y,imgObserver); ! } ! /** ! * If we requested to draw this image and it was not ready, then this method ! * will be called - sends a LayerChangedEvent if layer has been initialised. ! */ ! public boolean imageUpdate( ! Image img, ! int infoflags, ! int x, ! int y, ! int width, ! int height) ! { ! int imageId=0; ! for (int i=0;i<=1;i++){ ! if(img==marker[i]){ ! imageId=i; ! break; ! } ! } ! ! boolean done = ((infoflags & (ERROR | FRAMEBITS | ALLBITS)) != 0); ! if (done && (layer!=null)&&(!layerNotified[imageId])){ ! if(DEBUG)System.out.println( ! "ImageMarker: Send notifyLayerChangedListeners for layer="+layer); ! layerNotified[imageId]=true; ! layer.notifyLayerChangedListeners(LayerChangedEvent.DATA); ! } ! return !layerNotified[imageId]; ! } ! } |