diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-03-26 15:54:19 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-04-02 11:50:52 +0300 |
commit | c3b68fe91b648f26f10cb8e03f6a8e65681fd023 (patch) | |
tree | cf44c4ebaa0ddd11a6d7b5ef36e9eadde74a5662 | |
parent | 3412331e4a3ae340e65ee7f9c3548b3127c23d2a (diff) | |
download | qtlocation-mapboxgl-c3b68fe91b648f26f10cb8e03f6a8e65681fd023.tar.gz |
[core] PlacedSymbolData includes viewport padding
-rw-r--r-- | include/mbgl/renderer/renderer.hpp | 6 | ||||
-rw-r--r-- | src/mbgl/text/collision_index.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/text/collision_index.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 3 |
4 files changed, 11 insertions, 4 deletions
diff --git a/include/mbgl/renderer/renderer.hpp b/include/mbgl/renderer/renderer.hpp index c7514054e4..60f1f6ed8b 100644 --- a/include/mbgl/renderer/renderer.hpp +++ b/include/mbgl/renderer/renderer.hpp @@ -34,6 +34,8 @@ struct PlacedSymbolData { bool iconPlaced; // Symbol text or icon collision box intersects tile borders bool intersectsTileBorder; + // Viewport padding ({viewportPadding, viewportPadding} is a coordinate of the tile's top-left corner) + float viewportPadding; }; class Renderer { @@ -66,7 +68,9 @@ public: void setFeatureState(const std::string& sourceID, const optional<std::string>& sourceLayerID, const std::string& featureID, const FeatureState& state); - void getFeatureState(FeatureState& state, const std::string& sourceID, const optional<std::string>& sourceLayerID, + void getFeatureState(FeatureState& state, + const std::string& sourceID, + const optional<std::string>& sourceLayerID, const std::string& featureID) const; void removeFeatureState(const std::string& sourceID, diff --git a/src/mbgl/text/collision_index.cpp b/src/mbgl/text/collision_index.cpp index cd854db3b6..a0b8a8ab77 100644 --- a/src/mbgl/text/collision_index.cpp +++ b/src/mbgl/text/collision_index.cpp @@ -27,7 +27,7 @@ const float viewportPaddingDefault = 100; // Viewport padding must be much larger for static tiles to avoid clipped labels. const float viewportPaddingForStaticTiles = 1024; -inline float getViewportPadding(const TransformState& transformState, MapMode mapMode) { +inline float findViewportPadding(const TransformState& transformState, MapMode mapMode) { if (mapMode == MapMode::Tile) return viewportPaddingForStaticTiles; return (transformState.getPitch() != 0.0f) ? viewportPaddingDefault * 2 : viewportPaddingDefault; } @@ -36,7 +36,7 @@ inline float getViewportPadding(const TransformState& transformState, MapMode ma CollisionIndex::CollisionIndex(const TransformState& transformState_, MapMode mapMode) : transformState(transformState_), - viewportPadding(getViewportPadding(transformState_, mapMode)), + viewportPadding(findViewportPadding(transformState_, mapMode)), collisionGrid(transformState.getSize().width + 2 * viewportPadding, transformState.getSize().height + 2 * viewportPadding, 25), diff --git a/src/mbgl/text/collision_index.hpp b/src/mbgl/text/collision_index.hpp index b88a8623e8..c6f689bc7e 100644 --- a/src/mbgl/text/collision_index.hpp +++ b/src/mbgl/text/collision_index.hpp @@ -50,6 +50,8 @@ public: const TransformState& getTransformState() const { return transformState; } + float getViewportPadding() const { return viewportPadding; } + private: bool isOffscreen(const CollisionBoundaries&) const; bool isInsideGrid(const CollisionBoundaries&) const; diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 1f4b73323e..3cba1b8e16 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -1386,7 +1386,8 @@ void TilePlacement::newSymbolPlaced(const SymbolInstance& symbol, iconCollisionBox, placement.text, placement.icon, - !placement.skipFade && onlyLabelsIntersectingTileBorders}; + !placement.skipFade && onlyLabelsIntersectingTileBorders, + collisionIndex.getViewportPadding()}; placedSymbolsData.emplace_back(std::move(symbolData)); } |