diff --git a/src/ol/render/canvas/canvasreplay.js b/src/ol/render/canvas/canvasreplay.js index e8ed38e661..90a168be4d 100644 --- a/src/ol/render/canvas/canvasreplay.js +++ b/src/ol/render/canvas/canvasreplay.js @@ -343,8 +343,10 @@ ol.render.canvas.Replay.prototype.replay_ = function( context.globalAlpha = alpha * opacity; } - context.drawImage(image, originX, originY, width, height, - x, y, width * pixelRatio, height * pixelRatio); + var w = width - originX; + var h = height - originY; + context.drawImage(image, originX, originY, w, h, x, y, + w * pixelRatio, h * pixelRatio); if (opacity != 1) { context.globalAlpha = alpha; diff --git a/test_rendering/spec/ol/style/expected/icon-canvas-offset.png b/test_rendering/spec/ol/style/expected/icon-canvas-offset.png new file mode 100644 index 0000000000..322ffda401 Binary files /dev/null and b/test_rendering/spec/ol/style/expected/icon-canvas-offset.png differ diff --git a/test_rendering/spec/ol/style/icon.test.js b/test_rendering/spec/ol/style/icon.test.js index d89bbd8a5f..dc143c0896 100644 --- a/test_rendering/spec/ol/style/icon.test.js +++ b/test_rendering/spec/ol/style/icon.test.js @@ -30,7 +30,7 @@ describe('ol.rendering.style.Icon', function() { disposeMap(map); }); - function createFeatures(callback) { + function createFeatures(callback, offset) { var feature; feature = new ol.Feature({ geometry: new ol.geom.Point([0, 0]) @@ -44,6 +44,7 @@ describe('ol.rendering.style.Icon', function() { anchorXUnits: 'fraction', anchorYUnits: 'pixels', opacity: 0.75, + offset: offset, scale: 0.5, img: img, imgSize: [32, 48] @@ -63,6 +64,14 @@ describe('ol.rendering.style.Icon', function() { }); }); + it('tests the canvas renderer with an offset', function(done) { + map = createMap('canvas'); + createFeatures(function() { + expectResemble(map, 'spec/ol/style/expected/icon-canvas-offset.png', + IMAGE_TOLERANCE, done); + }, [10, 10]); + }); + it('tests the WebGL renderer', function(done) { assertWebGL(); map = createMap('webgl');