diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2018-11-05 19:49:40 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2018-11-07 16:34:20 +0200 |
commit | ffdeef3a26306e447f1cc52a8e14d42fb035611d (patch) | |
tree | 7e3217d761581161d39b2552072d1b3cef8df67a /platform | |
parent | f560b4f9efebb4d448181724304f63b683a26b67 (diff) | |
download | qtlocation-mapboxgl-ffdeef3a26306e447f1cc52a8e14d42fb035611d.tar.gz |
Refer corresponding LayerFactory instance from the Layer::Impl
Diffstat (limited to 'platform')
-rw-r--r-- | platform/default/layer_manager.cpp | 61 | ||||
-rw-r--r-- | platform/ios/config.cmake | 1 | ||||
-rw-r--r-- | platform/linux/config.cmake | 1 | ||||
-rw-r--r-- | platform/macos/config.cmake | 1 | ||||
-rw-r--r-- | platform/qt/qt.cmake | 3 |
5 files changed, 67 insertions, 0 deletions
diff --git a/platform/default/layer_manager.cpp b/platform/default/layer_manager.cpp new file mode 100644 index 0000000000..e497c66729 --- /dev/null +++ b/platform/default/layer_manager.cpp @@ -0,0 +1,61 @@ +#include <mbgl/style/layer.hpp> +#include <mbgl/style/layers/symbol_layer.hpp> +#include <mbgl/style/layers/background_layer.hpp> +#include <mbgl/style/layers/circle_layer.hpp> +#include <mbgl/style/layers/fill_extrusion_layer.hpp> +#include <mbgl/style/layers/fill_layer.hpp> +#include <mbgl/style/layers/heatmap_layer.hpp> +#include <mbgl/style/layers/hillshade_layer.hpp> +#include <mbgl/style/layers/line_layer.hpp> +#include <mbgl/style/layers/raster_layer.hpp> +#include <mbgl/style/layers/symbol_layer.hpp> + +#include <memory> +#include <vector> + +namespace mbgl { +namespace style { + +class LayerManagerBase : public LayerManager { +public: + LayerManagerBase(); +private: + // LayerManager overrides. + std::unique_ptr<Layer> createLayer(const std::string& type, const std::string& id, const conversion::Convertible& value, conversion::Error& error) final; + std::vector<std::unique_ptr<LayerFactory>> factories; +}; + +LayerManagerBase::LayerManagerBase() { + factories.emplace_back(std::unique_ptr<LayerFactory>(new FillLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new LineLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new CircleLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new SymbolLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new RasterLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new BackgroundLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new HillshadeLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new FillExtrusionLayerFactory)); + factories.emplace_back(std::unique_ptr<LayerFactory>(new HeatmapLayerFactory)); +} + +std::unique_ptr<Layer> LayerManagerBase::createLayer(const std::string& type, const std::string& id, const conversion::Convertible& value, conversion::Error& error) { + for (const auto& factory: factories) { + if (factory->supportsType(type)) { + auto layer = factory->createLayer(id, value); + if (!layer) { + error.message = "Error parsing a layer of type: " + type; + } + return layer; + } + } + error.message = "Unsupported layer type: " + type; + return nullptr; +} + +// static +LayerManager* LayerManager::get() { + static LayerManagerBase impl; + return &impl; +} + +} // namespace style +} // namespace mbgl diff --git a/platform/ios/config.cmake b/platform/ios/config.cmake index 320ef7e73b..0bda7b3f40 100644 --- a/platform/ios/config.cmake +++ b/platform/ios/config.cmake @@ -34,6 +34,7 @@ macro(mbgl_platform_core) PRIVATE platform/darwin/src/nsthread.mm PRIVATE platform/darwin/src/string_nsstring.mm PRIVATE platform/default/bidi.cpp + PRIVATE platform/default/layer_manager.cpp PRIVATE platform/default/thread_local.cpp PRIVATE platform/default/utf.cpp diff --git a/platform/linux/config.cmake b/platform/linux/config.cmake index cfbf4ef8a2..984389e4e8 100644 --- a/platform/linux/config.cmake +++ b/platform/linux/config.cmake @@ -47,6 +47,7 @@ macro(mbgl_platform_core) PRIVATE platform/default/thread.cpp PRIVATE platform/default/bidi.cpp PRIVATE platform/default/collator.cpp + PRIVATE platform/default/layer_manager.cpp PRIVATE platform/default/local_glyph_rasterizer.cpp PRIVATE platform/default/thread_local.cpp PRIVATE platform/default/unaccent.cpp diff --git a/platform/macos/config.cmake b/platform/macos/config.cmake index 3b5b2a8529..e327ac5bfb 100644 --- a/platform/macos/config.cmake +++ b/platform/macos/config.cmake @@ -14,6 +14,7 @@ macro(mbgl_platform_core) PRIVATE platform/darwin/src/nsthread.mm PRIVATE platform/darwin/src/string_nsstring.mm PRIVATE platform/default/bidi.cpp + PRIVATE platform/default/layer_manager.cpp PRIVATE platform/default/thread_local.cpp PRIVATE platform/default/utf.cpp diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index 4e781866e6..e12e20708f 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -43,6 +43,9 @@ set(MBGL_QT_CORE_FILES PRIVATE platform/default/collator.cpp PRIVATE platform/default/unaccent.cpp PRIVATE platform/default/unaccent.hpp + + #Layer manager + PRIVATE platform/default/layer_manager.cpp ) set(MBGL_QT_FILESOURCE_FILES |