From e51aa87e1c6cd85a2dd8a866fa2345d298e4d886 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Mon, 31 Jul 2017 20:19:50 -0400 Subject: [PATCH 1/3] Implement DDS for `text-max-width` property --- src/data/bucket/symbol_bucket.js | 4 +++- src/style-spec/reference/v8.json | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/data/bucket/symbol_bucket.js b/src/data/bucket/symbol_bucket.js index 5490d70edf5..4c345264ba3 100644 --- a/src/data/bucket/symbol_bucket.js +++ b/src/data/bucket/symbol_bucket.js @@ -404,7 +404,6 @@ class SymbolBucket { const oneEm = 24; const lineHeight = layout['text-line-height'] * oneEm; - const maxWidth = layout['symbol-placement'] !== 'line' ? layout['text-max-width'] * oneEm : 0; const spacing = layout['text-letter-spacing'] * oneEm; const fontstack = this.fontstack = layout['text-font'].join(','); const textAlongLine = layout['text-rotation-alignment'] === 'map' && layout['symbol-placement'] === 'line'; @@ -418,6 +417,9 @@ class SymbolBucket { const spacingIfAllowed = scriptDetection.allowsLetterSpacing(feature.text) ? spacing : 0; const textAnchor = this.layers[0].getLayoutValue('text-anchor', {zoom: this.zoom}, feature.properties); const textJustify = this.layers[0].getLayoutValue('text-justify', {zoom: this.zoom}, feature.properties); + const maxWidth = layout['symbol-placement'] !== 'line' ? + this.layers[0].getLayoutValue('text-max-width', {zoom: this.zoom}, feature.properties) * oneEm : + 0; shapedTextOrientations = { [WritingMode.horizontal]: shapeText(feature.text, stacks[fontstack], maxWidth, lineHeight, textAnchor, textJustify, spacingIfAllowed, textOffset, oneEm, WritingMode.horizontal), diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index 7062b240902..593c71b6d7f 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -1210,6 +1210,7 @@ "units": "ems", "function": "interpolated", "zoom-function": true, + "property-function": true, "doc": "The maximum line width for text wrapping.", "requires": [ "text-field" @@ -1221,7 +1222,9 @@ "ios": "2.0.0", "macos": "0.1.0" }, - "data-driven styling": {} + "data-driven styling": { + "js": "0.40.0" + } } }, "text-line-height": { From d0ca8dd51ca0af6bc4e990e2a18888a6a2c41a28 Mon Sep 17 00:00:00 2001 From: Nicki Dlugash Date: Mon, 31 Jul 2017 20:24:11 -0400 Subject: [PATCH 2/3] add test for `text-max-width` property function --- .../property-function/expected.png | Bin 0 -> 12561 bytes .../property-function/style.json | 64 ++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 test/integration/render-tests/text-max-width/property-function/expected.png create mode 100644 test/integration/render-tests/text-max-width/property-function/style.json diff --git a/test/integration/render-tests/text-max-width/property-function/expected.png b/test/integration/render-tests/text-max-width/property-function/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..3be4c11a84486174c8c6922109ae0d1340ef73a5 GIT binary patch literal 12561 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 w? Date: Tue, 1 Aug 2017 11:00:12 -0400 Subject: [PATCH 3/3] add test for `text-max-width` zoom-and-property function --- .../property-function/style.json | 1 - .../zoom-and-property-function/expected.png | Bin 0 -> 25258 bytes .../zoom-and-property-function/style.json | 75 ++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 test/integration/render-tests/text-max-width/zoom-and-property-function/expected.png create mode 100644 test/integration/render-tests/text-max-width/zoom-and-property-function/style.json diff --git a/test/integration/render-tests/text-max-width/property-function/style.json b/test/integration/render-tests/text-max-width/property-function/style.json index e33d985721a..8b7b950b696 100644 --- a/test/integration/render-tests/text-max-width/property-function/style.json +++ b/test/integration/render-tests/text-max-width/property-function/style.json @@ -53,7 +53,6 @@ "type": "identity", "property": "width" }, - "text-allow-overlap": true, "text-font": [ "Open Sans Semibold", "Arial Unicode MS Bold" diff --git a/test/integration/render-tests/text-max-width/zoom-and-property-function/expected.png b/test/integration/render-tests/text-max-width/zoom-and-property-function/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..4a664e568ea528a7a55c3831520ff06bdd3aa11e GIT binary patch literal 25258 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