[core] PlacedSymbolData includes viewport padding
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user