--- /dev/null
+/* 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"
+};
\ No newline at end of file