diff --git a/src/ol/render/canvas/replay.js b/src/ol/render/canvas/replay.js index d9060df9f5..7eb19173f3 100644 --- a/src/ol/render/canvas/replay.js +++ b/src/ol/render/canvas/replay.js @@ -313,7 +313,7 @@ ol.render.canvas.Replay.prototype.replay_ = function( var dx = x2 - x1; var dy = y2 - y1; var r = Math.sqrt(dx * dx + dy * dy); - context.moveTo(x2, y2); + context.moveTo(x1 + r, y1); context.arc(x1, y1, r, 0, 2 * Math.PI, true); ++i; break; diff --git a/test_rendering/spec/ol/layer/expected/vector-canvas-rotated.png b/test_rendering/spec/ol/layer/expected/vector-canvas-rotated.png new file mode 100644 index 0000000000..fb1efcf21f Binary files /dev/null and b/test_rendering/spec/ol/layer/expected/vector-canvas-rotated.png differ diff --git a/test_rendering/spec/ol/layer/vector.test.js b/test_rendering/spec/ol/layer/vector.test.js index a64903069b..0ab45d9762 100644 --- a/test_rendering/spec/ol/layer/vector.test.js +++ b/test_rendering/spec/ol/layer/vector.test.js @@ -96,6 +96,26 @@ describe('ol.rendering.layer.Vector', function() { }); }); + it('renders rotation correctly with the canvas renderer', function(done) { + map = createMap('canvas'); + map.getView().setRotation(Math.PI + Math.PI / 4); + addPolygon(300); + addCircle(500); + map.addLayer(new ol.layer.Vector({ + source: source, + style: new ol.style.Style({ + stroke: new ol.style.Stroke({ + width: 2, + color: 'black' + }) + }) + })); + map.once('postrender', function() { + expectResemble(map, 'spec/ol/layer/expected/vector-canvas-rotated.png', + 1.7, done); + }); + }); + it('renders fill/stroke batches correctly with the canvas renderer', function(done) { map = createMap('canvas'); source = new ol.source.Vector({