diff options
author | Ansis Brammanis <ansis@mapbox.com> | 2019-10-23 17:21:38 -0400 |
---|---|---|
committer | Dane Springmeyer <dane@mapbox.com> | 2019-10-24 13:49:18 -0700 |
commit | ad9037193d350b6c296dc4b2d44281b872330c1a (patch) | |
tree | 8ccde78d31f0fc22c70f653732fc49d6b1048b4b | |
parent | 24bee9602c69ba7433071613ea92a39893b97c37 (diff) | |
download | qtlocation-mapboxgl-ad9037193d350b6c296dc4b2d44281b872330c1a.tar.gz |
[core] avoid edges for labels that use text-variable-anchors
to prevent clipped labels in rendered image tiles.
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 8 |
3 files changed, 13 insertions, 13 deletions
diff --git a/package.json b/package.json index 87bca45838..227b2a2301 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mapbox/mapbox-gl-native", - "version": "5.0.0-beta4", + "version": "5.0.0-beta5", "description": "Renders map tiles with Mapbox GL", "keywords": [ "mapbox", diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index 6b2e77ef1c..b9e6325c6f 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -50,7 +50,7 @@ private: bool hasRenderPass(RenderPass pass) const override { return layer.get().hasRenderPass(pass); } void upload(gfx::UploadPass& pass) const override { layer.get().upload(pass); } void render(PaintParameters& parameters) const override { layer.get().render(parameters); } - const std::string& getName() const override { return layer.get().getID(); } + const std::string& getName() const override { return layer.get().getID(); } uint32_t index; }; @@ -330,7 +330,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar } } continue; - } + } // Handle layers without source. if (layerIsVisible && zoomFitsLayer && sourceImpl.get() == sourceImpls->at(0).get()) { @@ -338,7 +338,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar const auto& solidBackground = layer.getSolidBackground(); if (solidBackground) { renderTreeParameters->backgroundColor = *solidBackground; - continue; // This layer is shown with background color, and it shall not be added to render items. + continue; // This layer is shown with background color, and it shall not be added to render items. } } renderItemsEmplaceHint = layerRenderItems.emplace_hint(renderItemsEmplaceHint, layer, nullptr, index); @@ -388,7 +388,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar bool symbolBucketsAdded = false; for (auto it = layersNeedPlacement.rbegin(); it != layersNeedPlacement.rend(); ++it) { - auto result = crossTileSymbolIndex.addLayer(*it, updateParameters.transformState.getLatLng().longitude()); + auto result = crossTileSymbolIndex.addLayer(*it, updateParameters.transformState.getLatLng().longitude()); symbolBucketsAdded = symbolBucketsAdded || (result & CrossTileSymbolIndex::AddLayerResult::BucketsAdded); symbolBucketsChanged = symbolBucketsChanged || (result != CrossTileSymbolIndex::AddLayerResult::NoChanges); } @@ -468,7 +468,7 @@ std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineS return queryRenderedFeatures(geometry, options, layers); } - + void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, std::vector<Feature>>& resultsByLayer, const ScreenLineString& geometry, const std::unordered_map<std::string, const RenderLayer*>& layers, @@ -499,7 +499,7 @@ void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, st std::tie(a.tileID.canonical.z, a.tileID.canonical.y, a.tileID.wrap, a.tileID.canonical.x) < std::tie(b.tileID.canonical.z, b.tileID.canonical.y, b.tileID.wrap, b.tileID.canonical.x); }); - + for (auto wrappedQueryData : bucketQueryData) { auto& queryData = wrappedQueryData.get(); auto bucketSymbols = queryData.featureIndex->lookupSymbolFeatures(renderedSymbols[queryData.bucketInstanceId], @@ -507,7 +507,7 @@ void RenderOrchestrator::queryRenderedSymbols(std::unordered_map<std::string, st crossTileSymbolIndexLayers, queryData.tileID, queryData.featureSortOrder); - + for (auto layer : bucketSymbols) { auto& resultFeatures = resultsByLayer[layer.first]; std::move(layer.second.begin(), layer.second.end(), std::inserter(resultFeatures, resultFeatures.end())); @@ -536,7 +536,7 @@ std::vector<Feature> RenderOrchestrator::queryRenderedFeatures(const ScreenLineS std::move(sourceResults.begin(), sourceResults.end(), std::inserter(resultsByLayer, resultsByLayer.begin())); } } - + queryRenderedSymbols(resultsByLayer, geometry, filteredLayers, options); std::vector<Feature> result; diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 8b0a3975fc..7343f19aea 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -164,12 +164,12 @@ void Placement::placeBucket( auto partiallyEvaluatedIconSize = bucket.iconSizeBinder->evaluateForZoom(state.getZoom()); optional<CollisionTileBoundaries> avoidEdges; - if (mapMode == MapMode::Tile && - (layout.get<style::SymbolAvoidEdges>() || - layout.get<style::SymbolPlacement>() == style::SymbolPlacementType::Line)) { + if (mapMode == MapMode::Tile && (layout.get<style::SymbolAvoidEdges>() || + layout.get<style::SymbolPlacement>() == style::SymbolPlacementType::Line || + !layout.get<style::TextVariableAnchor>().empty())) { avoidEdges = collisionIndex.projectTileBoundaries(posMatrix); } - + const bool textAllowOverlap = layout.get<style::TextAllowOverlap>(); const bool iconAllowOverlap = layout.get<style::IconAllowOverlap>(); // This logic is similar to the "defaultOpacityState" logic below in updateBucketOpacities |