diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 2a0d2888b..914c2cd0b 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -155,7 +155,6 @@ public: style::Source* getSource(const std::string& sourceID); void addSource(std::unique_ptr); void removeSource(const std::string& sourceID); - std::vector getAttributions() const; // Layers style::Layer* getLayer(const std::string& layerID); diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp index 92341066b..870c81fda 100644 --- a/include/mbgl/style/source.hpp +++ b/include/mbgl/style/source.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -50,6 +51,8 @@ public: // are copied from this source. std::unique_ptr copy(const std::string& id) const; + optional getAttribution() const; + // Private implementation class Impl; const std::unique_ptr baseImpl; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index a67de9c2c..0dfd07992 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -786,10 +786,6 @@ void Map::removeSource(const std::string& sourceID) { } } -std::vector Map::getAttributions() const { - return impl->style ? impl->style->getAttributions() : std::vector(); -} - style::Layer* Map::getLayer(const std::string& layerID) { if (impl->style) { impl->styleMutated = true; diff --git a/src/mbgl/style/source.cpp b/src/mbgl/style/source.cpp index 4c83a3ce0..cfb268006 100644 --- a/src/mbgl/style/source.cpp +++ b/src/mbgl/style/source.cpp @@ -14,5 +14,9 @@ const std::string& Source::getID() const { return baseImpl->id; } +optional Source::getAttribution() const { + return baseImpl->getAttribution(); +} + } // namespace style } // namespace mbgl diff --git a/src/mbgl/style/source_impl.hpp b/src/mbgl/style/source_impl.hpp index c7ed36b3c..608a55283 100644 --- a/src/mbgl/style/source_impl.hpp +++ b/src/mbgl/style/source_impl.hpp @@ -71,6 +71,8 @@ public: const SourceType type; const std::string id; + virtual optional getAttribution() const { return {}; }; + bool loaded = false; // Tracks whether the source is used by any layers visible at the current zoom level. Must diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index f0917c3b6..50de887db 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -26,7 +25,6 @@ #include #include #include -#include #include #include @@ -295,28 +293,6 @@ Source* Style::getSource(const std::string& id) const { return it != sources.end() ? it->get() : nullptr; } -std::vector Style::getAttributions() const { - std::vector result; - for (const auto& source : sources) { - switch (source->baseImpl->type) { - case SourceType::Vector: - case SourceType::Raster: { - style::TileSourceImpl* tileSource = static_cast(source->baseImpl.get()); - auto attribution = tileSource->getAttribution(); - if (!attribution.empty()) { - result.push_back(std::move(attribution)); - } - } - - case SourceType::GeoJSON: - case SourceType::Video: - case SourceType::Annotations: - break; - } - } - return result; -} - bool Style::hasTransitions() const { return hasPendingTransitions; } diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 5bd886923..648bd4803 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -67,7 +67,6 @@ public: Source* getSource(const std::string& id) const; void addSource(std::unique_ptr); void removeSource(const std::string& sourceID); - std::vector getAttributions() const; std::vector getLayers() const; Layer* getLayer(const std::string& id) const; diff --git a/src/mbgl/style/tile_source_impl.cpp b/src/mbgl/style/tile_source_impl.cpp index a318fdd75..7dd6ae6db 100644 --- a/src/mbgl/style/tile_source_impl.cpp +++ b/src/mbgl/style/tile_source_impl.cpp @@ -118,8 +118,12 @@ Range TileSourceImpl::getZoomRange() { return tileset.zoomRange; } -std::string TileSourceImpl::getAttribution() const { - return loaded ? tileset.attribution : ""; +optional TileSourceImpl::getAttribution() const { + if (loaded && !tileset.attribution.empty()) { + return tileset.attribution; + } else { + return {}; + } } } // namespace style diff --git a/src/mbgl/style/tile_source_impl.hpp b/src/mbgl/style/tile_source_impl.hpp index 4ce1eac22..366e0b60a 100644 --- a/src/mbgl/style/tile_source_impl.hpp +++ b/src/mbgl/style/tile_source_impl.hpp @@ -34,7 +34,7 @@ public: return urlOrTileset; } - std::string getAttribution() const; + optional getAttribution() const override; protected: Range getZoomRange() final;