diff --git a/src/ol/render/canvas/replay.js b/src/ol/render/canvas/replay.js index cc28703652..255c59d4ec 100644 --- a/src/ol/render/canvas/replay.js +++ b/src/ol/render/canvas/replay.js @@ -1202,12 +1202,16 @@ ol.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay); */ ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCoordinates, offset, ends, stride) { var state = this.state_; + var fill = state.fillStyle !== undefined; + var stroke = state.strokeStyle != undefined; + var numEnds = ends.length; + if (!fill && !stroke) { + return ends[numEnds - 1]; + } var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH]; this.instructions.push(beginPathInstruction); this.hitDetectionInstructions.push(beginPathInstruction); - var stroke = state.strokeStyle != undefined; - var i, ii; - for (i = 0, ii = ends.length; i < ii; ++i) { + for (var i = 0; i < numEnds; ++i) { var end = ends[i]; var myBegin = this.coordinates.length; var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, @@ -1231,7 +1235,7 @@ ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCo // FIXME or all polygons together? var fillInstruction = [ol.render.canvas.Instruction.FILL]; this.hitDetectionInstructions.push(fillInstruction); - if (state.fillStyle !== undefined) { + if (fill) { this.instructions.push(fillInstruction); } if (stroke) { diff --git a/test/spec/ol/renderer/canvas/replay.test.js b/test/spec/ol/renderer/canvas/replay.test.js index bace66747d..ed2feb861f 100644 --- a/test/spec/ol/renderer/canvas/replay.test.js +++ b/test/spec/ol/renderer/canvas/replay.test.js @@ -108,14 +108,35 @@ describe('ol.render.canvas.LineStringReplay', function() { describe('ol.render.canvas.PolygonReplay', function() { + var replay; + + beforeEach(function() { + var tolerance = 1; + var extent = [-180, -90, 180, 90]; + var resolution = 10; + replay = new ol.render.canvas.PolygonReplay(tolerance, extent, + resolution); + }); + + describe('#drawFlatCoordinatess_()', function() { + it('returns correct offset', function() { + var coords = [1, 2, 3, 4, 5, 6, 1, 2, 1, 2, 3, 4, 5, 6, 1, 2]; + var ends = [7, 14]; + var stroke = new ol.style.Stroke({ + width: 5 + }); + replay.setFillStrokeStyle(null, stroke); + var offset = replay.drawFlatCoordinatess_(coords, 0, ends, 2); + expect(offset).to.be(14); + replay.setFillStrokeStyle(null, null); + offset = replay.drawFlatCoordinatess_(coords, 0, ends, 2); + expect(offset).to.be(14); + }); + }); + describe('#getBufferedMaxExtent()', function() { it('buffers the max extent to accommodate stroke width', function() { - var tolerance = 1; - var extent = [-180, -90, 180, 90]; - var resolution = 10; - var replay = new ol.render.canvas.PolygonReplay(tolerance, extent, - resolution); var stroke = new ol.style.Stroke({ width: 5 });