git-svn-id: http://svn.openlayers.org/trunk/openlayers@6251 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
199 lines
5.0 KiB
JavaScript
199 lines
5.0 KiB
JavaScript
/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
|
|
* license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the
|
|
* full text of the license. */
|
|
|
|
|
|
/**
|
|
* Class: OpenLayers.Icon
|
|
*
|
|
* The icon represents a graphical icon on the screen. Typically used in
|
|
* conjunction with a <OpenLayers.Marker> to represent markers on a screen.
|
|
*
|
|
* An icon has a url, size and position. It also contains an offset which
|
|
* allows the center point to be represented correctly. This can be
|
|
* provided either as a fixed offset or a function provided to calculate
|
|
* the desired offset.
|
|
*
|
|
*/
|
|
OpenLayers.Icon = OpenLayers.Class({
|
|
|
|
/**
|
|
* Property: url
|
|
* {String} image url
|
|
*/
|
|
url: null,
|
|
|
|
/**
|
|
* Property: size
|
|
* {<OpenLayers.Size>}
|
|
*/
|
|
size: null,
|
|
|
|
/**
|
|
* Property: offset
|
|
* {<OpenLayers.Pixel>} distance in pixels to offset the image when being rendered
|
|
*/
|
|
offset: null,
|
|
|
|
/**
|
|
* Property: calculateOffset
|
|
* {<OpenLayers.Pixel>} Function to calculate the offset (based on the size)
|
|
*/
|
|
calculateOffset: null,
|
|
|
|
/**
|
|
* Property: imageDiv
|
|
* {DOMElement}
|
|
*/
|
|
imageDiv: null,
|
|
|
|
/**
|
|
* Property: px
|
|
* {<OpenLayers.Pixel>}
|
|
*/
|
|
px: null,
|
|
|
|
/**
|
|
* Constructor: OpenLayers.Icon
|
|
* Creates an icon, which is an image tag in a div.
|
|
*
|
|
* url - {String}
|
|
* size - {<OpenLayers.Size>}
|
|
* offset - {<OpenLayers.Pixel>}
|
|
* calculateOffset - {Function}
|
|
*/
|
|
initialize: function(url, size, offset, calculateOffset) {
|
|
this.url = url;
|
|
this.size = (size) ? size : new OpenLayers.Size(20,20);
|
|
this.offset = offset ? offset : new OpenLayers.Pixel(-(this.size.w/2), -(this.size.h/2));
|
|
this.calculateOffset = calculateOffset;
|
|
|
|
var id = OpenLayers.Util.createUniqueID("OL_Icon_");
|
|
this.imageDiv = OpenLayers.Util.createAlphaImageDiv(id);
|
|
},
|
|
|
|
/**
|
|
* Method: destroy
|
|
* Nullify references and remove event listeners to prevent circular
|
|
* references and memory leaks
|
|
*/
|
|
destroy: function() {
|
|
OpenLayers.Event.stopObservingElement(this.imageDiv.firstChild);
|
|
this.imageDiv.innerHTML = "";
|
|
this.imageDiv = null;
|
|
},
|
|
|
|
/**
|
|
* Method: clone
|
|
*
|
|
* Returns:
|
|
* {<OpenLayers.Icon>} A fresh copy of the icon.
|
|
*/
|
|
clone: function() {
|
|
return new OpenLayers.Icon(this.url,
|
|
this.size,
|
|
this.offset,
|
|
this.calculateOffset);
|
|
},
|
|
|
|
/**
|
|
* Method: setSize
|
|
*
|
|
* Parameters:
|
|
* size - {<OpenLayers.Size>}
|
|
*/
|
|
setSize: function(size) {
|
|
if (size != null) {
|
|
this.size = size;
|
|
}
|
|
this.draw();
|
|
},
|
|
|
|
/**
|
|
* Method: setUrl
|
|
*
|
|
* Parameters:
|
|
* url - {String}
|
|
*/
|
|
setUrl: function(url) {
|
|
if (url != null) {
|
|
this.url = url;
|
|
}
|
|
this.draw();
|
|
},
|
|
|
|
/**
|
|
* Method: draw
|
|
* Move the div to the given pixel.
|
|
*
|
|
* Parameters:
|
|
* px - {<OpenLayers.Pixel>}
|
|
*
|
|
* Returns:
|
|
* {DOMElement} A new DOM Image of this icon set at the location passed-in
|
|
*/
|
|
draw: function(px) {
|
|
OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv,
|
|
null,
|
|
null,
|
|
this.size,
|
|
this.url,
|
|
"absolute");
|
|
this.moveTo(px);
|
|
return this.imageDiv;
|
|
},
|
|
|
|
|
|
/**
|
|
* Method: setOpacity
|
|
* Change the icon's opacity
|
|
*
|
|
* Parameters:
|
|
* opacity - {float}
|
|
*/
|
|
setOpacity: function(opacity) {
|
|
OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, null, null,
|
|
null, null, null, null, opacity);
|
|
|
|
},
|
|
|
|
/**
|
|
* Method: moveTo
|
|
* move icon to passed in px.
|
|
*
|
|
* Parameters:
|
|
* px - {<OpenLayers.Pixel>}
|
|
*/
|
|
moveTo: function (px) {
|
|
//if no px passed in, use stored location
|
|
if (px != null) {
|
|
this.px = px;
|
|
}
|
|
|
|
if (this.imageDiv != null) {
|
|
if (this.px == null) {
|
|
this.display(false);
|
|
} else {
|
|
if (this.calculateOffset) {
|
|
this.offset = this.calculateOffset(this.size);
|
|
}
|
|
var offsetPx = this.px.offset(this.offset);
|
|
OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, offsetPx);
|
|
}
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Method: display
|
|
* Hide or show the icon
|
|
*
|
|
* Parameters:
|
|
* display - {Boolean}
|
|
*/
|
|
display: function(display) {
|
|
this.imageDiv.style.display = (display) ? "" : "none";
|
|
},
|
|
|
|
CLASS_NAME: "OpenLayers.Icon"
|
|
});
|