From 748f0d712fb9624af683fe27b80302ac5dd1917a Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Mon, 27 Mar 2017 18:02:48 -0700 Subject: [PATCH 1/3] [node] fix node bindings :bug: --- platform/node/src/node_map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp index c3c26a9948a..674aae7451e 100644 --- a/platform/node/src/node_map.cpp +++ b/platform/node/src/node_map.cpp @@ -63,7 +63,7 @@ void NodeMap::Init(v8::Local target) { Nan::SetPrototypeMethod(tpl, "addLayer", AddLayer); Nan::SetPrototypeMethod(tpl, "removeLayer", RemoveLayer); Nan::SetPrototypeMethod(tpl, "addImage", AddImage); - Nan::SetPrototypeMethod(tpl, "removeImage", RemoveLayer); + Nan::SetPrototypeMethod(tpl, "removeImage", RemoveImage); Nan::SetPrototypeMethod(tpl, "setLayoutProperty", SetLayoutProperty); Nan::SetPrototypeMethod(tpl, "setPaintProperty", SetPaintProperty); Nan::SetPrototypeMethod(tpl, "setFilter", SetFilter); From 72bfe95438d1930c9a910a299542a049ca179919 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 28 Mar 2017 10:09:12 -0700 Subject: [PATCH 2/3] [core] Update mapbox-gl-js submodule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Includes lowp ⇢ highp fix for shader color attributes / uniforms. --- mapbox-gl-js | 2 +- .../mapboxsdk/style/layers/PropertyFactory.java | 4 ++-- src/mbgl/shaders/circle.cpp | 12 ++++++------ src/mbgl/shaders/debug.cpp | 2 +- src/mbgl/shaders/fill.cpp | 6 +++--- src/mbgl/shaders/fill_outline.cpp | 6 +++--- src/mbgl/shaders/line.cpp | 6 +++--- src/mbgl/shaders/line_sdf.cpp | 6 +++--- src/mbgl/shaders/symbol_sdf.cpp | 12 ++++++------ 9 files changed, 28 insertions(+), 28 deletions(-) diff --git a/mapbox-gl-js b/mapbox-gl-js index f07f5a5a3fb..c2486726705 160000 --- a/mapbox-gl-js +++ b/mapbox-gl-js @@ -1 +1 @@ -Subproject commit f07f5a5a3fbc3bf976548d11acfc5fd24768b1a2 +Subproject commit c24867267058f1e5f07ad50a003b2d32c3c532dd diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java index 5cd0d992703..bfbbf1e77b9 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java @@ -1581,7 +1581,7 @@ public static PropertyValue> iconT } /** - * A string with {tokens} replaced, referencing the data property to pull from. + * Name of image in sprite to use for drawing an image background. A string with {tokens} replaced, referencing the data property to pull from. * * @param value a String value * @return property wrapper around String @@ -1593,7 +1593,7 @@ public static PropertyValue iconImage(String value) { /** - * A string with {tokens} replaced, referencing the data property to pull from. + * Name of image in sprite to use for drawing an image background. A string with {tokens} replaced, referencing the data property to pull from. * * @param the zoom parameter type * @param function a wrapper {@link CameraFunction} for String diff --git a/src/mbgl/shaders/circle.cpp b/src/mbgl/shaders/circle.cpp index b479f1d40cb..1c977d2bce0 100644 --- a/src/mbgl/shaders/circle.cpp +++ b/src/mbgl/shaders/circle.cpp @@ -14,8 +14,8 @@ uniform vec2 u_extrude_scale; attribute vec2 a_pos; uniform lowp float a_color_t; -attribute lowp vec4 a_color; -varying lowp vec4 color; +attribute highp vec4 a_color; +varying highp vec4 color; uniform lowp float a_radius_t; attribute mediump vec2 a_radius; varying mediump float radius; @@ -26,8 +26,8 @@ uniform lowp float a_opacity_t; attribute lowp vec2 a_opacity; varying lowp float opacity; uniform lowp float a_stroke_color_t; -attribute lowp vec4 a_stroke_color; -varying lowp vec4 stroke_color; +attribute highp vec4 a_stroke_color; +varying highp vec4 stroke_color; uniform lowp float a_stroke_width_t; attribute mediump vec2 a_stroke_width; varying mediump float stroke_width; @@ -69,11 +69,11 @@ void main(void) { )MBGL_SHADER"; const char* circle::fragmentSource = R"MBGL_SHADER( -varying lowp vec4 color; +varying highp vec4 color; varying mediump float radius; varying lowp float blur; varying lowp float opacity; -varying lowp vec4 stroke_color; +varying highp vec4 stroke_color; varying mediump float stroke_width; varying lowp float stroke_opacity; diff --git a/src/mbgl/shaders/debug.cpp b/src/mbgl/shaders/debug.cpp index 27a15698d44..d39dcf25be4 100644 --- a/src/mbgl/shaders/debug.cpp +++ b/src/mbgl/shaders/debug.cpp @@ -17,7 +17,7 @@ void main() { )MBGL_SHADER"; const char* debug::fragmentSource = R"MBGL_SHADER( -uniform lowp vec4 u_color; +uniform highp vec4 u_color; void main() { gl_FragColor = u_color; diff --git a/src/mbgl/shaders/fill.cpp b/src/mbgl/shaders/fill.cpp index a1fba4d7494..0b775273d23 100644 --- a/src/mbgl/shaders/fill.cpp +++ b/src/mbgl/shaders/fill.cpp @@ -12,8 +12,8 @@ attribute vec2 a_pos; uniform mat4 u_matrix; uniform lowp float a_color_t; -attribute lowp vec4 a_color; -varying lowp vec4 color; +attribute highp vec4 a_color; +varying highp vec4 color; uniform lowp float a_opacity_t; attribute lowp vec2 a_opacity; varying lowp float opacity; @@ -27,7 +27,7 @@ void main() { )MBGL_SHADER"; const char* fill::fragmentSource = R"MBGL_SHADER( -varying lowp vec4 color; +varying highp vec4 color; varying lowp float opacity; void main() { diff --git a/src/mbgl/shaders/fill_outline.cpp b/src/mbgl/shaders/fill_outline.cpp index 74201b518dc..3e160ac6c27 100644 --- a/src/mbgl/shaders/fill_outline.cpp +++ b/src/mbgl/shaders/fill_outline.cpp @@ -15,8 +15,8 @@ uniform vec2 u_world; varying vec2 v_pos; uniform lowp float a_outline_color_t; -attribute lowp vec4 a_outline_color; -varying lowp vec4 outline_color; +attribute highp vec4 a_outline_color; +varying highp vec4 outline_color; uniform lowp float a_opacity_t; attribute lowp vec2 a_opacity; varying lowp float opacity; @@ -31,7 +31,7 @@ void main() { )MBGL_SHADER"; const char* fill_outline::fragmentSource = R"MBGL_SHADER( -varying lowp vec4 outline_color; +varying highp vec4 outline_color; varying lowp float opacity; varying vec2 v_pos; diff --git a/src/mbgl/shaders/line.cpp b/src/mbgl/shaders/line.cpp index dc4aa774dc7..4392bd051f8 100644 --- a/src/mbgl/shaders/line.cpp +++ b/src/mbgl/shaders/line.cpp @@ -34,8 +34,8 @@ varying vec2 v_width2; varying float v_gamma_scale; uniform lowp float a_color_t; -attribute lowp vec4 a_color; -varying lowp vec4 color; +attribute highp vec4 a_color; +varying highp vec4 color; uniform lowp float a_blur_t; attribute lowp vec2 a_blur; varying lowp float blur; @@ -105,7 +105,7 @@ void main() { )MBGL_SHADER"; const char* line::fragmentSource = R"MBGL_SHADER( -varying lowp vec4 color; +varying highp vec4 color; varying lowp float blur; varying lowp float opacity; diff --git a/src/mbgl/shaders/line_sdf.cpp b/src/mbgl/shaders/line_sdf.cpp index cd0d4ac3186..17a6a197395 100644 --- a/src/mbgl/shaders/line_sdf.cpp +++ b/src/mbgl/shaders/line_sdf.cpp @@ -42,8 +42,8 @@ varying vec2 v_tex_b; varying float v_gamma_scale; uniform lowp float a_color_t; -attribute lowp vec4 a_color; -varying lowp vec4 color; +attribute highp vec4 a_color; +varying highp vec4 color; uniform lowp float a_blur_t; attribute lowp vec2 a_blur; varying lowp float blur; @@ -127,7 +127,7 @@ varying vec2 v_tex_a; varying vec2 v_tex_b; varying float v_gamma_scale; -varying lowp vec4 color; +varying highp vec4 color; varying lowp float blur; varying lowp float opacity; diff --git a/src/mbgl/shaders/symbol_sdf.cpp b/src/mbgl/shaders/symbol_sdf.cpp index e0ee57b6d48..7cbc9babf5a 100644 --- a/src/mbgl/shaders/symbol_sdf.cpp +++ b/src/mbgl/shaders/symbol_sdf.cpp @@ -14,11 +14,11 @@ attribute vec2 a_texture_pos; attribute vec4 a_data; uniform lowp float a_fill_color_t; -attribute lowp vec4 a_fill_color; -varying lowp vec4 fill_color; +attribute highp vec4 a_fill_color; +varying highp vec4 fill_color; uniform lowp float a_halo_color_t; -attribute lowp vec4 a_halo_color; -varying lowp vec4 halo_color; +attribute highp vec4 a_halo_color; +varying highp vec4 halo_color; uniform lowp float a_opacity_t; attribute lowp vec2 a_opacity; varying lowp float opacity; @@ -119,8 +119,8 @@ const char* symbol_sdf::fragmentSource = R"MBGL_SHADER( #define EDGE_GAMMA 0.105/DEVICE_PIXEL_RATIO uniform bool u_is_halo; -varying lowp vec4 fill_color; -varying lowp vec4 halo_color; +varying highp vec4 fill_color; +varying highp vec4 halo_color; varying lowp float opacity; varying lowp float halo_width; varying lowp float halo_blur; From 557cb230629f1bd6290cd81fb62ae749f00b81b9 Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Mon, 27 Mar 2017 17:30:58 -0700 Subject: [PATCH 3/3] [core] implement dds for text-offset --- .../conversion/make_property_setters.hpp | 2 +- include/mbgl/style/layers/symbol_layer.hpp | 6 +-- mapbox-gl-js | 2 +- .../style/layers/PropertyFactory.java | 6 +-- .../testapp/style/SymbolLayerTest.java | 45 +++++++++++++++++++ platform/darwin/src/MGLSymbolStyleLayer.h | 18 ++++++++ platform/darwin/src/MGLSymbolStyleLayer.mm | 6 +-- .../darwin/test/MGLSymbolStyleLayerTests.mm | 30 ++++++++++--- src/mbgl/layout/symbol_layout.cpp | 2 +- src/mbgl/style/layers/symbol_layer.cpp | 6 +-- .../style/layers/symbol_layer_properties.hpp | 2 +- src/mbgl/text/glyph_set.cpp | 6 +-- 12 files changed, 106 insertions(+), 25 deletions(-) diff --git a/include/mbgl/style/conversion/make_property_setters.hpp b/include/mbgl/style/conversion/make_property_setters.hpp index 623cc090982..2f26fe75c45 100644 --- a/include/mbgl/style/conversion/make_property_setters.hpp +++ b/include/mbgl/style/conversion/make_property_setters.hpp @@ -60,7 +60,7 @@ auto makeLayoutPropertySetters() { result["text-padding"] = &setLayoutProperty, &SymbolLayer::setTextPadding>; result["text-keep-upright"] = &setLayoutProperty, &SymbolLayer::setTextKeepUpright>; result["text-transform"] = &setLayoutProperty, &SymbolLayer::setTextTransform>; - result["text-offset"] = &setLayoutProperty>, &SymbolLayer::setTextOffset>; + result["text-offset"] = &setLayoutProperty>, &SymbolLayer::setTextOffset>; result["text-allow-overlap"] = &setLayoutProperty, &SymbolLayer::setTextAllowOverlap>; result["text-ignore-placement"] = &setLayoutProperty, &SymbolLayer::setTextIgnorePlacement>; result["text-optional"] = &setLayoutProperty, &SymbolLayer::setTextOptional>; diff --git a/include/mbgl/style/layers/symbol_layer.hpp b/include/mbgl/style/layers/symbol_layer.hpp index d24f808bac2..b507c992f56 100644 --- a/include/mbgl/style/layers/symbol_layer.hpp +++ b/include/mbgl/style/layers/symbol_layer.hpp @@ -151,9 +151,9 @@ class SymbolLayer : public Layer { DataDrivenPropertyValue getTextTransform() const; void setTextTransform(DataDrivenPropertyValue); - static PropertyValue> getDefaultTextOffset(); - PropertyValue> getTextOffset() const; - void setTextOffset(PropertyValue>); + static DataDrivenPropertyValue> getDefaultTextOffset(); + DataDrivenPropertyValue> getTextOffset() const; + void setTextOffset(DataDrivenPropertyValue>); static PropertyValue getDefaultTextAllowOverlap(); PropertyValue getTextAllowOverlap() const; diff --git a/mapbox-gl-js b/mapbox-gl-js index c2486726705..c34b6e9bc4a 160000 --- a/mapbox-gl-js +++ b/mapbox-gl-js @@ -1 +1 @@ -Subproject commit c24867267058f1e5f07ad50a003b2d32c3c532dd +Subproject commit c34b6e9bc4a2672c1046267408f1055271484b27 diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java index bfbbf1e77b9..ef0bd38b568 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java @@ -2055,11 +2055,11 @@ public static PropertyValue textOffset(Float[] value) { /** * Offset distance of text from its anchor. Positive values indicate right and down, while negative values indicate left and up. * - * @param the zoom parameter type - * @param function a wrapper {@link CameraFunction} for Float[] + * @param the function input type + * @param function a wrapper function for Float[] * @return property wrapper around a Float[] function */ - public static PropertyValue> textOffset(CameraFunction function) { + public static PropertyValue> textOffset(Function function) { return new LayoutPropertyValue<>("text-offset", function); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java index c90af339b14..cac950dfc4e 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java @@ -1454,6 +1454,51 @@ public void testTextOffsetAsCameraFunction() { assertEquals(1, ((ExponentialStops) layer.getTextOffset().getFunction().getStops()).size()); } + @Test + public void testTextOffsetAsIdentitySourceFunction() { + checkViewIsDisplayed(R.id.mapView); + Timber.i("text-offset"); + assertNotNull(layer); + + // Set + layer.setProperties( + textOffset(property("FeaturePropertyA", Stops.identity())) + ); + + // Verify + assertNotNull(layer.getTextOffset()); + assertNotNull(layer.getTextOffset().getFunction()); + assertEquals(SourceFunction.class, layer.getTextOffset().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextOffset().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getTextOffset().getFunction().getStops().getClass()); + } + + @Test + public void testTextOffsetAsIntervalSourceFunction() { + checkViewIsDisplayed(R.id.mapView); + Timber.i("text-offset"); + assertNotNull(layer); + + // Set + layer.setProperties( + textOffset( + property( + "FeaturePropertyA", + interval( + stop(1, textOffset(new Float[]{0f,0f})) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getTextOffset()); + assertNotNull(layer.getTextOffset().getFunction()); + assertEquals(SourceFunction.class, layer.getTextOffset().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextOffset().getFunction()).getProperty()); + assertEquals(IntervalStops.class, layer.getTextOffset().getFunction().getStops().getClass()); + } + @Test public void testTextAllowOverlapAsConstant() { checkViewIsDisplayed(R.id.mapView); diff --git a/platform/darwin/src/MGLSymbolStyleLayer.h b/platform/darwin/src/MGLSymbolStyleLayer.h index c76efe2de71..11dc67b458a 100644 --- a/platform/darwin/src/MGLSymbolStyleLayer.h +++ b/platform/darwin/src/MGLSymbolStyleLayer.h @@ -1026,6 +1026,15 @@ MGL_EXPORT * `MGLCameraStyleFunction` with an interpolation mode of: * `MGLInterpolationModeExponential` * `MGLInterpolationModeInterval` + * `MGLSourceStyleFunction` with an interpolation mode of: + * `MGLInterpolationModeExponential` + * `MGLInterpolationModeInterval` + * `MGLInterpolationModeCategorical` + * `MGLInterpolationModeIdentity` + * `MGLCompositeStyleFunction` with an interpolation mode of: + * `MGLInterpolationModeExponential` + * `MGLInterpolationModeInterval` + * `MGLInterpolationModeCategorical` */ @property (nonatomic, null_resettable) MGLStyleValue *textOffset; #else @@ -1047,6 +1056,15 @@ MGL_EXPORT * `MGLCameraStyleFunction` with an interpolation mode of: * `MGLInterpolationModeExponential` * `MGLInterpolationModeInterval` + * `MGLSourceStyleFunction` with an interpolation mode of: + * `MGLInterpolationModeExponential` + * `MGLInterpolationModeInterval` + * `MGLInterpolationModeCategorical` + * `MGLInterpolationModeIdentity` + * `MGLCompositeStyleFunction` with an interpolation mode of: + * `MGLInterpolationModeExponential` + * `MGLInterpolationModeInterval` + * `MGLInterpolationModeCategorical` */ @property (nonatomic, null_resettable) MGLStyleValue *textOffset; #endif diff --git a/platform/darwin/src/MGLSymbolStyleLayer.mm b/platform/darwin/src/MGLSymbolStyleLayer.mm index 84419316853..6e35bf5dd23 100644 --- a/platform/darwin/src/MGLSymbolStyleLayer.mm +++ b/platform/darwin/src/MGLSymbolStyleLayer.mm @@ -763,7 +763,7 @@ - (void)setTextLineHeight:(MGLStyleValue *)textLineHeight { - (void)setTextOffset:(MGLStyleValue *)textOffset { MGLAssertStyleLayerIsValid(); - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toInterpolatablePropertyValue(textOffset); + auto mbglValue = MGLStyleValueTransformer, NSValue *>().toDataDrivenPropertyValue(textOffset); self.rawLayer->setTextOffset(mbglValue); } @@ -772,9 +772,9 @@ - (void)setTextOffset:(MGLStyleValue *)textOffset { auto propertyValue = self.rawLayer->getTextOffset(); if (propertyValue.isUndefined()) { - return MGLStyleValueTransformer, NSValue *>().toStyleValue(self.rawLayer->getDefaultTextOffset()); + return MGLStyleValueTransformer, NSValue *>().toDataDrivenStyleValue(self.rawLayer->getDefaultTextOffset()); } - return MGLStyleValueTransformer, NSValue *>().toStyleValue(propertyValue); + return MGLStyleValueTransformer, NSValue *>().toDataDrivenStyleValue(propertyValue); } - (void)setTextOptional:(MGLStyleValue *)textOptional { diff --git a/platform/darwin/test/MGLSymbolStyleLayerTests.mm b/platform/darwin/test/MGLSymbolStyleLayerTests.mm index e3e473ef78b..18dfa1366fd 100644 --- a/platform/darwin/test/MGLSymbolStyleLayerTests.mm +++ b/platform/darwin/test/MGLSymbolStyleLayerTests.mm @@ -1158,7 +1158,7 @@ - (void)testProperties { #endif ]; layer.textOffset = constantStyleValue; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; + mbgl::style::DataDrivenPropertyValue> propertyValue = { { 1, 1 } }; XCTAssertEqual(rawLayer->getTextOffset(), propertyValue, @"Setting textOffset to a constant value should update text-offset."); XCTAssertEqualObjects(layer.textOffset, constantStyleValue, @@ -1175,6 +1175,29 @@ - (void)testProperties { XCTAssertEqualObjects(layer.textOffset, functionStyleValue, @"textOffset should round-trip camera functions."); + functionStyleValue = [MGLStyleValue valueWithInterpolationMode:MGLInterpolationModeExponential sourceStops:@{@18: constantStyleValue} attributeName:@"keyName" options:nil]; + layer.textOffset = functionStyleValue; + + mbgl::style::ExponentialStops> exponentialStops = { {{18, { 1, 1 }}}, 1.0 }; + propertyValue = mbgl::style::SourceFunction> { "keyName", exponentialStops }; + + XCTAssertEqual(rawLayer->getTextOffset(), propertyValue, + @"Setting textOffset to a source function should update text-offset."); + XCTAssertEqualObjects(layer.textOffset, functionStyleValue, + @"textOffset should round-trip source functions."); + + functionStyleValue = [MGLStyleValue valueWithInterpolationMode:MGLInterpolationModeExponential compositeStops:@{@10: @{@18: constantStyleValue}} attributeName:@"keyName" options:nil]; + layer.textOffset = functionStyleValue; + + std::map> innerStops { {18, { 1, 1 }} }; + mbgl::style::CompositeExponentialStops> compositeStops { { {10.0, innerStops} }, 1.0 }; + + propertyValue = mbgl::style::CompositeFunction> { "keyName", compositeStops }; + + XCTAssertEqual(rawLayer->getTextOffset(), propertyValue, + @"Setting textOffset to a composite function should update text-offset."); + XCTAssertEqualObjects(layer.textOffset, functionStyleValue, + @"textOffset should round-trip composite functions."); layer.textOffset = nil; @@ -1182,11 +1205,6 @@ - (void)testProperties { @"Unsetting textOffset should return text-offset to the default value."); XCTAssertEqualObjects(layer.textOffset, defaultStyleValue, @"textOffset should return the default value after being unset."); - - functionStyleValue = [MGLStyleValue valueWithInterpolationMode:MGLInterpolationModeIdentity sourceStops:nil attributeName:@"" options:nil]; - XCTAssertThrowsSpecificNamed(layer.textOffset = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it"); - functionStyleValue = [MGLStyleValue valueWithInterpolationMode:MGLInterpolationModeInterval compositeStops:@{@18: constantStyleValue} attributeName:@"" options:nil]; - XCTAssertThrowsSpecificNamed(layer.textOffset = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it"); } // text-optional diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 3a2c082ad83..8e36bb84ea0 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -250,7 +250,7 @@ void SymbolLayout::prepare(uintptr_t tileUID, /* verticalAlign */ verticalAlign, /* justify */ justify, /* spacing: ems */ layout.get() * oneEm, - /* translate */ Point(layout.get()[0], layout.get()[1]), + /* translate */ Point(layout.evaluate(zoom, feature)[0] * oneEm, layout.evaluate(zoom, feature)[1] * oneEm), /* verticalHeight */ oneEm, /* writingMode */ writingMode, /* bidirectional algorithm object */ bidi); diff --git a/src/mbgl/style/layers/symbol_layer.cpp b/src/mbgl/style/layers/symbol_layer.cpp index 42bcf0e6b03..02e1e364f1c 100644 --- a/src/mbgl/style/layers/symbol_layer.cpp +++ b/src/mbgl/style/layers/symbol_layer.cpp @@ -483,15 +483,15 @@ void SymbolLayer::setTextTransform(DataDrivenPropertyValue va impl->layout.unevaluated.get() = value; impl->observer->onLayerLayoutPropertyChanged(*this, "text-transform"); } -PropertyValue> SymbolLayer::getDefaultTextOffset() { +DataDrivenPropertyValue> SymbolLayer::getDefaultTextOffset() { return TextOffset::defaultValue(); } -PropertyValue> SymbolLayer::getTextOffset() const { +DataDrivenPropertyValue> SymbolLayer::getTextOffset() const { return impl->layout.unevaluated.get(); } -void SymbolLayer::setTextOffset(PropertyValue> value) { +void SymbolLayer::setTextOffset(DataDrivenPropertyValue> value) { if (value == getTextOffset()) return; impl->layout.unevaluated.get() = value; diff --git a/src/mbgl/style/layers/symbol_layer_properties.hpp b/src/mbgl/style/layers/symbol_layer_properties.hpp index f2b7bfa00fc..e7cfb8d4550 100644 --- a/src/mbgl/style/layers/symbol_layer_properties.hpp +++ b/src/mbgl/style/layers/symbol_layer_properties.hpp @@ -160,7 +160,7 @@ struct TextTransform : DataDrivenLayoutProperty { static TextTransformType defaultValue() { return TextTransformType::None; } }; -struct TextOffset : LayoutProperty> { +struct TextOffset : DataDrivenLayoutProperty> { static constexpr const char * key = "text-offset"; static std::array defaultValue() { return {{ 0, 0 }}; } }; diff --git a/src/mbgl/text/glyph_set.cpp b/src/mbgl/text/glyph_set.cpp index 19a6e2cddda..ea0dd123dbb 100644 --- a/src/mbgl/text/glyph_set.cpp +++ b/src/mbgl/text/glyph_set.cpp @@ -45,7 +45,7 @@ const Shaping GlyphSet::getShaping(const std::u16string& logicalInput, const float verticalHeight, const WritingModeType writingMode, BiDi& bidi) const { - Shaping shaping(translate.x * 24, translate.y * 24, writingMode); + Shaping shaping(translate.x, translate.y, writingMode); std::vector reorderedLines = bidi.processText(logicalInput, @@ -66,9 +66,9 @@ void align(Shaping& shaping, const std::size_t lineCount, const Point& translate) { const float shiftX = - (justify - horizontalAlign) * maxLineLength + ::round(translate.x * 24 /* one em */); + (justify - horizontalAlign) * maxLineLength + ::round(translate.x); const float shiftY = - (-verticalAlign * lineCount + 0.5) * lineHeight + ::round(translate.y * 24 /* one em */); + (-verticalAlign * lineCount + 0.5) * lineHeight + ::round(translate.y); for (auto& glyph : shaping.positionedGlyphs) { glyph.x += shiftX;