From 4a6db3d2f8d98607cdad0656f857f9248851b2ba Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Thu, 1 Apr 2021 12:08:32 +0200 Subject: [PATCH] Fix icon displacement --- .../cases/regularshape-style/expected.png | Bin 7613 -> 7294 bytes rendering/cases/regularshape-style/main.js | 17 ++++++-- rendering/data/cross.svg | 9 +++++ src/ol/style/Icon.js | 7 ++-- test/spec/ol/style/icon.test.js | 38 ++++++++++++------ 5 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 rendering/data/cross.svg diff --git a/rendering/cases/regularshape-style/expected.png b/rendering/cases/regularshape-style/expected.png index f9ec11d4993843a69a815830e0b8ab7fecca897d..20581d3a2b5e5b186ee3542d3fae1ac9b942a86e 100644 GIT binary patch literal 7294 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 G9r-`5Pk|2r literal 7613 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 + + + + + diff --git a/src/ol/style/Icon.js b/src/ol/style/Icon.js index 916f6c5aa3..cc5cdfcd18 100644 --- a/src/ol/style/Icon.js +++ b/src/ol/style/Icon.js @@ -285,6 +285,10 @@ class Icon extends ImageStyle { anchor[1] = -anchor[1] + size[1]; } } + const displacement = this.getDisplacement(); + anchor[0] -= displacement[0]; + anchor[1] += displacement[1]; + this.normalizedAnchor_ = anchor; return this.normalizedAnchor_; } @@ -368,7 +372,6 @@ class Icon extends ImageStyle { return this.origin_; } let offset = this.offset_; - const displacement = this.getDisplacement(); if (this.offsetOrigin_ != IconOrigin.TOP_LEFT) { const size = this.getSize(); @@ -390,8 +393,6 @@ class Icon extends ImageStyle { offset[1] = iconImageSize[1] - size[1] - offset[1]; } } - offset[0] += displacement[0]; - offset[1] += displacement[1]; this.origin_ = offset; return this.origin_; } diff --git a/test/spec/ol/style/icon.test.js b/test/spec/ol/style/icon.test.js index 703e8e6a76..7a3cf48d97 100644 --- a/test/spec/ol/style/icon.test.js +++ b/test/spec/ol/style/icon.test.js @@ -173,6 +173,32 @@ describe('ol.style.Icon', function () { }); expect(iconStyle.getAnchor()).to.eql([27, 12]); }); + + it('uses a top right anchor origin + displacement', function () { + const iconStyle = new Icon({ + src: 'test.png', + size: size, + anchor: fractionAnchor, + anchorOrigin: 'top-right', + displacement: [20, 10], + }); + expect(iconStyle.getAnchor()).to.eql([ + size[0] * (1 - fractionAnchor[0]) - 20, + size[1] * fractionAnchor[1] + 10, + ]); + }); + + it('uses displacement', function () { + const iconStyle = new Icon({ + src: 'test.png', + size: size, + displacement: [20, 10], + }); + expect(iconStyle.getAnchor()).to.eql([ + size[0] / 2 - 20, + size[1] / 2 + 10, + ]); + }); }); describe('#setAnchor', function () { @@ -234,18 +260,6 @@ describe('ol.style.Icon', function () { iconStyle.iconImage_.size_ = imageSize; expect(iconStyle.getOrigin()).to.eql([92, 20]); }); - - it('uses a top right offset origin + displacement', function () { - const iconStyle = new Icon({ - src: 'test.png', - size: size, - offset: offset, - offsetOrigin: 'top-right', - displacement: [20, 10], - }); - iconStyle.iconImage_.size_ = imageSize; - expect(iconStyle.getOrigin()).to.eql([92 + 20, 20 + 10]); - }); }); describe('#getImageSize', function () {