From 628fa79a111b98c5d3d73aa03a46f9fa5fb6cd9c Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Tue, 3 Dec 2019 14:29:47 -0500 Subject: [PATCH] make stretchable images work with icon-text-fit: none (#9045) --- src/data/bucket/symbol_bucket.js | 25 +-- src/symbol/quads.js | 7 +- src/symbol/symbol_layout.js | 5 +- .../stretchable-content/expected.png | Bin 0 -> 2138 bytes .../icon-image/stretchable-content/style.json | 41 ++++ .../icon-image/stretchable/expected.png | Bin 0 -> 2510 bytes .../icon-image/stretchable/style.json | 41 ++++ .../expected.png | Bin 0 -> 12185 bytes .../stretch-nine-part-just-height/style.json | 192 ++++++++++++++++++ .../stretch-nine-part-just-width/expected.png | Bin 0 -> 13049 bytes .../stretch-nine-part-just-width/style.json | 192 ++++++++++++++++++ 11 files changed, 481 insertions(+), 22 deletions(-) create mode 100644 test/integration/render-tests/icon-image/stretchable-content/expected.png create mode 100644 test/integration/render-tests/icon-image/stretchable-content/style.json create mode 100644 test/integration/render-tests/icon-image/stretchable/expected.png create mode 100644 test/integration/render-tests/icon-image/stretchable/style.json create mode 100644 test/integration/render-tests/icon-text-fit/stretch-nine-part-just-height/expected.png create mode 100644 test/integration/render-tests/icon-text-fit/stretch-nine-part-just-height/style.json create mode 100644 test/integration/render-tests/icon-text-fit/stretch-nine-part-just-width/expected.png create mode 100644 test/integration/render-tests/icon-text-fit/stretch-nine-part-just-width/style.json diff --git a/src/data/bucket/symbol_bucket.js b/src/data/bucket/symbol_bucket.js index 2b7b751389e..2369e6029c5 100644 --- a/src/data/bucket/symbol_bucket.js +++ b/src/data/bucket/symbol_bucket.js @@ -839,22 +839,13 @@ class SymbolBucket implements Bucket { return this.iconCollisionCircle.segments.get().length > 0; } - addIndicesForPlacedTextSymbol(placedTextSymbolIndex: number) { - const placedSymbol = this.text.placedSymbolArray.get(placedTextSymbolIndex); + addIndicesForPlacedSymbol(iconOrText: SymbolBuffers, placedSymbolIndex: number) { + const placedSymbol = iconOrText.placedSymbolArray.get(placedSymbolIndex); const endIndex = placedSymbol.vertexStartIndex + placedSymbol.numGlyphs * 4; for (let vertexIndex = placedSymbol.vertexStartIndex; vertexIndex < endIndex; vertexIndex += 4) { - this.text.indexArray.emplaceBack(vertexIndex, vertexIndex + 1, vertexIndex + 2); - this.text.indexArray.emplaceBack(vertexIndex + 1, vertexIndex + 2, vertexIndex + 3); - } - } - - addIndicesForPlacedIconSymbol(placedIconSymbolIndex: number) { - const placedIcon = this.icon.placedSymbolArray.get(placedIconSymbolIndex); - if (placedIcon.numGlyphs) { - const vertexIndex = placedIcon.vertexStartIndex; - this.icon.indexArray.emplaceBack(vertexIndex, vertexIndex + 1, vertexIndex + 2); - this.icon.indexArray.emplaceBack(vertexIndex + 1, vertexIndex + 2, vertexIndex + 3); + iconOrText.indexArray.emplaceBack(vertexIndex, vertexIndex + 1, vertexIndex + 2); + iconOrText.indexArray.emplaceBack(vertexIndex + 1, vertexIndex + 2, vertexIndex + 3); } } @@ -917,20 +908,20 @@ class SymbolBucket implements Bucket { // to avoid duplicate opacity entries when multiple justifications // share the same glyphs. if (index >= 0 && array.indexOf(index) === i) { - this.addIndicesForPlacedTextSymbol(index); + this.addIndicesForPlacedSymbol(this.text, index); } }); if (symbolInstance.verticalPlacedTextSymbolIndex >= 0) { - this.addIndicesForPlacedTextSymbol(symbolInstance.verticalPlacedTextSymbolIndex); + this.addIndicesForPlacedSymbol(this.text, symbolInstance.verticalPlacedTextSymbolIndex); } if (symbolInstance.placedIconSymbolIndex >= 0) { - this.addIndicesForPlacedIconSymbol(symbolInstance.placedIconSymbolIndex); + this.addIndicesForPlacedSymbol(this.icon, symbolInstance.placedIconSymbolIndex); } if (symbolInstance.verticalPlacedIconSymbolIndex >= 0) { - this.addIndicesForPlacedIconSymbol(symbolInstance.verticalPlacedIconSymbolIndex); + this.addIndicesForPlacedSymbol(this.icon, symbolInstance.verticalPlacedIconSymbolIndex); } } diff --git a/src/symbol/quads.js b/src/symbol/quads.js index 2c3d6423167..fd5f629ea1a 100644 --- a/src/symbol/quads.js +++ b/src/symbol/quads.js @@ -59,7 +59,8 @@ const border = IMAGE_PADDING; export function getIconQuads( shapedIcon: PositionedIcon, iconRotate: number, - isSDFIcon: boolean): Array { + isSDFIcon: boolean, + hasIconTextFit: boolean): Array { const quads = []; const image = shapedIcon.image; @@ -88,7 +89,7 @@ export function getIconQuads( let fixedOffsetY = 0; let fixedContentHeight = fixedHeight; - if (image.content) { + if (image.content && hasIconTextFit) { const content = image.content; stretchOffsetX = sumWithinRange(stretchX, 0, content[0]); stretchOffsetY = sumWithinRange(stretchY, 0, content[1]); @@ -153,7 +154,7 @@ export function getIconQuads( return {tl, tr, bl, br, tex: subRect, writingMode: undefined, glyphOffset: [0, 0], sectionIndex: 0, pixelOffsetTL, pixelOffsetBR, minFontScaleX, minFontScaleY, isSDF: isSDFIcon}; }; - if (!image.stretchX && !image.stretchY) { + if (!hasIconTextFit || (!image.stretchX && !image.stretchY)) { quads.push(makeBox( {fixed: 0, stretch: -1}, {fixed: 0, stretch: -1}, diff --git a/src/symbol/symbol_layout.js b/src/symbol/symbol_layout.js index 28c182ba5c8..a79902e9bcf 100644 --- a/src/symbol/symbol_layout.js +++ b/src/symbol/symbol_layout.js @@ -608,8 +608,9 @@ function addSymbol(bucket: SymbolBucket, // For more info check `updateVariableAnchors` in `draw_symbol.js` . if (shapedIcon) { const iconRotate = layer.layout.get('icon-rotate').evaluate(feature, {}); - const iconQuads = getIconQuads(shapedIcon, iconRotate, isSDFIcon); - const verticalIconQuads = verticallyShapedIcon ? getIconQuads(verticallyShapedIcon, iconRotate, isSDFIcon) : undefined; + const hasIconTextFit = layer.layout.get('icon-text-fit') !== 'none'; + const iconQuads = getIconQuads(shapedIcon, iconRotate, isSDFIcon, hasIconTextFit); + const verticalIconQuads = verticallyShapedIcon ? getIconQuads(verticallyShapedIcon, iconRotate, isSDFIcon, hasIconTextFit) : undefined; iconCollisionFeature = new CollisionFeature(collisionBoxArray, line, anchor, featureIndex, sourceLayerIndex, bucketIndex, shapedIcon, iconBoxScale, iconPadding, /*align boxes to line*/false, bucket.overscaling, iconRotate); numIconVertices = iconQuads.length * 4; diff --git a/test/integration/render-tests/icon-image/stretchable-content/expected.png b/test/integration/render-tests/icon-image/stretchable-content/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..04453e4b9616527293c78fc0d799adc96844d630 GIT binary patch literal 2138 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 F{vSzyv6uh= literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/icon-image/stretchable/style.json b/test/integration/render-tests/icon-image/stretchable/style.json new file mode 100644 index 00000000000..56edb0c4305 --- /dev/null +++ b/test/integration/render-tests/icon-image/stretchable/style.json @@ -0,0 +1,41 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 200, + "height": 150 + } + }, + "zoom": 0.5, + "sources": { + "geojson": { + "type": "geojson", + "data": "local://geojson/anchors.json" + } + }, + "sprite": "local://sprites/stretch", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "anchor-left", + "type": "symbol", + "source": "geojson", + "layout": { + "icon-image": "nine-part-content", + "icon-allow-overlap": true, + "icon-ignore-placement": true + } + }, + { + "id": "anchors", + "type": "circle", + "source": "geojson", + "paint": { + "circle-radius": 2, + "circle-color": "green", + "circle-stroke-color": "white", + "circle-stroke-width": 1 + } + } + ] +} diff --git a/test/integration/render-tests/icon-text-fit/stretch-nine-part-just-height/expected.png b/test/integration/render-tests/icon-text-fit/stretch-nine-part-just-height/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..cedb65062790b93b4aab5d4f000a91bf34646148 GIT binary patch literal 12185 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 MRZy3&lr;