106 lines
No EOL
2.8 KiB
JavaScript
106 lines
No EOL
2.8 KiB
JavaScript
/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license.
|
|
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the full
|
|
* text of the license. */
|
|
/**
|
|
* @class
|
|
*/
|
|
OpenLayers.Icon = Class.create();
|
|
OpenLayers.Icon.prototype = {
|
|
|
|
/** image url
|
|
* @type String */
|
|
url: null,
|
|
|
|
/** @type OpenLayers.Size */
|
|
size:null,
|
|
|
|
/** distance in pixels to offset the image when being rendered
|
|
* @type OpenLayers.Pixel */
|
|
offset: null,
|
|
|
|
/** Function to calculate the offset (based on the size)
|
|
* @type OpenLayers.Pixel */
|
|
calculateOffset: null,
|
|
|
|
/** @type DOMElement */
|
|
imageDiv: null,
|
|
|
|
/** @type OpenLayers.Pixel */
|
|
px: null,
|
|
|
|
/**
|
|
* @constructor
|
|
*
|
|
* @param {String} url
|
|
* @param {OpenLayers.Size} size
|
|
* @param {Function} calculateOffset
|
|
*/
|
|
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(0,0);
|
|
this.calculateOffset = calculateOffset;
|
|
|
|
this.imageDiv = OpenLayers.Util.createAlphaImageDiv();
|
|
},
|
|
|
|
destroy: function() {
|
|
this.imageDiv = null;
|
|
},
|
|
|
|
/**
|
|
* @returns A fresh copy of the icon.
|
|
* @type OpenLayers.Icon
|
|
*/
|
|
clone: function() {
|
|
return new OpenLayers.Icon(this.size, this.url, this.offset);
|
|
},
|
|
|
|
/**
|
|
* @param {OpenLayers.Size} size
|
|
*/
|
|
setSize: function(size) {
|
|
if (size != null) {
|
|
this.size = size;
|
|
}
|
|
this.draw();
|
|
},
|
|
|
|
/**
|
|
* @param {OpenLayers.Pixel} px
|
|
*
|
|
* @return A new DOM Image of this icon set at the location passed-in
|
|
* @type DOMElement
|
|
*/
|
|
draw: function(px) {
|
|
OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv,
|
|
null,
|
|
null,
|
|
this.size,
|
|
this.url,
|
|
"absolute");
|
|
this.moveTo(px);
|
|
return this.imageDiv;
|
|
},
|
|
|
|
/**
|
|
* @param {OpenLayers.Pixel} px
|
|
*/
|
|
moveTo: function (px) {
|
|
//if no px passed in, use stored location
|
|
if (px != null) {
|
|
this.px = px;
|
|
}
|
|
|
|
if ((this.px != null) && (this.imageDiv != null)) {
|
|
if (this.calculateOffset) {
|
|
this.offset = this.calculateOffset(this.size);
|
|
}
|
|
var offsetPx = this.px.offset(this.offset);
|
|
OpenLayers.Util.modifyAlphaImageDiv(this.imageDiv, null, offsetPx);
|
|
}
|
|
},
|
|
|
|
/** @final @type String */
|
|
CLASS_NAME: "OpenLayers.Icon"
|
|
}; |