summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-03-26 15:54:19 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-02 11:50:52 +0300
commitc3b68fe91b648f26f10cb8e03f6a8e65681fd023 (patch)
treecf44c4ebaa0ddd11a6d7b5ef36e9eadde74a5662
parent3412331e4a3ae340e65ee7f9c3548b3127c23d2a (diff)
downloadqtlocation-mapboxgl-c3b68fe91b648f26f10cb8e03f6a8e65681fd023.tar.gz
[core] PlacedSymbolData includes viewport padding
-rw-r--r--include/mbgl/renderer/renderer.hpp6
-rw-r--r--src/mbgl/text/collision_index.cpp4
-rw-r--r--src/mbgl/text/collision_index.hpp2
-rw-r--r--src/mbgl/text/placement.cpp3
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));
}