Refactor stroke style management to reuse code
This commit is contained in:
@@ -1,10 +1,6 @@
|
|||||||
goog.provide('ol.render.canvas.LineStringReplay');
|
goog.provide('ol.render.canvas.LineStringReplay');
|
||||||
|
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.array');
|
|
||||||
goog.require('ol.colorlike');
|
|
||||||
goog.require('ol.extent');
|
|
||||||
goog.require('ol.render.canvas');
|
|
||||||
goog.require('ol.render.canvas.Instruction');
|
goog.require('ol.render.canvas.Instruction');
|
||||||
goog.require('ol.render.canvas.Replay');
|
goog.require('ol.render.canvas.Replay');
|
||||||
|
|
||||||
@@ -24,49 +20,6 @@ ol.render.canvas.LineStringReplay = function(
|
|||||||
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {
|
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {
|
||||||
ol.render.canvas.Replay.call(this,
|
ol.render.canvas.Replay.call(this,
|
||||||
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);
|
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {ol.Extent}
|
|
||||||
*/
|
|
||||||
this.bufferedMaxExtent_ = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {{currentStrokeStyle: (ol.ColorLike|undefined),
|
|
||||||
* currentLineCap: (string|undefined),
|
|
||||||
* currentLineDash: Array.<number>,
|
|
||||||
* currentLineDashOffset: (number|undefined),
|
|
||||||
* currentLineJoin: (string|undefined),
|
|
||||||
* currentLineWidth: (number|undefined),
|
|
||||||
* currentMiterLimit: (number|undefined),
|
|
||||||
* lastStroke: (number|undefined),
|
|
||||||
* strokeStyle: (ol.ColorLike|undefined),
|
|
||||||
* lineCap: (string|undefined),
|
|
||||||
* lineDash: Array.<number>,
|
|
||||||
* lineDashOffset: (number|undefined),
|
|
||||||
* lineJoin: (string|undefined),
|
|
||||||
* lineWidth: (number|undefined),
|
|
||||||
* miterLimit: (number|undefined)}|null}
|
|
||||||
*/
|
|
||||||
this.state_ = {
|
|
||||||
currentStrokeStyle: undefined,
|
|
||||||
currentLineCap: undefined,
|
|
||||||
currentLineDash: null,
|
|
||||||
currentLineDashOffset: undefined,
|
|
||||||
currentLineJoin: undefined,
|
|
||||||
currentLineWidth: undefined,
|
|
||||||
currentMiterLimit: undefined,
|
|
||||||
lastStroke: undefined,
|
|
||||||
strokeStyle: undefined,
|
|
||||||
lineCap: undefined,
|
|
||||||
lineDash: null,
|
|
||||||
lineDashOffset: undefined,
|
|
||||||
lineJoin: undefined,
|
|
||||||
lineWidth: undefined,
|
|
||||||
miterLimit: undefined
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.render.canvas.LineStringReplay, ol.render.canvas.Replay);
|
ol.inherits(ol.render.canvas.LineStringReplay, ol.render.canvas.Replay);
|
||||||
|
|
||||||
@@ -91,74 +44,17 @@ ol.render.canvas.LineStringReplay.prototype.drawFlatCoordinates_ = function(flat
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
ol.render.canvas.LineStringReplay.prototype.getBufferedMaxExtent = function() {
|
|
||||||
if (!this.bufferedMaxExtent_) {
|
|
||||||
this.bufferedMaxExtent_ = ol.extent.clone(this.maxExtent);
|
|
||||||
if (this.maxLineWidth > 0) {
|
|
||||||
var width = this.resolution * (this.maxLineWidth + 1) / 2;
|
|
||||||
ol.extent.buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this.bufferedMaxExtent_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() {
|
|
||||||
var state = this.state_;
|
|
||||||
var strokeStyle = state.strokeStyle;
|
|
||||||
var lineCap = state.lineCap;
|
|
||||||
var lineDash = state.lineDash;
|
|
||||||
var lineDashOffset = state.lineDashOffset;
|
|
||||||
var lineJoin = state.lineJoin;
|
|
||||||
var lineWidth = state.lineWidth;
|
|
||||||
var miterLimit = state.miterLimit;
|
|
||||||
if (state.currentStrokeStyle != strokeStyle ||
|
|
||||||
state.currentLineCap != lineCap ||
|
|
||||||
!ol.array.equals(state.currentLineDash, lineDash) ||
|
|
||||||
state.currentLineDashOffset != lineDashOffset ||
|
|
||||||
state.currentLineJoin != lineJoin ||
|
|
||||||
state.currentLineWidth != lineWidth ||
|
|
||||||
state.currentMiterLimit != miterLimit) {
|
|
||||||
if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {
|
|
||||||
this.instructions.push([ol.render.canvas.Instruction.STROKE]);
|
|
||||||
state.lastStroke = this.coordinates.length;
|
|
||||||
}
|
|
||||||
state.lastStroke = 0;
|
|
||||||
this.instructions.push([
|
|
||||||
ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
|
||||||
strokeStyle, lineWidth * this.pixelRatio, lineCap, lineJoin, miterLimit,
|
|
||||||
this.applyPixelRatio(lineDash), lineDashOffset * this.pixelRatio
|
|
||||||
], [
|
|
||||||
ol.render.canvas.Instruction.BEGIN_PATH
|
|
||||||
]);
|
|
||||||
state.currentStrokeStyle = strokeStyle;
|
|
||||||
state.currentLineCap = lineCap;
|
|
||||||
state.currentLineDash = lineDash;
|
|
||||||
state.currentLineDashOffset = lineDashOffset;
|
|
||||||
state.currentLineJoin = lineJoin;
|
|
||||||
state.currentLineWidth = lineWidth;
|
|
||||||
state.currentMiterLimit = miterLimit;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.LineStringReplay.prototype.drawLineString = function(lineStringGeometry, feature) {
|
ol.render.canvas.LineStringReplay.prototype.drawLineString = function(lineStringGeometry, feature) {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
var strokeStyle = state.strokeStyle;
|
var strokeStyle = state.strokeStyle;
|
||||||
var lineWidth = state.lineWidth;
|
var lineWidth = state.lineWidth;
|
||||||
if (strokeStyle === undefined || lineWidth === undefined) {
|
if (strokeStyle === undefined || lineWidth === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.setStrokeStyle_();
|
this.updateStrokeStyle(state, true);
|
||||||
this.beginGeometry(lineStringGeometry, feature);
|
this.beginGeometry(lineStringGeometry, feature);
|
||||||
this.hitDetectionInstructions.push([
|
this.hitDetectionInstructions.push([
|
||||||
ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
||||||
@@ -179,13 +75,13 @@ ol.render.canvas.LineStringReplay.prototype.drawLineString = function(lineString
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {
|
ol.render.canvas.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
var strokeStyle = state.strokeStyle;
|
var strokeStyle = state.strokeStyle;
|
||||||
var lineWidth = state.lineWidth;
|
var lineWidth = state.lineWidth;
|
||||||
if (strokeStyle === undefined || lineWidth === undefined) {
|
if (strokeStyle === undefined || lineWidth === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.setStrokeStyle_();
|
this.updateStrokeStyle(state, true);
|
||||||
this.beginGeometry(multiLineStringGeometry, feature);
|
this.beginGeometry(multiLineStringGeometry, feature);
|
||||||
this.hitDetectionInstructions.push([
|
this.hitDetectionInstructions.push([
|
||||||
ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
||||||
@@ -212,44 +108,10 @@ ol.render.canvas.LineStringReplay.prototype.drawMultiLineString = function(multi
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.LineStringReplay.prototype.finish = function() {
|
ol.render.canvas.LineStringReplay.prototype.finish = function() {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {
|
if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {
|
||||||
this.instructions.push([ol.render.canvas.Instruction.STROKE]);
|
this.instructions.push([ol.render.canvas.Instruction.STROKE]);
|
||||||
}
|
}
|
||||||
this.reverseHitDetectionInstructions();
|
this.reverseHitDetectionInstructions();
|
||||||
this.state_ = null;
|
this.state = null;
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
ol.render.canvas.LineStringReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
|
|
||||||
var strokeStyleColor = strokeStyle.getColor();
|
|
||||||
this.state_.strokeStyle = ol.colorlike.asColorLike(strokeStyleColor ?
|
|
||||||
strokeStyleColor : ol.render.canvas.defaultStrokeStyle);
|
|
||||||
var strokeStyleLineCap = strokeStyle.getLineCap();
|
|
||||||
this.state_.lineCap = strokeStyleLineCap !== undefined ?
|
|
||||||
strokeStyleLineCap : ol.render.canvas.defaultLineCap;
|
|
||||||
var strokeStyleLineDash = strokeStyle.getLineDash();
|
|
||||||
this.state_.lineDash = strokeStyleLineDash ?
|
|
||||||
strokeStyleLineDash : ol.render.canvas.defaultLineDash;
|
|
||||||
var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();
|
|
||||||
this.state_.lineDashOffset = strokeStyleLineDashOffset ?
|
|
||||||
strokeStyleLineDashOffset : ol.render.canvas.defaultLineDashOffset;
|
|
||||||
var strokeStyleLineJoin = strokeStyle.getLineJoin();
|
|
||||||
this.state_.lineJoin = strokeStyleLineJoin !== undefined ?
|
|
||||||
strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
|
|
||||||
var strokeStyleWidth = strokeStyle.getWidth();
|
|
||||||
this.state_.lineWidth = strokeStyleWidth !== undefined ?
|
|
||||||
strokeStyleWidth : ol.render.canvas.defaultLineWidth;
|
|
||||||
var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
|
|
||||||
this.state_.miterLimit = strokeStyleMiterLimit !== undefined ?
|
|
||||||
strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
|
|
||||||
|
|
||||||
if (this.state_.lineWidth > this.maxLineWidth) {
|
|
||||||
this.maxLineWidth = this.state_.lineWidth;
|
|
||||||
// invalidate the buffered max extent cache
|
|
||||||
this.bufferedMaxExtent_ = null;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
goog.provide('ol.render.canvas.PolygonReplay');
|
goog.provide('ol.render.canvas.PolygonReplay');
|
||||||
|
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.array');
|
|
||||||
goog.require('ol.color');
|
goog.require('ol.color');
|
||||||
goog.require('ol.colorlike');
|
|
||||||
goog.require('ol.extent');
|
|
||||||
goog.require('ol.geom.flat.simplify');
|
goog.require('ol.geom.flat.simplify');
|
||||||
goog.require('ol.render.canvas');
|
goog.require('ol.render.canvas');
|
||||||
goog.require('ol.render.canvas.Instruction');
|
goog.require('ol.render.canvas.Instruction');
|
||||||
@@ -26,51 +23,6 @@ ol.render.canvas.PolygonReplay = function(
|
|||||||
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {
|
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) {
|
||||||
ol.render.canvas.Replay.call(this,
|
ol.render.canvas.Replay.call(this,
|
||||||
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);
|
tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree);
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {ol.Extent}
|
|
||||||
*/
|
|
||||||
this.bufferedMaxExtent_ = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {{currentFillStyle: (ol.ColorLike|undefined),
|
|
||||||
* currentStrokeStyle: (ol.ColorLike|undefined),
|
|
||||||
* currentLineCap: (string|undefined),
|
|
||||||
* currentLineDash: Array.<number>,
|
|
||||||
* currentLineDashOffset: (number|undefined),
|
|
||||||
* currentLineJoin: (string|undefined),
|
|
||||||
* currentLineWidth: (number|undefined),
|
|
||||||
* currentMiterLimit: (number|undefined),
|
|
||||||
* fillStyle: (ol.ColorLike|undefined),
|
|
||||||
* strokeStyle: (ol.ColorLike|undefined),
|
|
||||||
* lineCap: (string|undefined),
|
|
||||||
* lineDash: Array.<number>,
|
|
||||||
* lineDashOffset: (number|undefined),
|
|
||||||
* lineJoin: (string|undefined),
|
|
||||||
* lineWidth: (number|undefined),
|
|
||||||
* miterLimit: (number|undefined)}|null}
|
|
||||||
*/
|
|
||||||
this.state_ = {
|
|
||||||
currentFillStyle: undefined,
|
|
||||||
currentStrokeStyle: undefined,
|
|
||||||
currentLineCap: undefined,
|
|
||||||
currentLineDash: null,
|
|
||||||
currentLineDashOffset: undefined,
|
|
||||||
currentLineJoin: undefined,
|
|
||||||
currentLineWidth: undefined,
|
|
||||||
currentMiterLimit: undefined,
|
|
||||||
fillStyle: undefined,
|
|
||||||
strokeStyle: undefined,
|
|
||||||
lineCap: undefined,
|
|
||||||
lineDash: null,
|
|
||||||
lineDashOffset: undefined,
|
|
||||||
lineJoin: undefined,
|
|
||||||
lineWidth: undefined,
|
|
||||||
miterLimit: undefined
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay);
|
ol.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay);
|
||||||
|
|
||||||
@@ -84,7 +36,7 @@ ol.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay);
|
|||||||
* @return {number} End.
|
* @return {number} End.
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCoordinates, offset, ends, stride) {
|
ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCoordinates, offset, ends, stride) {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
var fill = state.fillStyle !== undefined;
|
var fill = state.fillStyle !== undefined;
|
||||||
var stroke = state.strokeStyle != undefined;
|
var stroke = state.strokeStyle != undefined;
|
||||||
var numEnds = ends.length;
|
var numEnds = ends.length;
|
||||||
@@ -127,7 +79,7 @@ ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCo
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.PolygonReplay.prototype.drawCircle = function(circleGeometry, feature) {
|
ol.render.canvas.PolygonReplay.prototype.drawCircle = function(circleGeometry, feature) {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
var fillStyle = state.fillStyle;
|
var fillStyle = state.fillStyle;
|
||||||
var strokeStyle = state.strokeStyle;
|
var strokeStyle = state.strokeStyle;
|
||||||
if (fillStyle === undefined && strokeStyle === undefined) {
|
if (fillStyle === undefined && strokeStyle === undefined) {
|
||||||
@@ -174,7 +126,7 @@ ol.render.canvas.PolygonReplay.prototype.drawCircle = function(circleGeometry, f
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) {
|
ol.render.canvas.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
this.setFillStrokeStyles_(polygonGeometry);
|
this.setFillStrokeStyles_(polygonGeometry);
|
||||||
this.beginGeometry(polygonGeometry, feature);
|
this.beginGeometry(polygonGeometry, feature);
|
||||||
// always fill the polygon for hit detection
|
// always fill the polygon for hit detection
|
||||||
@@ -201,7 +153,7 @@ ol.render.canvas.PolygonReplay.prototype.drawPolygon = function(polygonGeometry,
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {
|
ol.render.canvas.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
var fillStyle = state.fillStyle;
|
var fillStyle = state.fillStyle;
|
||||||
var strokeStyle = state.strokeStyle;
|
var strokeStyle = state.strokeStyle;
|
||||||
if (fillStyle === undefined && strokeStyle === undefined) {
|
if (fillStyle === undefined && strokeStyle === undefined) {
|
||||||
@@ -239,7 +191,7 @@ ol.render.canvas.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygo
|
|||||||
*/
|
*/
|
||||||
ol.render.canvas.PolygonReplay.prototype.finish = function() {
|
ol.render.canvas.PolygonReplay.prototype.finish = function() {
|
||||||
this.reverseHitDetectionInstructions();
|
this.reverseHitDetectionInstructions();
|
||||||
this.state_ = null;
|
this.state = null;
|
||||||
// We want to preserve topology when drawing polygons. Polygons are
|
// We want to preserve topology when drawing polygons. Polygons are
|
||||||
// simplified using quantization and point elimination. However, we might
|
// simplified using quantization and point elimination. However, we might
|
||||||
// have received a mix of quantized and non-quantized geometries, so ensure
|
// have received a mix of quantized and non-quantized geometries, so ensure
|
||||||
@@ -255,87 +207,13 @@ ol.render.canvas.PolygonReplay.prototype.finish = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
ol.render.canvas.PolygonReplay.prototype.getBufferedMaxExtent = function() {
|
|
||||||
if (!this.bufferedMaxExtent_) {
|
|
||||||
this.bufferedMaxExtent_ = ol.extent.clone(this.maxExtent);
|
|
||||||
if (this.maxLineWidth > 0) {
|
|
||||||
var width = this.resolution * (this.maxLineWidth + 1) / 2;
|
|
||||||
ol.extent.buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this.bufferedMaxExtent_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritDoc
|
|
||||||
*/
|
|
||||||
ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
|
|
||||||
var state = this.state_;
|
|
||||||
if (fillStyle) {
|
|
||||||
var fillStyleColor = fillStyle.getColor();
|
|
||||||
state.fillStyle = ol.colorlike.asColorLike(fillStyleColor ?
|
|
||||||
fillStyleColor : ol.render.canvas.defaultFillStyle);
|
|
||||||
} else {
|
|
||||||
state.fillStyle = undefined;
|
|
||||||
}
|
|
||||||
if (strokeStyle) {
|
|
||||||
var strokeStyleColor = strokeStyle.getColor();
|
|
||||||
state.strokeStyle = ol.colorlike.asColorLike(strokeStyleColor ?
|
|
||||||
strokeStyleColor : ol.render.canvas.defaultStrokeStyle);
|
|
||||||
var strokeStyleLineCap = strokeStyle.getLineCap();
|
|
||||||
state.lineCap = strokeStyleLineCap !== undefined ?
|
|
||||||
strokeStyleLineCap : ol.render.canvas.defaultLineCap;
|
|
||||||
var strokeStyleLineDash = strokeStyle.getLineDash();
|
|
||||||
state.lineDash = strokeStyleLineDash ?
|
|
||||||
strokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash;
|
|
||||||
var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();
|
|
||||||
state.lineDashOffset = strokeStyleLineDashOffset ?
|
|
||||||
strokeStyleLineDashOffset : ol.render.canvas.defaultLineDashOffset;
|
|
||||||
var strokeStyleLineJoin = strokeStyle.getLineJoin();
|
|
||||||
state.lineJoin = strokeStyleLineJoin !== undefined ?
|
|
||||||
strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
|
|
||||||
var strokeStyleWidth = strokeStyle.getWidth();
|
|
||||||
state.lineWidth = strokeStyleWidth !== undefined ?
|
|
||||||
strokeStyleWidth : ol.render.canvas.defaultLineWidth;
|
|
||||||
var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
|
|
||||||
state.miterLimit = strokeStyleMiterLimit !== undefined ?
|
|
||||||
strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
|
|
||||||
|
|
||||||
if (state.lineWidth > this.maxLineWidth) {
|
|
||||||
this.maxLineWidth = state.lineWidth;
|
|
||||||
// invalidate the buffered max extent cache
|
|
||||||
this.bufferedMaxExtent_ = null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
state.strokeStyle = undefined;
|
|
||||||
state.lineCap = undefined;
|
|
||||||
state.lineDash = null;
|
|
||||||
state.lineDashOffset = undefined;
|
|
||||||
state.lineJoin = undefined;
|
|
||||||
state.lineWidth = undefined;
|
|
||||||
state.miterLimit = undefined;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
|
* @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function(geometry) {
|
ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function(geometry) {
|
||||||
var state = this.state_;
|
var state = this.state;
|
||||||
var fillStyle = state.fillStyle;
|
var fillStyle = state.fillStyle;
|
||||||
var strokeStyle = state.strokeStyle;
|
|
||||||
var lineCap = state.lineCap;
|
|
||||||
var lineDash = state.lineDash;
|
|
||||||
var lineDashOffset = state.lineDashOffset;
|
|
||||||
var lineJoin = state.lineJoin;
|
|
||||||
var lineWidth = state.lineWidth;
|
|
||||||
var miterLimit = state.miterLimit;
|
|
||||||
if (fillStyle !== undefined && (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle)) {
|
if (fillStyle !== undefined && (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle)) {
|
||||||
var fillInstruction = [ol.render.canvas.Instruction.SET_FILL_STYLE, fillStyle];
|
var fillInstruction = [ol.render.canvas.Instruction.SET_FILL_STYLE, fillStyle];
|
||||||
if (typeof fillStyle !== 'string') {
|
if (typeof fillStyle !== 'string') {
|
||||||
@@ -345,26 +223,7 @@ ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function(geometr
|
|||||||
this.instructions.push(fillInstruction);
|
this.instructions.push(fillInstruction);
|
||||||
state.currentFillStyle = state.fillStyle;
|
state.currentFillStyle = state.fillStyle;
|
||||||
}
|
}
|
||||||
if (strokeStyle !== undefined) {
|
if (state.strokeStyle !== undefined) {
|
||||||
if (state.currentStrokeStyle != strokeStyle ||
|
this.updateStrokeStyle(state, false);
|
||||||
state.currentLineCap != lineCap ||
|
|
||||||
!ol.array.equals(state.currentLineDash, lineDash) ||
|
|
||||||
state.currentLineDashOffset != lineDashOffset ||
|
|
||||||
state.currentLineJoin != lineJoin ||
|
|
||||||
state.currentLineWidth != lineWidth ||
|
|
||||||
state.currentMiterLimit != miterLimit) {
|
|
||||||
this.instructions.push([
|
|
||||||
ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
|
||||||
strokeStyle, lineWidth * this.pixelRatio, lineCap, lineJoin, miterLimit,
|
|
||||||
this.applyPixelRatio(lineDash), lineDashOffset * this.pixelRatio
|
|
||||||
]);
|
|
||||||
state.currentStrokeStyle = strokeStyle;
|
|
||||||
state.currentLineCap = lineCap;
|
|
||||||
state.currentLineDash = lineDash;
|
|
||||||
state.currentLineDashOffset = lineDashOffset;
|
|
||||||
state.currentLineJoin = lineJoin;
|
|
||||||
state.currentLineWidth = lineWidth;
|
|
||||||
state.currentMiterLimit = miterLimit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ goog.provide('ol.render.canvas.Replay');
|
|||||||
|
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.array');
|
goog.require('ol.array');
|
||||||
|
goog.require('ol.colorlike');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.extent.Relationship');
|
goog.require('ol.extent.Relationship');
|
||||||
goog.require('ol.geom.GeometryType');
|
goog.require('ol.geom.GeometryType');
|
||||||
@@ -98,6 +99,12 @@ ol.render.canvas.Replay = function(tolerance, maxExtent, resolution, pixelRatio,
|
|||||||
*/
|
*/
|
||||||
this.beginGeometryInstruction2_ = null;
|
this.beginGeometryInstruction2_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {ol.Extent}
|
||||||
|
*/
|
||||||
|
this.bufferedMaxExtent_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @protected
|
* @protected
|
||||||
* @type {Array.<*>}
|
* @type {Array.<*>}
|
||||||
@@ -134,6 +141,12 @@ ol.render.canvas.Replay = function(tolerance, maxExtent, resolution, pixelRatio,
|
|||||||
*/
|
*/
|
||||||
this.pixelCoordinates_ = null;
|
this.pixelCoordinates_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @protected
|
||||||
|
* @type {ol.CanvasFillStrokeState}
|
||||||
|
*/
|
||||||
|
this.state = /** @type {ol.CanvasFillStrokeState} */ ({});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!ol.Transform}
|
* @type {!ol.Transform}
|
||||||
@@ -782,6 +795,103 @@ ol.render.canvas.Replay.prototype.reverseHitDetectionInstructions = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
ol.render.canvas.Replay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
|
||||||
|
var state = this.state;
|
||||||
|
if (fillStyle) {
|
||||||
|
var fillStyleColor = fillStyle.getColor();
|
||||||
|
state.fillStyle = ol.colorlike.asColorLike(fillStyleColor ?
|
||||||
|
fillStyleColor : ol.render.canvas.defaultFillStyle);
|
||||||
|
} else {
|
||||||
|
state.fillStyle = undefined;
|
||||||
|
}
|
||||||
|
if (strokeStyle) {
|
||||||
|
var strokeStyleColor = strokeStyle.getColor();
|
||||||
|
state.strokeStyle = ol.colorlike.asColorLike(strokeStyleColor ?
|
||||||
|
strokeStyleColor : ol.render.canvas.defaultStrokeStyle);
|
||||||
|
var strokeStyleLineCap = strokeStyle.getLineCap();
|
||||||
|
state.lineCap = strokeStyleLineCap !== undefined ?
|
||||||
|
strokeStyleLineCap : ol.render.canvas.defaultLineCap;
|
||||||
|
var strokeStyleLineDash = strokeStyle.getLineDash();
|
||||||
|
state.lineDash = strokeStyleLineDash ?
|
||||||
|
strokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash;
|
||||||
|
var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();
|
||||||
|
state.lineDashOffset = strokeStyleLineDashOffset ?
|
||||||
|
strokeStyleLineDashOffset : ol.render.canvas.defaultLineDashOffset;
|
||||||
|
var strokeStyleLineJoin = strokeStyle.getLineJoin();
|
||||||
|
state.lineJoin = strokeStyleLineJoin !== undefined ?
|
||||||
|
strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
|
||||||
|
var strokeStyleWidth = strokeStyle.getWidth();
|
||||||
|
state.lineWidth = strokeStyleWidth !== undefined ?
|
||||||
|
strokeStyleWidth : ol.render.canvas.defaultLineWidth;
|
||||||
|
var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
|
||||||
|
state.miterLimit = strokeStyleMiterLimit !== undefined ?
|
||||||
|
strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
|
||||||
|
|
||||||
|
if (state.lineWidth > this.maxLineWidth) {
|
||||||
|
this.maxLineWidth = state.lineWidth;
|
||||||
|
// invalidate the buffered max extent cache
|
||||||
|
this.bufferedMaxExtent_ = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
state.strokeStyle = undefined;
|
||||||
|
state.lineCap = undefined;
|
||||||
|
state.lineDash = null;
|
||||||
|
state.lineDashOffset = undefined;
|
||||||
|
state.lineJoin = undefined;
|
||||||
|
state.lineWidth = undefined;
|
||||||
|
state.miterLimit = undefined;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ol.CanvasFillStrokeState} state State.
|
||||||
|
* @param {boolean} managePath Manage stoke() - beginPath() for linestrings.
|
||||||
|
*/
|
||||||
|
ol.render.canvas.Replay.prototype.updateStrokeStyle = function(state, managePath) {
|
||||||
|
var strokeStyle = state.strokeStyle;
|
||||||
|
var lineCap = state.lineCap;
|
||||||
|
var lineDash = state.lineDash;
|
||||||
|
var lineDashOffset = state.lineDashOffset;
|
||||||
|
var lineJoin = state.lineJoin;
|
||||||
|
var lineWidth = state.lineWidth;
|
||||||
|
var miterLimit = state.miterLimit;
|
||||||
|
if (state.currentStrokeStyle != strokeStyle ||
|
||||||
|
state.currentLineCap != lineCap ||
|
||||||
|
!ol.array.equals(state.currentLineDash, lineDash) ||
|
||||||
|
state.currentLineDashOffset != lineDashOffset ||
|
||||||
|
state.currentLineJoin != lineJoin ||
|
||||||
|
state.currentLineWidth != lineWidth ||
|
||||||
|
state.currentMiterLimit != miterLimit) {
|
||||||
|
if (managePath) {
|
||||||
|
if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {
|
||||||
|
this.instructions.push([ol.render.canvas.Instruction.STROKE]);
|
||||||
|
state.lastStroke = this.coordinates.length;
|
||||||
|
}
|
||||||
|
state.lastStroke = 0;
|
||||||
|
}
|
||||||
|
this.instructions.push([
|
||||||
|
ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
||||||
|
strokeStyle, lineWidth * this.pixelRatio, lineCap, lineJoin, miterLimit,
|
||||||
|
this.applyPixelRatio(lineDash), lineDashOffset * this.pixelRatio
|
||||||
|
]);
|
||||||
|
if (managePath) {
|
||||||
|
this.instructions.push([ol.render.canvas.Instruction.BEGIN_PATH]);
|
||||||
|
}
|
||||||
|
state.currentStrokeStyle = strokeStyle;
|
||||||
|
state.currentLineCap = lineCap;
|
||||||
|
state.currentLineDash = lineDash;
|
||||||
|
state.currentLineDashOffset = lineDashOffset;
|
||||||
|
state.currentLineJoin = lineJoin;
|
||||||
|
state.currentLineWidth = lineWidth;
|
||||||
|
state.currentMiterLimit = miterLimit;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
|
* @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
|
||||||
* @param {ol.Feature|ol.render.Feature} feature Feature.
|
* @param {ol.Feature|ol.render.Feature} feature Feature.
|
||||||
@@ -812,5 +922,12 @@ ol.render.canvas.Replay.prototype.finish = ol.nullFunction;
|
|||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.Replay.prototype.getBufferedMaxExtent = function() {
|
ol.render.canvas.Replay.prototype.getBufferedMaxExtent = function() {
|
||||||
return this.maxExtent;
|
if (!this.bufferedMaxExtent_) {
|
||||||
|
this.bufferedMaxExtent_ = ol.extent.clone(this.maxExtent);
|
||||||
|
if (this.maxLineWidth > 0) {
|
||||||
|
var width = this.resolution * (this.maxLineWidth + 1) / 2;
|
||||||
|
ol.extent.buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.bufferedMaxExtent_;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ ol.render.canvas.TextReplay = function(
|
|||||||
* @private
|
* @private
|
||||||
* @type {ol.CanvasTextState}
|
* @type {ol.CanvasTextState}
|
||||||
*/
|
*/
|
||||||
this.textState_ = {};
|
this.textState_ = /** @type {ol.CanvasTextState} */ ({});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -86,6 +86,28 @@ ol.CanvasFillState;
|
|||||||
ol.CanvasFunctionType;
|
ol.CanvasFunctionType;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {{currentFillStyle: (ol.ColorLike|undefined),
|
||||||
|
* currentStrokeStyle: (ol.ColorLike|undefined),
|
||||||
|
* currentLineCap: (string|undefined),
|
||||||
|
* currentLineDash: Array.<number>,
|
||||||
|
* currentLineDashOffset: (number|undefined),
|
||||||
|
* currentLineJoin: (string|undefined),
|
||||||
|
* currentLineWidth: (number|undefined),
|
||||||
|
* currentMiterLimit: (number|undefined),
|
||||||
|
* lastStroke: (number|undefined),
|
||||||
|
* fillStyle: (ol.ColorLike|undefined),
|
||||||
|
* strokeStyle: (ol.ColorLike|undefined),
|
||||||
|
* lineCap: (string|undefined),
|
||||||
|
* lineDash: Array.<number>,
|
||||||
|
* lineDashOffset: (number|undefined),
|
||||||
|
* lineJoin: (string|undefined),
|
||||||
|
* lineWidth: (number|undefined),
|
||||||
|
* miterLimit: (number|undefined)}|null}
|
||||||
|
*/
|
||||||
|
ol.CanvasFillStrokeState;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{lineCap: string,
|
* @typedef {{lineCap: string,
|
||||||
* lineDash: Array.<number>,
|
* lineDash: Array.<number>,
|
||||||
|
|||||||
Reference in New Issue
Block a user