You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.0 KiB
139 lines
3.0 KiB
define([ |
|
"dojo/_base/declare", |
|
"dojo/_base/connect", |
|
"dojo/dom-style", |
|
"dojox/gfx", |
|
"dojox/gfx/matrix", |
|
"./Feature", |
|
"./Layer" |
|
], function(declare, connect, style, gfx, matrix, Feature, Layer){ |
|
|
|
return declare("dojox.geo.openlayers.GfxLayer", Layer, { |
|
// summary: |
|
// A layer dedicated to render dojox.geo.openlayers.GeometryFeature |
|
// description: |
|
// A layer class for rendering geometries as dojox.gfx.Shape objects. |
|
// This layer class accepts Features which encapsulates graphic objects to be added to the map. |
|
// All objects should be added to this group. |
|
// tags: |
|
// private |
|
_viewport: null, |
|
|
|
constructor: function(name, options){ |
|
// summary: |
|
// Constructs a new GFX layer. |
|
var s = gfx.createSurface(this.olLayer.div, 100, 100); |
|
this._surface = s; |
|
var vp; |
|
if(options && options.viewport){ |
|
vp = options.viewport; |
|
}else{ |
|
vp = s.createGroup(); |
|
} |
|
this.setViewport(vp); |
|
connect.connect(this.olLayer, "onMapResize", this, "onMapResize"); |
|
this.olLayer.getDataExtent = this.getDataExtent; |
|
}, |
|
|
|
getViewport: function(){ |
|
// summary: |
|
// Gets the viewport |
|
// tags: |
|
// internal |
|
return this._viewport; |
|
}, |
|
|
|
setViewport: function(g){ |
|
// summary: |
|
// Sets the viewport |
|
// g: dojox.gfx.Group |
|
// tags: |
|
// internal |
|
if(this._viewport){ |
|
this._viewport.removeShape(); |
|
} |
|
this._viewport = g; |
|
this._surface.add(g); |
|
}, |
|
|
|
onMapResize: function(){ |
|
// summary: |
|
// Called when map is resized. |
|
// tags: |
|
// protected |
|
this._surfaceSize(); |
|
}, |
|
|
|
setMap: function(map){ |
|
// summary: |
|
// Sets the map for this layer. |
|
// tags: |
|
// protected |
|
this.inherited(arguments); |
|
this._surfaceSize(); |
|
}, |
|
|
|
getDataExtent: function(){ |
|
// summary: |
|
// Get data extent |
|
// tags: |
|
// private |
|
var ret = this._surface.getDimensions(); |
|
return ret; |
|
}, |
|
|
|
getSurface: function(){ |
|
// summary: |
|
// Get the underlying dojox.gfx.Surface |
|
// returns: |
|
// The dojox.gfx.Surface this layer uses to draw its GFX rendering. |
|
return this._surface; // dojox.gfx.Surface |
|
}, |
|
|
|
_surfaceSize: function(){ |
|
// summary: |
|
// Recomputes the surface size when being resized. |
|
// tags: |
|
// private |
|
var s = this.olLayer.map.getSize(); |
|
this._surface.setDimensions(s.w, s.h); |
|
}, |
|
|
|
moveTo: function(event){ |
|
// summary: |
|
// Called when this layer is moved or zoomed. |
|
// event: |
|
// The event |
|
var s = style.get(this.olLayer.map.layerContainerDiv); |
|
var left = parseInt(s.left); |
|
var top = parseInt(s.top); |
|
|
|
if(event.zoomChanged || left || top){ |
|
var d = this.olLayer.div; |
|
|
|
style.set(d, { |
|
left: -left + "px", |
|
top: -top + "px" |
|
}); |
|
|
|
if(this._features == null){ |
|
return; |
|
} |
|
var vp = this.getViewport(); |
|
|
|
vp.setTransform(matrix.translate(left, top)); |
|
|
|
this.inherited(arguments); |
|
|
|
} |
|
}, |
|
|
|
added: function(){ |
|
// summary: |
|
// Called when added to a map. |
|
this.inherited(arguments); |
|
this._surfaceSize(); |
|
} |
|
|
|
}); |
|
});
|
|
|