Merge pull request #5072 from tschaub/immediate-api

Add setStyle() and drawGeometry() to the immediate rendering API.
This commit is contained in:
Tim Schaub
2016-03-18 17:18:08 -06:00
20 changed files with 485 additions and 335 deletions
+30 -1
View File
@@ -1,6 +1,35 @@
## Upgrade notes ## Upgrade notes
### v3.15.0 ### <NEXT RELEASE>
#### Immediate rendering API
Listeners for `precompose`, `render`, and `postcompose` receive an event with a `vectorContext` property with methods for immediate vector rendering. The previous geometry drawing methods have been replaced with a single `vectorContext.drawGeometry(geometry)` method. If you were using any of the following experimental methods on the vector context, replace them with `drawGeometry`:
* Removed experimental geometry drawing methods: `drawPointGeometry`, `drawLineStringGeometry`, `drawPolygonGeometry`, `drawMultiPointGeometry`, `drawMultiLineStringGeometry`, `drawMultiPolygonGeometry`, and `drawCircleGeometry` (all have been replaced with `drawGeometry`).
In addition, the previous methods for setting style parts have been replaced with a single `vectorContext.setStyle(style)` method. If you were using any of the following experimental methods on the vector context, replace them with `setStyle`:
* Removed experimental style setting methods: `setFillStrokeStyle`, `setImageStyle`, `setTextStyle` (all have been replaced with `setStyle`).
Below is an example of how the vector context might have been used in the past:
```js
// OLD WAY, NO LONGER SUPPORTED
map.on('postcompose', function(event) {
event.vectorContext.setFillStrokeStyle(style.getFill(), style.getStroke());
event.vectorContext.drawPointGeometry(geometry);
});
```
Here is an example of how you could accomplish the same with the new methods:
```js
// NEW WAY, USE THIS INSTEAD OF THE CODE ABOVE
map.on('postcompose', function(event) {
event.vectorContext.setStyle(style);
event.vectorContext.drawGeometry(geometry);
});
```
#### Removal of `ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK` #### Removal of `ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK`
+20 -16
View File
@@ -25,11 +25,13 @@ var map = new ol.Map({
}) })
}); });
var imageStyle = new ol.style.Circle({ var imageStyle = new ol.style.Style({
radius: 5, image: new ol.style.Circle({
snapToPixel: false, radius: 5,
fill: new ol.style.Fill({color: 'yellow'}), snapToPixel: false,
stroke: new ol.style.Stroke({color: 'red', width: 1}) fill: new ol.style.Fill({color: 'yellow'}),
stroke: new ol.style.Stroke({color: 'red', width: 1})
})
}); });
var headInnerImageStyle = new ol.style.Style({ var headInnerImageStyle = new ol.style.Style({
@@ -40,10 +42,12 @@ var headInnerImageStyle = new ol.style.Style({
}) })
}); });
var headOuterImageStyle = new ol.style.Circle({ var headOuterImageStyle = new ol.style.Style({
radius: 5, image: new ol.style.Circle({
snapToPixel: false, radius: 5,
fill: new ol.style.Fill({color: 'black'}) snapToPixel: false,
fill: new ol.style.Fill({color: 'black'})
})
}); });
var n = 200; var n = 200;
@@ -63,16 +67,16 @@ map.on('postcompose', function(event) {
var y = (R + r) * Math.sin(t) + p * Math.sin((R + r) * t / r); var y = (R + r) * Math.sin(t) + p * Math.sin((R + r) * t / r);
coordinates.push([x, y]); coordinates.push([x, y]);
} }
vectorContext.setImageStyle(imageStyle); vectorContext.setStyle(imageStyle);
vectorContext.drawMultiPointGeometry( vectorContext.drawGeometry(new ol.geom.MultiPoint(coordinates));
new ol.geom.MultiPoint(coordinates), null);
var headPoint = new ol.geom.Point(coordinates[coordinates.length - 1]); var headPoint = new ol.geom.Point(coordinates[coordinates.length - 1]);
var headFeature = new ol.Feature(headPoint);
vectorContext.drawFeature(headFeature, headInnerImageStyle);
vectorContext.setImageStyle(headOuterImageStyle); vectorContext.setStyle(headOuterImageStyle);
vectorContext.drawMultiPointGeometry(headPoint, null); vectorContext.drawGeometry(headPoint);
vectorContext.setStyle(headInnerImageStyle);
vectorContext.drawGeometry(headPoint);
map.render(); map.render();
}); });
+6 -5
View File
@@ -25,13 +25,14 @@ var styleFunction = function(feature) {
if (!style) { if (!style) {
var canvas = var canvas =
/** @type {HTMLCanvasElement} */ (document.createElement('canvas')); /** @type {HTMLCanvasElement} */ (document.createElement('canvas'));
var render = ol.render.toContext( var vectorContext = ol.render.toContext(
/** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d')), /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d')),
{size: [size + 2, size + 2], pixelRatio: size / 10}); {size: [size + 2, size + 2], pixelRatio: size / 10});
render.setFillStrokeStyle( vectorContext.setStyle(new ol.style.Style({
new ol.style.Fill({color: 'rgba(255, 153, 0, 0.4)'}), fill: new ol.style.Fill({color: 'rgba(255, 153, 0, 0.4)'}),
new ol.style.Stroke({color: 'rgba(255, 204, 0, 0.2)', width: 1})); stroke: new ol.style.Stroke({color: 'rgba(255, 204, 0, 0.2)', width: 1})
render.drawPolygonGeometry(new ol.geom.Polygon( }));
vectorContext.drawGeometry(new ol.geom.Polygon(
[[[0, 0], [4, 2], [6, 0], [10, 5], [6, 3], [4, 5], [0, 0]]])); [[[0, 0], [4, 2], [6, 0], [10, 5], [6, 3], [4, 5], [0, 0]]]));
style = new ol.style.Style({ style = new ol.style.Style({
image: new ol.style.Icon({ image: new ol.style.Icon({
+11 -8
View File
@@ -12,6 +12,7 @@ goog.require('ol.source.OSM');
goog.require('ol.source.Vector'); goog.require('ol.source.Vector');
goog.require('ol.style.Circle'); goog.require('ol.style.Circle');
goog.require('ol.style.Stroke'); goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var map = new ol.Map({ var map = new ol.Map({
@@ -67,17 +68,19 @@ function flash(feature) {
var radius = ol.easing.easeOut(elapsedRatio) * 25 + 5; var radius = ol.easing.easeOut(elapsedRatio) * 25 + 5;
var opacity = ol.easing.easeOut(1 - elapsedRatio); var opacity = ol.easing.easeOut(1 - elapsedRatio);
var flashStyle = new ol.style.Circle({ var style = new ol.style.Style({
radius: radius, image: new ol.style.Circle({
snapToPixel: false, radius: radius,
stroke: new ol.style.Stroke({ snapToPixel: false,
color: 'rgba(255, 0, 0, ' + opacity + ')', stroke: new ol.style.Stroke({
width: 1 color: 'rgba(255, 0, 0, ' + opacity + ')',
width: 0.25 + opacity
})
}) })
}); });
vectorContext.setImageStyle(flashStyle); vectorContext.setStyle(style);
vectorContext.drawPointGeometry(flashGeom, null); vectorContext.drawGeometry(flashGeom);
if (elapsed > duration) { if (elapsed > duration) {
ol.Observable.unByKey(listenerKey); ol.Observable.unByKey(listenerKey);
return; return;
+10 -12
View File
@@ -27,12 +27,11 @@ var map = new ol.Map({
}) })
}); });
var defaultStroke = new ol.style.Stroke({ var style = new ol.style.Style({
color: '#EAE911', stroke: new ol.style.Stroke({
width: 2 color: '#EAE911',
}); width: 2
var defaultStyle = new ol.style.Style({ })
stroke: defaultStroke
}); });
var flightsSource; var flightsSource;
@@ -47,14 +46,13 @@ var pointsPerMs = 0.1;
var animateFlights = function(event) { var animateFlights = function(event) {
var vectorContext = event.vectorContext; var vectorContext = event.vectorContext;
var frameState = event.frameState; var frameState = event.frameState;
vectorContext.setFillStrokeStyle(null, defaultStroke); vectorContext.setStyle(style);
var features = flightsSource.getFeatures(); var features = flightsSource.getFeatures();
for (var i = 0; i < features.length; i++) { for (var i = 0; i < features.length; i++) {
var feature = features[i]; var feature = features[i];
if (!feature.get('finished')) { if (!feature.get('finished')) {
// only draw the lines for which the animation has not // only draw the lines for which the animation has not finished yet
// finished yet
var coords = feature.getGeometry().getCoordinates(); var coords = feature.getGeometry().getCoordinates();
var elapsedTime = frameState.time - feature.get('start'); var elapsedTime = frameState.time - feature.get('start');
var elapsedPoints = elapsedTime * pointsPerMs; var elapsedPoints = elapsedTime * pointsPerMs;
@@ -67,10 +65,10 @@ var animateFlights = function(event) {
var currentLine = new ol.geom.LineString(coords.slice(0, maxIndex)); var currentLine = new ol.geom.LineString(coords.slice(0, maxIndex));
// directly draw the line with the vector context // directly draw the line with the vector context
vectorContext.drawLineStringGeometry(currentLine, feature); vectorContext.drawGeometry(currentLine);
} }
} }
// tell OL3 to continue the postcompose animation // tell OL3 to continue the animation
map.render(); map.render();
}; };
@@ -119,7 +117,7 @@ var flightsLayer = new ol.layer.Vector({
// if the animation is still active for a feature, do not // if the animation is still active for a feature, do not
// render the feature with the layer style // render the feature with the layer style
if (feature.get('finished')) { if (feature.get('finished')) {
return defaultStyle; return style;
} else { } else {
return null; return null;
} }
+13 -15
View File
@@ -152,27 +152,26 @@ map.on('click', function(evt) {
displaySnap(evt.coordinate); displaySnap(evt.coordinate);
}); });
var imageStyle = new ol.style.Circle({ var stroke = new ol.style.Stroke({
radius: 5,
fill: null,
stroke: new ol.style.Stroke({
color: 'rgba(255,0,0,0.9)',
width: 1
})
});
var strokeStyle = new ol.style.Stroke({
color: 'rgba(255,0,0,0.9)', color: 'rgba(255,0,0,0.9)',
width: 1 width: 1
})
var style = new ol.style.Style({
stroke: stroke,
image: new ol.style.Circle({
radius: 5,
fill: null,
stroke: stroke
})
}); });
map.on('postcompose', function(evt) { map.on('postcompose', function(evt) {
var vectorContext = evt.vectorContext; var vectorContext = evt.vectorContext;
vectorContext.setStyle(style);
if (point !== null) { if (point !== null) {
vectorContext.setImageStyle(imageStyle); vectorContext.drawGeometry(point);
vectorContext.drawPointGeometry(point);
} }
if (line !== null) { if (line !== null) {
vectorContext.setFillStrokeStyle(null, strokeStyle); vectorContext.drawGeometry(line);
vectorContext.drawLineStringGeometry(line);
} }
}); });
@@ -184,8 +183,7 @@ var featureOverlay = new ol.layer.Vector({
radius: 5, radius: 5,
fill: new ol.style.Fill({ fill: new ol.style.Fill({
color: 'rgba(255,0,0,0.9)' color: 'rgba(255,0,0,0.9)'
}), })
stroke: null
}) })
}) })
}); });
+14 -10
View File
@@ -5,21 +5,25 @@ goog.require('ol.render');
goog.require('ol.style.Circle'); goog.require('ol.style.Circle');
goog.require('ol.style.Fill'); goog.require('ol.style.Fill');
goog.require('ol.style.Stroke'); goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
var canvas = document.getElementById('canvas'); var canvas = document.getElementById('canvas');
var render = ol.render.toContext(canvas.getContext('2d'), {size: [100, 100]}); var vectorContext = ol.render.toContext(canvas.getContext('2d'), {size: [100, 100]});
var fill = new ol.style.Fill({color: 'blue'}); var fill = new ol.style.Fill({color: 'blue'});
var stroke = new ol.style.Stroke({color: 'black'}); var stroke = new ol.style.Stroke({color: 'black'});
render.setFillStrokeStyle(fill, stroke); var style = new ol.style.Style({
render.setImageStyle(new ol.style.Circle({
radius: 10,
fill: fill, fill: fill,
stroke: stroke stroke: stroke,
})); image: new ol.style.Circle({
radius: 10,
fill: fill,
stroke: stroke
})
})
vectorContext.setStyle(style);
render.drawLineStringGeometry(new ol.geom.LineString([[10, 10], [90, 90]])); vectorContext.drawGeometry(new ol.geom.LineString([[10, 10], [90, 90]]));
render.drawPolygonGeometry( vectorContext.drawGeometry(new ol.geom.Polygon([[[2, 2], [98, 2], [2, 98], [2, 2]]]));
new ol.geom.Polygon([[[2, 2], [98, 2], [2, 98], [2, 2]]])); vectorContext.drawGeometry(new ol.geom.Point([88, 88]));
render.drawPointGeometry(new ol.geom.Point([88, 88]));
+12 -13
View File
@@ -96,27 +96,26 @@ map.on('click', function(evt) {
displaySnap(evt.coordinate); displaySnap(evt.coordinate);
}); });
var imageStyle = new ol.style.Circle({ var stroke = new ol.style.Stroke({
radius: 10,
fill: null,
stroke: new ol.style.Stroke({
color: 'rgba(255,255,0,0.9)',
width: 3
})
});
var strokeStyle = new ol.style.Stroke({
color: 'rgba(255,255,0,0.9)', color: 'rgba(255,255,0,0.9)',
width: 3 width: 3
}); });
var style = new ol.style.Style({
stroke: stroke,
image: new ol.style.Circle({
radius: 10,
stroke: stroke
})
});
map.on('postcompose', function(evt) { map.on('postcompose', function(evt) {
var vectorContext = evt.vectorContext; var vectorContext = evt.vectorContext;
vectorContext.setStyle(style);
if (point !== null) { if (point !== null) {
vectorContext.setImageStyle(imageStyle); vectorContext.drawGeometry(point);
vectorContext.drawPointGeometry(point);
} }
if (line !== null) { if (line !== null) {
vectorContext.setFillStrokeStyle(null, strokeStyle); vectorContext.drawGeometry(line);
vectorContext.drawLineStringGeometry(line);
} }
}); });
+2 -2
View File
@@ -442,11 +442,11 @@ ol.Graticule.prototype.handlePostCompose_ = function(e) {
var i, l, line; var i, l, line;
for (i = 0, l = this.meridians_.length; i < l; ++i) { for (i = 0, l = this.meridians_.length; i < l; ++i) {
line = this.meridians_[i]; line = this.meridians_[i];
vectorContext.drawLineStringGeometry(line, null); vectorContext.drawLineString(line, null);
} }
for (i = 0, l = this.parallels_.length; i < l; ++i) { for (i = 0, l = this.parallels_.length; i < l; ++i) {
line = this.parallels_[i]; line = this.parallels_[i];
vectorContext.drawLineStringGeometry(line, null); vectorContext.drawLineString(line, null);
} }
}; };
+1 -1
View File
@@ -16,7 +16,7 @@ goog.require('ol.vec.Mat4');
* var render = ol.render.toContext(canvas.getContext('2d'), * var render = ol.render.toContext(canvas.getContext('2d'),
* { size: [100, 100] }); * { size: [100, 100] });
* render.setFillStrokeStyle(new ol.style.Fill({ color: blue })); * render.setFillStrokeStyle(new ol.style.Fill({ color: blue }));
* render.drawPolygonGeometry( * render.drawPolygon(
* new ol.geom.Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]])); * new ol.geom.Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]]));
* ``` * ```
* *
+101 -89
View File
@@ -10,6 +10,7 @@ goog.require('ol.array');
goog.require('ol.color'); goog.require('ol.color');
goog.require('ol.colorlike'); goog.require('ol.colorlike');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryType');
goog.require('ol.geom.flat.transform'); goog.require('ol.geom.flat.transform');
goog.require('ol.has'); goog.require('ol.has');
goog.require('ol.render.VectorContext'); goog.require('ol.render.VectorContext');
@@ -425,11 +426,11 @@ ol.render.canvas.Immediate.prototype.drawAsync = function(zIndex, callback) {
* Render a circle geometry into the canvas. Rendering is immediate and uses * Render a circle geometry into the canvas. Rendering is immediate and uses
* the current fill and stroke styles. * the current fill and stroke styles.
* *
* @param {ol.geom.Circle} circleGeometry Circle geometry. * @param {ol.geom.Circle} geometry Circle geometry.
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawCircleGeometry = function(circleGeometry) { ol.render.canvas.Immediate.prototype.drawCircle = function(geometry) {
if (!ol.extent.intersects(this.extent_, circleGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
return; return;
} }
if (this.fillState_ || this.strokeState_) { if (this.fillState_ || this.strokeState_) {
@@ -440,7 +441,7 @@ ol.render.canvas.Immediate.prototype.drawCircleGeometry = function(circleGeometr
this.setContextStrokeState_(this.strokeState_); this.setContextStrokeState_(this.strokeState_);
} }
var pixelCoordinates = ol.geom.transformSimpleGeometry2D( var pixelCoordinates = ol.geom.transformSimpleGeometry2D(
circleGeometry, this.transform_, this.pixelCoordinates_); geometry, this.transform_, this.pixelCoordinates_);
var dx = pixelCoordinates[2] - pixelCoordinates[0]; var dx = pixelCoordinates[2] - pixelCoordinates[0];
var dy = pixelCoordinates[3] - pixelCoordinates[1]; var dy = pixelCoordinates[3] - pixelCoordinates[1];
var radius = Math.sqrt(dx * dx + dy * dy); var radius = Math.sqrt(dx * dx + dy * dy);
@@ -456,7 +457,61 @@ ol.render.canvas.Immediate.prototype.drawCircleGeometry = function(circleGeometr
} }
} }
if (this.text_ !== '') { if (this.text_ !== '') {
this.drawText_(circleGeometry.getCenter(), 0, 2, 2); this.drawText_(geometry.getCenter(), 0, 2, 2);
}
};
/**
* Set the rendering style. Note that since this is an immediate rendering API,
* any `zIndex` on the provided style will be ignored.
*
* @param {ol.style.Style} style The rendering style.
* @api
*/
ol.render.canvas.Immediate.prototype.setStyle = function(style) {
this.setFillStrokeStyle(style.getFill(), style.getStroke());
this.setImageStyle(style.getImage());
this.setTextStyle(style.getText());
};
/**
* Render a geometry into the canvas. Call
* {@link ol.render.canvas.Immediate#setStyle} first to set the rendering style.
*
* @param {ol.geom.Geometry|ol.render.Feature} geometry The geometry to render.
* @api
*/
ol.render.canvas.Immediate.prototype.drawGeometry = function(geometry) {
var type = geometry.getType();
switch (type) {
case ol.geom.GeometryType.POINT:
this.drawPoint(/** @type {ol.geom.Point} */ (geometry));
break;
case ol.geom.GeometryType.LINE_STRING:
this.drawLineString(/** @type {ol.geom.LineString} */ (geometry));
break;
case ol.geom.GeometryType.POLYGON:
this.drawPolygon(/** @type {ol.geom.Polygon} */ (geometry));
break;
case ol.geom.GeometryType.MULTI_POINT:
this.drawMultiPoint(/** @type {ol.geom.MultiPoint} */ (geometry));
break;
case ol.geom.GeometryType.MULTI_LINE_STRING:
this.drawMultiLineString(/** @type {ol.geom.MultiLineString} */ (geometry));
break;
case ol.geom.GeometryType.MULTI_POLYGON:
this.drawMultiPolygon(/** @type {ol.geom.MultiPolygon} */ (geometry));
break;
case ol.geom.GeometryType.GEOMETRY_COLLECTION:
this.drawGeometryCollection(/** @type {ol.geom.GeometryCollection} */ (geometry));
break;
case ol.geom.GeometryType.CIRCLE:
this.drawCircle(/** @type {ol.geom.Circle} */ (geometry));
break;
default:
goog.asserts.fail('Unsupported geometry type: ' + type);
} }
}; };
@@ -486,11 +541,8 @@ ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) {
render.setFillStrokeStyle(style.getFill(), style.getStroke()); render.setFillStrokeStyle(style.getFill(), style.getStroke());
render.setImageStyle(style.getImage()); render.setImageStyle(style.getImage());
render.setTextStyle(style.getText()); render.setTextStyle(style.getText());
var renderGeometry = goog.asserts.assert(geometry, 'geometry must be truthy');
ol.render.canvas.Immediate.GEOMETRY_RENDERERS_[geometry.getType()]; render.drawGeometry(geometry);
goog.asserts.assert(renderGeometry !== undefined,
'renderGeometry should be defined');
renderGeometry.call(render, geometry, null);
}); });
}; };
@@ -499,20 +551,13 @@ ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) {
* Render a GeometryCollection to the canvas. Rendering is immediate and * Render a GeometryCollection to the canvas. Rendering is immediate and
* uses the current styles appropriate for each geometry in the collection. * uses the current styles appropriate for each geometry in the collection.
* *
* @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry * @param {ol.geom.GeometryCollection} geometry Geometry collection.
* collection.
* @param {ol.Feature} feature Feature.
*/ */
ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, feature) { ol.render.canvas.Immediate.prototype.drawGeometryCollection = function(geometry) {
var geometries = geometryCollectionGeometry.getGeometriesArray(); var geometries = geometry.getGeometriesArray();
var i, ii; var i, ii;
for (i = 0, ii = geometries.length; i < ii; ++i) { for (i = 0, ii = geometries.length; i < ii; ++i) {
var geometry = geometries[i]; this.drawGeometry(geometries[i]);
var geometryRenderer =
ol.render.canvas.Immediate.GEOMETRY_RENDERERS_[geometry.getType()];
goog.asserts.assert(geometryRenderer !== undefined,
'geometryRenderer should be defined');
geometryRenderer.call(this, geometry, feature);
} }
}; };
@@ -521,12 +566,11 @@ ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry = function(g
* Render a Point geometry into the canvas. Rendering is immediate and uses * Render a Point geometry into the canvas. Rendering is immediate and uses
* the current style. * the current style.
* *
* @param {ol.geom.Point|ol.render.Feature} pointGeometry Point geometry. * @param {ol.geom.Point|ol.render.Feature} geometry Point geometry.
* @api
*/ */
ol.render.canvas.Immediate.prototype.drawPointGeometry = function(pointGeometry) { ol.render.canvas.Immediate.prototype.drawPoint = function(geometry) {
var flatCoordinates = pointGeometry.getFlatCoordinates(); var flatCoordinates = geometry.getFlatCoordinates();
var stride = pointGeometry.getStride(); var stride = geometry.getStride();
if (this.image_) { if (this.image_) {
this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride); this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);
} }
@@ -540,13 +584,11 @@ ol.render.canvas.Immediate.prototype.drawPointGeometry = function(pointGeometry)
* Render a MultiPoint geometry into the canvas. Rendering is immediate and * Render a MultiPoint geometry into the canvas. Rendering is immediate and
* uses the current style. * uses the current style.
* *
* @param {ol.geom.MultiPoint|ol.render.Feature} multiPointGeometry MultiPoint * @param {ol.geom.MultiPoint|ol.render.Feature} geometry MultiPoint geometry.
* geometry.
* @api
*/ */
ol.render.canvas.Immediate.prototype.drawMultiPointGeometry = function(multiPointGeometry) { ol.render.canvas.Immediate.prototype.drawMultiPoint = function(geometry) {
var flatCoordinates = multiPointGeometry.getFlatCoordinates(); var flatCoordinates = geometry.getFlatCoordinates();
var stride = multiPointGeometry.getStride(); var stride = geometry.getStride();
if (this.image_) { if (this.image_) {
this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride); this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);
} }
@@ -560,25 +602,23 @@ ol.render.canvas.Immediate.prototype.drawMultiPointGeometry = function(multiPoin
* Render a LineString into the canvas. Rendering is immediate and uses * Render a LineString into the canvas. Rendering is immediate and uses
* the current style. * the current style.
* *
* @param {ol.geom.LineString|ol.render.Feature} lineStringGeometry Line * @param {ol.geom.LineString|ol.render.Feature} geometry LineString geometry.
* string geometry.
* @api
*/ */
ol.render.canvas.Immediate.prototype.drawLineStringGeometry = function(lineStringGeometry) { ol.render.canvas.Immediate.prototype.drawLineString = function(geometry) {
if (!ol.extent.intersects(this.extent_, lineStringGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
return; return;
} }
if (this.strokeState_) { if (this.strokeState_) {
this.setContextStrokeState_(this.strokeState_); this.setContextStrokeState_(this.strokeState_);
var context = this.context_; var context = this.context_;
var flatCoordinates = lineStringGeometry.getFlatCoordinates(); var flatCoordinates = geometry.getFlatCoordinates();
context.beginPath(); context.beginPath();
this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length, this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length,
lineStringGeometry.getStride(), false); geometry.getStride(), false);
context.stroke(); context.stroke();
} }
if (this.text_ !== '') { if (this.text_ !== '') {
var flatMidpoint = lineStringGeometry.getFlatMidpoint(); var flatMidpoint = geometry.getFlatMidpoint();
this.drawText_(flatMidpoint, 0, 2, 2); this.drawText_(flatMidpoint, 0, 2, 2);
} }
}; };
@@ -588,22 +628,21 @@ ol.render.canvas.Immediate.prototype.drawLineStringGeometry = function(lineStrin
* Render a MultiLineString geometry into the canvas. Rendering is immediate * Render a MultiLineString geometry into the canvas. Rendering is immediate
* and uses the current style. * and uses the current style.
* *
* @param {ol.geom.MultiLineString|ol.render.Feature} multiLineStringGeometry * @param {ol.geom.MultiLineString|ol.render.Feature} geometry MultiLineString
* MultiLineString geometry. * geometry.
* @api
*/ */
ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry) { ol.render.canvas.Immediate.prototype.drawMultiLineString = function(geometry) {
var geometryExtent = multiLineStringGeometry.getExtent(); var geometryExtent = geometry.getExtent();
if (!ol.extent.intersects(this.extent_, geometryExtent)) { if (!ol.extent.intersects(this.extent_, geometryExtent)) {
return; return;
} }
if (this.strokeState_) { if (this.strokeState_) {
this.setContextStrokeState_(this.strokeState_); this.setContextStrokeState_(this.strokeState_);
var context = this.context_; var context = this.context_;
var flatCoordinates = multiLineStringGeometry.getFlatCoordinates(); var flatCoordinates = geometry.getFlatCoordinates();
var offset = 0; var offset = 0;
var ends = multiLineStringGeometry.getEnds(); var ends = geometry.getEnds();
var stride = multiLineStringGeometry.getStride(); var stride = geometry.getStride();
context.beginPath(); context.beginPath();
var i, ii; var i, ii;
for (i = 0, ii = ends.length; i < ii; ++i) { for (i = 0, ii = ends.length; i < ii; ++i) {
@@ -613,7 +652,7 @@ ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry = function(mult
context.stroke(); context.stroke();
} }
if (this.text_ !== '') { if (this.text_ !== '') {
var flatMidpoints = multiLineStringGeometry.getFlatMidpoints(); var flatMidpoints = geometry.getFlatMidpoints();
this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2); this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);
} }
}; };
@@ -623,12 +662,10 @@ ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry = function(mult
* Render a Polygon geometry into the canvas. Rendering is immediate and uses * Render a Polygon geometry into the canvas. Rendering is immediate and uses
* the current style. * the current style.
* *
* @param {ol.geom.Polygon|ol.render.Feature} polygonGeometry Polygon * @param {ol.geom.Polygon|ol.render.Feature} geometry Polygon geometry.
* geometry.
* @api
*/ */
ol.render.canvas.Immediate.prototype.drawPolygonGeometry = function(polygonGeometry) { ol.render.canvas.Immediate.prototype.drawPolygon = function(geometry) {
if (!ol.extent.intersects(this.extent_, polygonGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
return; return;
} }
if (this.strokeState_ || this.fillState_) { if (this.strokeState_ || this.fillState_) {
@@ -640,8 +677,8 @@ ol.render.canvas.Immediate.prototype.drawPolygonGeometry = function(polygonGeome
} }
var context = this.context_; var context = this.context_;
context.beginPath(); context.beginPath();
this.drawRings_(polygonGeometry.getOrientedFlatCoordinates(), this.drawRings_(geometry.getOrientedFlatCoordinates(),
0, polygonGeometry.getEnds(), polygonGeometry.getStride()); 0, geometry.getEnds(), geometry.getStride());
if (this.fillState_) { if (this.fillState_) {
context.fill(); context.fill();
} }
@@ -650,7 +687,7 @@ ol.render.canvas.Immediate.prototype.drawPolygonGeometry = function(polygonGeome
} }
} }
if (this.text_ !== '') { if (this.text_ !== '') {
var flatInteriorPoint = polygonGeometry.getFlatInteriorPoint(); var flatInteriorPoint = geometry.getFlatInteriorPoint();
this.drawText_(flatInteriorPoint, 0, 2, 2); this.drawText_(flatInteriorPoint, 0, 2, 2);
} }
}; };
@@ -659,11 +696,10 @@ ol.render.canvas.Immediate.prototype.drawPolygonGeometry = function(polygonGeome
/** /**
* Render MultiPolygon geometry into the canvas. Rendering is immediate and * Render MultiPolygon geometry into the canvas. Rendering is immediate and
* uses the current style. * uses the current style.
* @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry. * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry.
* @api
*/ */
ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry) { ol.render.canvas.Immediate.prototype.drawMultiPolygon = function(geometry) {
if (!ol.extent.intersects(this.extent_, multiPolygonGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
return; return;
} }
if (this.strokeState_ || this.fillState_) { if (this.strokeState_ || this.fillState_) {
@@ -674,10 +710,10 @@ ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry = function(multiPo
this.setContextStrokeState_(this.strokeState_); this.setContextStrokeState_(this.strokeState_);
} }
var context = this.context_; var context = this.context_;
var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates(); var flatCoordinates = geometry.getOrientedFlatCoordinates();
var offset = 0; var offset = 0;
var endss = multiPolygonGeometry.getEndss(); var endss = geometry.getEndss();
var stride = multiPolygonGeometry.getStride(); var stride = geometry.getStride();
var i, ii; var i, ii;
for (i = 0, ii = endss.length; i < ii; ++i) { for (i = 0, ii = endss.length; i < ii; ++i) {
var ends = endss[i]; var ends = endss[i];
@@ -692,7 +728,7 @@ ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry = function(multiPo
} }
} }
if (this.text_ !== '') { if (this.text_ !== '') {
var flatInteriorPoints = multiPolygonGeometry.getFlatInteriorPoints(); var flatInteriorPoints = geometry.getFlatInteriorPoints();
this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2); this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);
} }
}; };
@@ -824,7 +860,6 @@ ol.render.canvas.Immediate.prototype.setContextTextState_ = function(textState)
* *
* @param {ol.style.Fill} fillStyle Fill style. * @param {ol.style.Fill} fillStyle Fill style.
* @param {ol.style.Stroke} strokeStyle Stroke style. * @param {ol.style.Stroke} strokeStyle Stroke style.
* @api
*/ */
ol.render.canvas.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) { ol.render.canvas.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
if (!fillStyle) { if (!fillStyle) {
@@ -868,7 +903,6 @@ ol.render.canvas.Immediate.prototype.setFillStrokeStyle = function(fillStyle, st
* the image style. * the image style.
* *
* @param {ol.style.Image} imageStyle Image style. * @param {ol.style.Image} imageStyle Image style.
* @api
*/ */
ol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) { ol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) {
if (!imageStyle) { if (!imageStyle) {
@@ -904,7 +938,6 @@ ol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) {
* remove the text style. * remove the text style.
* *
* @param {ol.style.Text} textStyle Text style. * @param {ol.style.Text} textStyle Text style.
* @api
*/ */
ol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) { ol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) {
if (!textStyle) { if (!textStyle) {
@@ -971,24 +1004,3 @@ ol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) {
textScale : 1); textScale : 1);
} }
}; };
/**
* @const
* @private
* @type {Object.<ol.geom.GeometryType,
* function(this: ol.render.canvas.Immediate,
* (ol.geom.Geometry|ol.render.Feature), Object)>}
*/
ol.render.canvas.Immediate.GEOMETRY_RENDERERS_ = {
'Point': ol.render.canvas.Immediate.prototype.drawPointGeometry,
'LineString': ol.render.canvas.Immediate.prototype.drawLineStringGeometry,
'Polygon': ol.render.canvas.Immediate.prototype.drawPolygonGeometry,
'MultiPoint': ol.render.canvas.Immediate.prototype.drawMultiPointGeometry,
'MultiLineString':
ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry,
'MultiPolygon': ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry,
'GeometryCollection':
ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry,
'Circle': ol.render.canvas.Immediate.prototype.drawCircleGeometry
};
+7 -7
View File
@@ -779,7 +779,7 @@ ol.render.canvas.ImageReplay.prototype.drawCoordinates_ = function(flatCoordinat
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.ImageReplay.prototype.drawPointGeometry = function(pointGeometry, feature) { ol.render.canvas.ImageReplay.prototype.drawPoint = function(pointGeometry, feature) {
if (!this.image_) { if (!this.image_) {
return; return;
} }
@@ -831,7 +831,7 @@ ol.render.canvas.ImageReplay.prototype.drawPointGeometry = function(pointGeometr
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry = function(multiPointGeometry, feature) { ol.render.canvas.ImageReplay.prototype.drawMultiPoint = function(multiPointGeometry, feature) {
if (!this.image_) { if (!this.image_) {
return; return;
} }
@@ -1064,7 +1064,7 @@ ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() {
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry = function(lineStringGeometry, feature) { ol.render.canvas.LineStringReplay.prototype.drawLineString = function(lineStringGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(state, 'state should not be null'); goog.asserts.assert(state, 'state should not be null');
var strokeStyle = state.strokeStyle; var strokeStyle = state.strokeStyle;
@@ -1091,7 +1091,7 @@ ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry = function(li
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, feature) { ol.render.canvas.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(state, 'state should not be null'); goog.asserts.assert(state, 'state should not be null');
var strokeStyle = state.strokeStyle; var strokeStyle = state.strokeStyle;
@@ -1267,7 +1267,7 @@ ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCo
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry = function(circleGeometry, feature) { ol.render.canvas.PolygonReplay.prototype.drawCircle = function(circleGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(state, 'state should not be null'); goog.asserts.assert(state, 'state should not be null');
var fillStyle = state.fillStyle; var fillStyle = state.fillStyle;
@@ -1319,7 +1319,7 @@ ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry = function(circleGeo
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry = function(polygonGeometry, feature) { ol.render.canvas.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(state, 'state should not be null'); goog.asserts.assert(state, 'state should not be null');
var fillStyle = state.fillStyle; var fillStyle = state.fillStyle;
@@ -1354,7 +1354,7 @@ ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry = function(polygonG
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, feature) { ol.render.canvas.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(state, 'state should not be null'); goog.asserts.assert(state, 'state should not be null');
var fillStyle = state.fillStyle; var fillStyle = state.fillStyle;
+7 -7
View File
@@ -52,7 +52,7 @@ ol.renderer.vector.renderCircleGeometry_ = function(replayGroup, geometry, style
var polygonReplay = replayGroup.getReplay( var polygonReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawCircleGeometry(geometry, feature); polygonReplay.drawCircle(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (textStyle) { if (textStyle) {
@@ -156,7 +156,7 @@ ol.renderer.vector.renderLineStringGeometry_ = function(replayGroup, geometry, s
var lineStringReplay = replayGroup.getReplay( var lineStringReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.LINE_STRING); style.getZIndex(), ol.render.ReplayType.LINE_STRING);
lineStringReplay.setFillStrokeStyle(null, strokeStyle); lineStringReplay.setFillStrokeStyle(null, strokeStyle);
lineStringReplay.drawLineStringGeometry(geometry, feature); lineStringReplay.drawLineString(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (textStyle) { if (textStyle) {
@@ -181,7 +181,7 @@ ol.renderer.vector.renderMultiLineStringGeometry_ = function(replayGroup, geomet
var lineStringReplay = replayGroup.getReplay( var lineStringReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.LINE_STRING); style.getZIndex(), ol.render.ReplayType.LINE_STRING);
lineStringReplay.setFillStrokeStyle(null, strokeStyle); lineStringReplay.setFillStrokeStyle(null, strokeStyle);
lineStringReplay.drawMultiLineStringGeometry(geometry, feature); lineStringReplay.drawMultiLineString(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (textStyle) { if (textStyle) {
@@ -209,7 +209,7 @@ ol.renderer.vector.renderMultiPolygonGeometry_ = function(replayGroup, geometry,
var polygonReplay = replayGroup.getReplay( var polygonReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawMultiPolygonGeometry(geometry, feature); polygonReplay.drawMultiPolygon(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (textStyle) { if (textStyle) {
@@ -239,7 +239,7 @@ ol.renderer.vector.renderPointGeometry_ = function(replayGroup, geometry, style,
var imageReplay = replayGroup.getReplay( var imageReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.IMAGE); style.getZIndex(), ol.render.ReplayType.IMAGE);
imageReplay.setImageStyle(imageStyle); imageReplay.setImageStyle(imageStyle);
imageReplay.drawPointGeometry(geometry, feature); imageReplay.drawPoint(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (textStyle) { if (textStyle) {
@@ -268,7 +268,7 @@ ol.renderer.vector.renderMultiPointGeometry_ = function(replayGroup, geometry, s
var imageReplay = replayGroup.getReplay( var imageReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.IMAGE); style.getZIndex(), ol.render.ReplayType.IMAGE);
imageReplay.setImageStyle(imageStyle); imageReplay.setImageStyle(imageStyle);
imageReplay.drawMultiPointGeometry(geometry, feature); imageReplay.drawMultiPoint(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (textStyle) { if (textStyle) {
@@ -296,7 +296,7 @@ ol.renderer.vector.renderPolygonGeometry_ = function(replayGroup, geometry, styl
var polygonReplay = replayGroup.getReplay( var polygonReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawPolygonGeometry(geometry, feature); polygonReplay.drawPolygon(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (textStyle) { if (textStyle) {
+24 -12
View File
@@ -19,11 +19,27 @@ ol.render.VectorContext = function() {
ol.render.VectorContext.prototype.drawAsync = goog.abstractMethod; ol.render.VectorContext.prototype.drawAsync = goog.abstractMethod;
/**
* Render a geometry.
*
* @param {ol.geom.Geometry} geometry The geometry to render.
*/
ol.render.VectorContext.prototype.drawGeometry = goog.abstractMethod;
/**
* Set the rendering style.
*
* @param {ol.style.Style} style The rendering style.
*/
ol.render.VectorContext.prototype.setStyle = goog.abstractMethod;
/** /**
* @param {ol.geom.Circle} circleGeometry Circle geometry. * @param {ol.geom.Circle} circleGeometry Circle geometry.
* @param {ol.Feature} feature Feature, * @param {ol.Feature} feature Feature,
*/ */
ol.render.VectorContext.prototype.drawCircleGeometry = goog.abstractMethod; ol.render.VectorContext.prototype.drawCircle = goog.abstractMethod;
/** /**
@@ -38,8 +54,7 @@ ol.render.VectorContext.prototype.drawFeature = goog.abstractMethod;
* collection. * collection.
* @param {ol.Feature} feature Feature. * @param {ol.Feature} feature Feature.
*/ */
ol.render.VectorContext.prototype.drawGeometryCollectionGeometry = ol.render.VectorContext.prototype.drawGeometryCollection = goog.abstractMethod;
goog.abstractMethod;
/** /**
@@ -47,8 +62,7 @@ ol.render.VectorContext.prototype.drawGeometryCollectionGeometry =
* string geometry. * string geometry.
* @param {ol.Feature|ol.render.Feature} feature Feature. * @param {ol.Feature|ol.render.Feature} feature Feature.
*/ */
ol.render.VectorContext.prototype.drawLineStringGeometry = ol.render.VectorContext.prototype.drawLineString = goog.abstractMethod;
goog.abstractMethod;
/** /**
@@ -56,8 +70,7 @@ ol.render.VectorContext.prototype.drawLineStringGeometry =
* MultiLineString geometry. * MultiLineString geometry.
* @param {ol.Feature|ol.render.Feature} feature Feature. * @param {ol.Feature|ol.render.Feature} feature Feature.
*/ */
ol.render.VectorContext.prototype.drawMultiLineStringGeometry = ol.render.VectorContext.prototype.drawMultiLineString = goog.abstractMethod;
goog.abstractMethod;
/** /**
@@ -65,22 +78,21 @@ ol.render.VectorContext.prototype.drawMultiLineStringGeometry =
* geometry. * geometry.
* @param {ol.Feature|ol.render.Feature} feature Feature. * @param {ol.Feature|ol.render.Feature} feature Feature.
*/ */
ol.render.VectorContext.prototype.drawMultiPointGeometry = goog.abstractMethod; ol.render.VectorContext.prototype.drawMultiPoint = goog.abstractMethod;
/** /**
* @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry. * @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry.
* @param {ol.Feature} feature Feature. * @param {ol.Feature} feature Feature.
*/ */
ol.render.VectorContext.prototype.drawMultiPolygonGeometry = ol.render.VectorContext.prototype.drawMultiPolygon = goog.abstractMethod;
goog.abstractMethod;
/** /**
* @param {ol.geom.Point|ol.render.Feature} pointGeometry Point geometry. * @param {ol.geom.Point|ol.render.Feature} pointGeometry Point geometry.
* @param {ol.Feature|ol.render.Feature} feature Feature. * @param {ol.Feature|ol.render.Feature} feature Feature.
*/ */
ol.render.VectorContext.prototype.drawPointGeometry = goog.abstractMethod; ol.render.VectorContext.prototype.drawPoint = goog.abstractMethod;
/** /**
@@ -88,7 +100,7 @@ ol.render.VectorContext.prototype.drawPointGeometry = goog.abstractMethod;
* geometry. * geometry.
* @param {ol.Feature|ol.render.Feature} feature Feature. * @param {ol.Feature|ol.render.Feature} feature Feature.
*/ */
ol.render.VectorContext.prototype.drawPolygonGeometry = goog.abstractMethod; ol.render.VectorContext.prototype.drawPolygon = goog.abstractMethod;
/** /**
+44 -104
View File
@@ -1,6 +1,8 @@
goog.provide('ol.render.webgl.Immediate'); goog.provide('ol.render.webgl.Immediate');
goog.require('goog.asserts');
goog.require('ol.array'); goog.require('ol.array');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryType');
goog.require('ol.render.VectorContext'); goog.require('ol.render.VectorContext');
goog.require('ol.render.webgl.ImageReplay'); goog.require('ol.render.webgl.ImageReplay');
goog.require('ol.render.webgl.ReplayGroup'); goog.require('ol.render.webgl.ReplayGroup');
@@ -18,8 +20,7 @@ goog.require('ol.render.webgl.ReplayGroup');
* @param {number} pixelRatio Pixel ratio. * @param {number} pixelRatio Pixel ratio.
* @struct * @struct
*/ */
ol.render.webgl.Immediate = function(context, ol.render.webgl.Immediate = function(context, center, resolution, rotation, size, extent, pixelRatio) {
center, resolution, rotation, size, extent, pixelRatio) {
goog.base(this); goog.base(this);
/** /**
@@ -110,10 +111,39 @@ ol.render.webgl.Immediate.prototype.drawAsync = function(zIndex, callback) {
/** /**
* @inheritDoc * Set the rendering style. Note that since this is an immediate rendering API,
* any `zIndex` on the provided style will be ignored.
*
* @param {ol.style.Style} style The rendering style.
* @api * @api
*/ */
ol.render.webgl.Immediate.prototype.drawCircleGeometry = function(circleGeometry, data) { ol.render.webgl.Immediate.prototype.setStyle = function(style) {
this.setImageStyle(style.getImage());
};
/**
* Render a geometry into the canvas. Call
* {@link ol.render.webgl.Immediate#setStyle} first to set the rendering style.
*
* @param {ol.geom.Geometry|ol.render.Feature} geometry The geometry to render.
* @api
*/
ol.render.webgl.Immediate.prototype.drawGeometry = function(geometry) {
var type = geometry.getType();
switch (type) {
case ol.geom.GeometryType.POINT:
this.drawPoint(/** @type {ol.geom.Point} */ (geometry), null);
break;
case ol.geom.GeometryType.MULTI_POINT:
this.drawMultiPoint(/** @type {ol.geom.MultiPoint} */ (geometry), null);
break;
case ol.geom.GeometryType.GEOMETRY_COLLECTION:
this.drawGeometryCollection(/** @type {ol.geom.GeometryCollection} */ (geometry), null);
break;
default:
goog.asserts.fail('Unsupported geometry type: ' + type);
}
}; };
@@ -132,52 +162,35 @@ ol.render.webgl.Immediate.prototype.drawFeature = function(feature, style) {
zIndex = 0; zIndex = 0;
} }
this.drawAsync(zIndex, function(render) { this.drawAsync(zIndex, function(render) {
render.setFillStrokeStyle(style.getFill(), style.getStroke()); render.setStyle(style);
render.setImageStyle(style.getImage()); goog.asserts.assert(geometry, 'geometry must be truthy');
render.setTextStyle(style.getText()); render.drawGeometry(geometry);
var type = geometry.getType();
var renderGeometry = ol.render.webgl.Immediate.GEOMETRY_RENDERERS_[type];
// Do not assert since all kinds of geometries are not handled yet.
// In spite, render what we support.
if (renderGeometry) {
renderGeometry.call(render, geometry, null);
}
}); });
}; };
/** /**
* @inheritDoc * @inheritDoc
* @api
*/ */
ol.render.webgl.Immediate.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, data) { ol.render.webgl.Immediate.prototype.drawGeometryCollection = function(geometry, data) {
var geometries = geometryCollectionGeometry.getGeometriesArray(); var geometries = geometry.getGeometriesArray();
var renderers = ol.render.webgl.Immediate.GEOMETRY_RENDERERS_;
var i, ii; var i, ii;
for (i = 0, ii = geometries.length; i < ii; ++i) { for (i = 0, ii = geometries.length; i < ii; ++i) {
var geometry = geometries[i]; this.drawGeometry(geometries[i]);
var geometryRenderer = renderers[geometry.getType()];
// Do not assert since all kinds of geometries are not handled yet.
// In order to support hierarchies, delegate instead what we can to
// valid renderers.
if (geometryRenderer) {
geometryRenderer.call(this, geometry, data);
}
} }
}; };
/** /**
* @inheritDoc * @inheritDoc
* @api
*/ */
ol.render.webgl.Immediate.prototype.drawPointGeometry = function(pointGeometry, data) { ol.render.webgl.Immediate.prototype.drawPoint = function(geometry, data) {
var context = this.context_; var context = this.context_;
var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_); var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);
var replay = /** @type {ol.render.webgl.ImageReplay} */ ( var replay = /** @type {ol.render.webgl.ImageReplay} */ (
replayGroup.getReplay(0, ol.render.ReplayType.IMAGE)); replayGroup.getReplay(0, ol.render.ReplayType.IMAGE));
replay.setImageStyle(this.imageStyle_); replay.setImageStyle(this.imageStyle_);
replay.drawPointGeometry(pointGeometry, data); replay.drawPoint(geometry, data);
replay.finish(context); replay.finish(context);
// default colors // default colors
var opacity = 1; var opacity = 1;
@@ -193,31 +206,14 @@ ol.render.webgl.Immediate.prototype.drawPointGeometry = function(pointGeometry,
/** /**
* @inheritDoc * @inheritDoc
* @api
*/ */
ol.render.webgl.Immediate.prototype.drawLineStringGeometry = function(lineStringGeometry, data) { ol.render.webgl.Immediate.prototype.drawMultiPoint = function(geometry, data) {
};
/**
* @inheritDoc
* @api
*/
ol.render.webgl.Immediate.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) {
};
/**
* @inheritDoc
* @api
*/
ol.render.webgl.Immediate.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) {
var context = this.context_; var context = this.context_;
var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_); var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);
var replay = /** @type {ol.render.webgl.ImageReplay} */ ( var replay = /** @type {ol.render.webgl.ImageReplay} */ (
replayGroup.getReplay(0, ol.render.ReplayType.IMAGE)); replayGroup.getReplay(0, ol.render.ReplayType.IMAGE));
replay.setImageStyle(this.imageStyle_); replay.setImageStyle(this.imageStyle_);
replay.drawMultiPointGeometry(multiPointGeometry, data); replay.drawMultiPoint(geometry, data);
replay.finish(context); replay.finish(context);
var opacity = 1; var opacity = 1;
var skippedFeatures = {}; var skippedFeatures = {};
@@ -232,63 +228,7 @@ ol.render.webgl.Immediate.prototype.drawMultiPointGeometry = function(multiPoint
/** /**
* @inheritDoc * @inheritDoc
* @api
*/
ol.render.webgl.Immediate.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) {
};
/**
* @inheritDoc
* @api
*/
ol.render.webgl.Immediate.prototype.drawPolygonGeometry = function(polygonGeometry, data) {
};
/**
* @inheritDoc
* @api
*/
ol.render.webgl.Immediate.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, data) {
};
/**
* @inheritDoc
* @api
*/
ol.render.webgl.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
};
/**
* @inheritDoc
* @api
*/ */
ol.render.webgl.Immediate.prototype.setImageStyle = function(imageStyle) { ol.render.webgl.Immediate.prototype.setImageStyle = function(imageStyle) {
this.imageStyle_ = imageStyle; this.imageStyle_ = imageStyle;
}; };
/**
* @inheritDoc
* @api
*/
ol.render.webgl.Immediate.prototype.setTextStyle = function(textStyle) {
};
/**
* @const
* @private
* @type {Object.<ol.geom.GeometryType,
* function(this: ol.render.webgl.Immediate,
* (ol.geom.Geometry|ol.render.Feature), Object)>}
*/
ol.render.webgl.Immediate.GEOMETRY_RENDERERS_ = {
'Point': ol.render.webgl.Immediate.prototype.drawPointGeometry,
'MultiPoint': ol.render.webgl.Immediate.prototype.drawMultiPointGeometry,
'GeometryCollection':
ol.render.webgl.Immediate.prototype.drawGeometryCollectionGeometry
};
+2 -2
View File
@@ -370,7 +370,7 @@ ol.render.webgl.ImageReplay.prototype.drawCoordinates_ = function(flatCoordinate
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.webgl.ImageReplay.prototype.drawMultiPointGeometry = function(multiPointGeometry, feature) { ol.render.webgl.ImageReplay.prototype.drawMultiPoint = function(multiPointGeometry, feature) {
this.startIndices_.push(this.indices_.length); this.startIndices_.push(this.indices_.length);
this.startIndicesFeature_.push(feature); this.startIndicesFeature_.push(feature);
var flatCoordinates = multiPointGeometry.getFlatCoordinates(); var flatCoordinates = multiPointGeometry.getFlatCoordinates();
@@ -383,7 +383,7 @@ ol.render.webgl.ImageReplay.prototype.drawMultiPointGeometry = function(multiPoi
/** /**
* @inheritDoc * @inheritDoc
*/ */
ol.render.webgl.ImageReplay.prototype.drawPointGeometry = function(pointGeometry, feature) { ol.render.webgl.ImageReplay.prototype.drawPoint = function(pointGeometry, feature) {
this.startIndices_.push(this.indices_.length); this.startIndices_.push(this.indices_.length);
this.startIndicesFeature_.push(feature); this.startIndicesFeature_.push(feature);
var flatCoordinates = pointGeometry.getFlatCoordinates(); var flatCoordinates = pointGeometry.getFlatCoordinates();
+152 -2
View File
@@ -2,6 +2,17 @@ goog.provide('ol.test.render.canvas.Immediate');
describe('ol.render.canvas.Immediate', function() { describe('ol.render.canvas.Immediate', function() {
function getMockContext() {
return {
setLineDash: sinon.spy(),
beginPath: sinon.spy(),
closePath: sinon.spy(),
stroke: sinon.spy(),
lineTo: sinon.spy(),
moveTo: sinon.spy()
};
}
describe('constructor', function() { describe('constructor', function() {
it('creates an instance', function() { it('creates an instance', function() {
var instance = new ol.render.canvas.Immediate(); var instance = new ol.render.canvas.Immediate();
@@ -25,7 +36,134 @@ describe('ol.render.canvas.Immediate', function() {
}); });
}); });
describe('#drawMultiPolygonGeometry', function() { describe('#setStyle()', function() {
it('calls the more specific methods with style parts', function() {
var context = new ol.render.canvas.Immediate();
sinon.spy(context, 'setFillStrokeStyle');
sinon.spy(context, 'setImageStyle');
sinon.spy(context, 'setTextStyle');
var fill = new ol.style.Fill({});
var stroke = new ol.style.Stroke({});
var text = new ol.style.Text({});
var image = new ol.style.Circle({});
var style = new ol.style.Style({
fill: fill,
stroke: stroke,
image: image,
text: text
});
context.setStyle(style);
expect(context.setFillStrokeStyle.calledOnce).to.be(true);
expect(context.setFillStrokeStyle.firstCall.calledWithExactly(fill, stroke)).to.be(true);
expect(context.setImageStyle.calledOnce).to.be(true);
expect(context.setImageStyle.firstCall.calledWithExactly(image)).to.be(true);
expect(context.setTextStyle.calledOnce).to.be(true);
expect(context.setTextStyle.firstCall.calledWithExactly(text)).to.be(true);
});
});
describe('#drawGeometry()', function() {
var extent = [-10, -10, 10, 10];
it('calls drawPoint() with a Point', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawPoint');
var geometry = new ol.geom.Point([1, 2]);
context.drawGeometry(geometry);
expect(context.drawPoint.calledOnce).to.be(true);
expect(context.drawPoint.firstCall.calledWithExactly(geometry)).to.be(true);
});
it('calls drawLineString() with a LineString', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawLineString');
var geometry = new ol.geom.LineString([[1, 2], [3, 4]]);
context.drawGeometry(geometry);
expect(context.drawLineString.calledOnce).to.be(true);
expect(context.drawLineString.firstCall.calledWithExactly(geometry)).to.be(true);
});
it('calls drawPolygon() with a Polygon', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawPolygon');
var geometry = new ol.geom.Polygon([[[1, 2], [3, 4], [5, 6], [1, 2]]]);
context.drawGeometry(geometry);
expect(context.drawPolygon.calledOnce).to.be(true);
expect(context.drawPolygon.firstCall.calledWithExactly(geometry)).to.be(true);
});
it('calls drawMultiPoint() with a MultiPoint', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawMultiPoint');
var geometry = new ol.geom.MultiPoint([[1, 2], [3, 4]]);
context.drawGeometry(geometry);
expect(context.drawMultiPoint.calledOnce).to.be(true);
expect(context.drawMultiPoint.firstCall.calledWithExactly(geometry)).to.be(true);
});
it('calls drawMultiLineString() with a MultiLineString', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawMultiLineString');
var geometry = new ol.geom.MultiLineString([[[1, 2], [3, 4]]]);
context.drawGeometry(geometry);
expect(context.drawMultiLineString.calledOnce).to.be(true);
expect(context.drawMultiLineString.firstCall.calledWithExactly(geometry)).to.be(true);
});
it('calls drawMultiPolygon() with a MultiPolygon', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawMultiPolygon');
var geometry = new ol.geom.MultiPolygon([[[[1, 2], [3, 4], [5, 6], [1, 2]]]]);
context.drawGeometry(geometry);
expect(context.drawMultiPolygon.calledOnce).to.be(true);
expect(context.drawMultiPolygon.firstCall.calledWithExactly(geometry)).to.be(true);
});
it('calls drawGeometryCollection() with a GeometryCollection', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawGeometryCollection');
sinon.spy(context, 'drawPoint');
sinon.spy(context, 'drawLineString');
sinon.spy(context, 'drawPolygon');
var point = new ol.geom.Point([1, 2]);
var linestring = new ol.geom.LineString([[1, 2], [3, 4]]);
var polygon = new ol.geom.Polygon([[[1, 2], [3, 4], [5, 6], [1, 2]]]);
var geometry = new ol.geom.GeometryCollection([point, linestring, polygon]);
context.drawGeometry(geometry);
expect(context.drawGeometryCollection.calledOnce).to.be(true);
expect(context.drawPoint.calledOnce).to.be(true);
expect(context.drawPoint.firstCall.calledWithExactly(point)).to.be(true);
expect(context.drawLineString.calledOnce).to.be(true);
expect(context.drawLineString.firstCall.calledWithExactly(linestring)).to.be(true);
expect(context.drawPolygon.calledOnce).to.be(true);
expect(context.drawPolygon.firstCall.calledWithExactly(polygon)).to.be(true);
});
it('calls drawCircle() with a Circle', function() {
var context = new ol.render.canvas.Immediate(getMockContext(), 1, extent);
sinon.spy(context, 'drawCircle');
var geometry = new ol.geom.Circle([0, 0]);
context.drawGeometry(geometry);
expect(context.drawCircle.calledOnce).to.be(true);
expect(context.drawCircle.firstCall.calledWithExactly(geometry)).to.be(true);
});
});
describe('#drawMultiPolygon', function() {
it('creates the correct canvas instructions for 3D geometries', function() { it('creates the correct canvas instructions for 3D geometries', function() {
var log = { var log = {
lineTo: [], lineTo: [],
@@ -76,7 +214,7 @@ describe('ol.render.canvas.Immediate', function() {
[-82.128838, 26.693342, 0], [-82.128838, 26.693342, 0],
[-82.102127, 26.585724, 0]]] [-82.102127, 26.585724, 0]]]
]).transform('EPSG:4326', 'EPSG:3857'); ]).transform('EPSG:4326', 'EPSG:3857');
canvas.drawMultiPolygonGeometry(multiPolygonGeometry, null); canvas.drawMultiPolygon(multiPolygonGeometry, null);
expect(log.lineTo.length).to.be(15); expect(log.lineTo.length).to.be(15);
expect(log.lineTo[0][0]).to.roughlyEqual(805.3521540835154, 1e-9); expect(log.lineTo[0][0]).to.roughlyEqual(805.3521540835154, 1e-9);
expect(log.lineTo[0][1]).to.roughlyEqual(158.76358389011807, 1e-9); expect(log.lineTo[0][1]).to.roughlyEqual(158.76358389011807, 1e-9);
@@ -117,6 +255,18 @@ describe('ol.render.canvas.Immediate', function() {
}); });
}); });
goog.require('ol.geom.Circle');
goog.require('ol.geom.GeometryCollection');
goog.require('ol.geom.LineString');
goog.require('ol.geom.MultiLineString');
goog.require('ol.geom.MultiPoint');
goog.require('ol.geom.MultiPolygon'); goog.require('ol.geom.MultiPolygon');
goog.require('ol.geom.Point');
goog.require('ol.geom.Polygon');
goog.require('ol.render.VectorContext'); goog.require('ol.render.VectorContext');
goog.require('ol.render.canvas.Immediate'); goog.require('ol.render.canvas.Immediate');
goog.require('ol.style.Circle');
goog.require('ol.style.Fill');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
goog.require('ol.style.Text');
+22 -22
View File
@@ -62,13 +62,13 @@ describe('ol.renderer.vector', function() {
var imageReplay = replayGroup.getReplay( var imageReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.IMAGE); style.getZIndex(), ol.render.ReplayType.IMAGE);
var setImageStyleSpy = sinon.spy(imageReplay, 'setImageStyle'); var setImageStyleSpy = sinon.spy(imageReplay, 'setImageStyle');
var drawPointGeometrySpy = sinon.stub(imageReplay, var drawPointSpy = sinon.stub(imageReplay,
'drawPointGeometry', ol.nullFunction); 'drawPoint', ol.nullFunction);
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, squaredTolerance, listener, listenerThis); style, squaredTolerance, listener, listenerThis);
expect(setImageStyleSpy.called).to.be(false); expect(setImageStyleSpy.called).to.be(false);
setImageStyleSpy.restore(); setImageStyleSpy.restore();
drawPointGeometrySpy.restore(); drawPointSpy.restore();
}); });
it('does not render the multipoint', function() { it('does not render the multipoint', function() {
@@ -76,13 +76,13 @@ describe('ol.renderer.vector', function() {
var imageReplay = replayGroup.getReplay( var imageReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.IMAGE); style.getZIndex(), ol.render.ReplayType.IMAGE);
var setImageStyleSpy = sinon.spy(imageReplay, 'setImageStyle'); var setImageStyleSpy = sinon.spy(imageReplay, 'setImageStyle');
var drawMultiPointGeometrySpy = sinon.stub(imageReplay, var drawMultiPointSpy = sinon.stub(imageReplay,
'drawMultiPointGeometry', ol.nullFunction); 'drawMultiPoint', ol.nullFunction);
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, squaredTolerance, listener, listenerThis); style, squaredTolerance, listener, listenerThis);
expect(setImageStyleSpy.called).to.be(false); expect(setImageStyleSpy.called).to.be(false);
setImageStyleSpy.restore(); setImageStyleSpy.restore();
drawMultiPointGeometrySpy.restore(); drawMultiPointSpy.restore();
}); });
it('does render the linestring', function() { it('does render the linestring', function() {
@@ -91,14 +91,14 @@ describe('ol.renderer.vector', function() {
style.getZIndex(), ol.render.ReplayType.LINE_STRING); style.getZIndex(), ol.render.ReplayType.LINE_STRING);
var setFillStrokeStyleSpy = sinon.spy(lineStringReplay, var setFillStrokeStyleSpy = sinon.spy(lineStringReplay,
'setFillStrokeStyle'); 'setFillStrokeStyle');
var drawLineStringGeometrySpy = sinon.stub(lineStringReplay, var drawLineStringSpy = sinon.stub(lineStringReplay,
'drawLineStringGeometry', ol.nullFunction); 'drawLineString', ol.nullFunction);
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, squaredTolerance, listener, listenerThis); style, squaredTolerance, listener, listenerThis);
expect(setFillStrokeStyleSpy.called).to.be(true); expect(setFillStrokeStyleSpy.called).to.be(true);
expect(drawLineStringGeometrySpy.called).to.be(true); expect(drawLineStringSpy.called).to.be(true);
setFillStrokeStyleSpy.restore(); setFillStrokeStyleSpy.restore();
drawLineStringGeometrySpy.restore(); drawLineStringSpy.restore();
}); });
it('does render the multilinestring', function() { it('does render the multilinestring', function() {
@@ -107,14 +107,14 @@ describe('ol.renderer.vector', function() {
style.getZIndex(), ol.render.ReplayType.LINE_STRING); style.getZIndex(), ol.render.ReplayType.LINE_STRING);
var setFillStrokeStyleSpy = sinon.spy(lineStringReplay, var setFillStrokeStyleSpy = sinon.spy(lineStringReplay,
'setFillStrokeStyle'); 'setFillStrokeStyle');
var drawMultiLineStringGeometrySpy = sinon.stub(lineStringReplay, var drawMultiLineStringSpy = sinon.stub(lineStringReplay,
'drawMultiLineStringGeometry', ol.nullFunction); 'drawMultiLineString', ol.nullFunction);
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, squaredTolerance, listener, listenerThis); style, squaredTolerance, listener, listenerThis);
expect(setFillStrokeStyleSpy.called).to.be(true); expect(setFillStrokeStyleSpy.called).to.be(true);
expect(drawMultiLineStringGeometrySpy.called).to.be(true); expect(drawMultiLineStringSpy.called).to.be(true);
setFillStrokeStyleSpy.restore(); setFillStrokeStyleSpy.restore();
drawMultiLineStringGeometrySpy.restore(); drawMultiLineStringSpy.restore();
}); });
it('does render the polygon', function() { it('does render the polygon', function() {
@@ -124,14 +124,14 @@ describe('ol.renderer.vector', function() {
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
var setFillStrokeStyleSpy = sinon.spy(polygonReplay, var setFillStrokeStyleSpy = sinon.spy(polygonReplay,
'setFillStrokeStyle'); 'setFillStrokeStyle');
var drawPolygonGeometrySpy = sinon.stub(polygonReplay, var drawPolygonSpy = sinon.stub(polygonReplay,
'drawPolygonGeometry', ol.nullFunction); 'drawPolygon', ol.nullFunction);
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, squaredTolerance, listener, listenerThis); style, squaredTolerance, listener, listenerThis);
expect(setFillStrokeStyleSpy.called).to.be(true); expect(setFillStrokeStyleSpy.called).to.be(true);
expect(drawPolygonGeometrySpy.called).to.be(true); expect(drawPolygonSpy.called).to.be(true);
setFillStrokeStyleSpy.restore(); setFillStrokeStyleSpy.restore();
drawPolygonGeometrySpy.restore(); drawPolygonSpy.restore();
}); });
it('does render the multipolygon', function() { it('does render the multipolygon', function() {
@@ -141,14 +141,14 @@ describe('ol.renderer.vector', function() {
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
var setFillStrokeStyleSpy = sinon.spy(polygonReplay, var setFillStrokeStyleSpy = sinon.spy(polygonReplay,
'setFillStrokeStyle'); 'setFillStrokeStyle');
var drawMultiPolygonGeometrySpy = sinon.stub(polygonReplay, var drawMultiPolygonSpy = sinon.stub(polygonReplay,
'drawMultiPolygonGeometry', ol.nullFunction); 'drawMultiPolygon', ol.nullFunction);
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, squaredTolerance, listener, listenerThis); style, squaredTolerance, listener, listenerThis);
expect(setFillStrokeStyleSpy.called).to.be(true); expect(setFillStrokeStyleSpy.called).to.be(true);
expect(drawMultiPolygonGeometrySpy.called).to.be(true); expect(drawMultiPolygonSpy.called).to.be(true);
setFillStrokeStyleSpy.restore(); setFillStrokeStyleSpy.restore();
drawMultiPolygonGeometrySpy.restore(); drawMultiPolygonSpy.restore();
}); });
}); });
+6 -6
View File
@@ -82,7 +82,7 @@ describe('ol.render.webgl.ImageReplay', function() {
}); });
}); });
describe('#drawPointGeometry', function() { describe('#drawPoint', function() {
beforeEach(function() { beforeEach(function() {
var imageStyle = createImageStyle(new Image()); var imageStyle = createImageStyle(new Image());
replay.setImageStyle(imageStyle); replay.setImageStyle(imageStyle);
@@ -92,7 +92,7 @@ describe('ol.render.webgl.ImageReplay', function() {
var point; var point;
point = new ol.geom.Point([1000, 2000]); point = new ol.geom.Point([1000, 2000]);
replay.drawPointGeometry(point, null); replay.drawPoint(point, null);
expect(replay.vertices_).to.have.length(32); expect(replay.vertices_).to.have.length(32);
expect(replay.indices_).to.have.length(6); expect(replay.indices_).to.have.length(6);
expect(replay.indices_[0]).to.be(0); expect(replay.indices_[0]).to.be(0);
@@ -103,7 +103,7 @@ describe('ol.render.webgl.ImageReplay', function() {
expect(replay.indices_[5]).to.be(3); expect(replay.indices_[5]).to.be(3);
point = new ol.geom.Point([2000, 3000]); point = new ol.geom.Point([2000, 3000]);
replay.drawPointGeometry(point, null); replay.drawPoint(point, null);
expect(replay.vertices_).to.have.length(64); expect(replay.vertices_).to.have.length(64);
expect(replay.indices_).to.have.length(12); expect(replay.indices_).to.have.length(12);
expect(replay.indices_[6]).to.be(4); expect(replay.indices_[6]).to.be(4);
@@ -115,7 +115,7 @@ describe('ol.render.webgl.ImageReplay', function() {
}); });
}); });
describe('#drawMultiPointGeometry', function() { describe('#drawMultiPoint', function() {
beforeEach(function() { beforeEach(function() {
var imageStyle = createImageStyle(new Image()); var imageStyle = createImageStyle(new Image());
replay.setImageStyle(imageStyle); replay.setImageStyle(imageStyle);
@@ -126,7 +126,7 @@ describe('ol.render.webgl.ImageReplay', function() {
multiPoint = new ol.geom.MultiPoint( multiPoint = new ol.geom.MultiPoint(
[[1000, 2000], [2000, 3000]]); [[1000, 2000], [2000, 3000]]);
replay.drawMultiPointGeometry(multiPoint, null); replay.drawMultiPoint(multiPoint, null);
expect(replay.vertices_).to.have.length(64); expect(replay.vertices_).to.have.length(64);
expect(replay.indices_).to.have.length(12); expect(replay.indices_).to.have.length(12);
expect(replay.indices_[0]).to.be(0); expect(replay.indices_[0]).to.be(0);
@@ -144,7 +144,7 @@ describe('ol.render.webgl.ImageReplay', function() {
multiPoint = new ol.geom.MultiPoint( multiPoint = new ol.geom.MultiPoint(
[[3000, 4000], [4000, 5000]]); [[3000, 4000], [4000, 5000]]);
replay.drawMultiPointGeometry(multiPoint, null); replay.drawMultiPoint(multiPoint, null);
expect(replay.vertices_).to.have.length(128); expect(replay.vertices_).to.have.length(128);
expect(replay.indices_).to.have.length(24); expect(replay.indices_).to.have.length(24);
expect(replay.indices_[12]).to.be(8); expect(replay.indices_[12]).to.be(8);
+1 -1
View File
@@ -203,7 +203,7 @@ describe('ol.rendering.layer.Tile', function() {
fill: new ol.style.Fill({color: 'yellow'}), fill: new ol.style.Fill({color: 'yellow'}),
stroke: new ol.style.Stroke({color: 'red', width: 1}) stroke: new ol.style.Stroke({color: 'red', width: 1})
})); }));
e.vectorContext.drawPointGeometry(new ol.geom.Point( e.vectorContext.drawPoint(new ol.geom.Point(
ol.proj.transform([-123, 38], 'EPSG:4326', 'EPSG:3857'))); ol.proj.transform([-123, 38], 'EPSG:4326', 'EPSG:3857')));
}); });
} }