summaryrefslogtreecommitdiff
path: root/include/mbgl/layermanager
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2018-11-30 12:10:33 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2018-11-30 19:09:17 +0200
commit92352de87d4068985fa56100f2c6e16bf26a1c86 (patch)
treee3dd5729e2ef8e32931b8e42ab34a3d0b806ee18 /include/mbgl/layermanager
parent8bc362e3a2836cfa96ef14a41a0e882a1d08e881 (diff)
downloadqtlocation-mapboxgl-92352de87d4068985fa56100f2c6e16bf26a1c86.tar.gz
[core] layermanager folder
Move `LayerManager` and `LayerFactory` abstract classes to a dedicated folder.
Diffstat (limited to 'include/mbgl/layermanager')
-rw-r--r--include/mbgl/layermanager/layer_factory.hpp29
-rw-r--r--include/mbgl/layermanager/layer_manager.hpp56
2 files changed, 85 insertions, 0 deletions
diff --git a/include/mbgl/layermanager/layer_factory.hpp b/include/mbgl/layermanager/layer_factory.hpp
new file mode 100644
index 0000000000..3e2b2c3ddd
--- /dev/null
+++ b/include/mbgl/layermanager/layer_factory.hpp
@@ -0,0 +1,29 @@
+#pragma once
+
+#include <mbgl/style/layer.hpp>
+
+namespace mbgl {
+
+class RenderLayer;
+
+/**
+ * @brief The LayerFactory abstract class
+ *
+ * This class is responsible for creation of the layer objects that belong to a concrete layer type.
+ */
+class LayerFactory {
+public:
+ virtual ~LayerFactory() = default;
+ /// Returns the layer type data.
+ virtual const style::LayerTypeInfo* getTypeInfo() const noexcept = 0;
+ /// Returns a new Layer instance on success call; returns `nulltptr` otherwise.
+ virtual std::unique_ptr<style::Layer> createLayer(const std::string& id, const style::conversion::Convertible& value) noexcept = 0;
+ /// Returns a new RenderLayer instance on success call; returns `nulltptr` otherwise.
+ virtual std::unique_ptr<RenderLayer> createRenderLayer(Immutable<style::Layer::Impl>) noexcept = 0;
+
+protected:
+ optional<std::string> getSource(const style::conversion::Convertible& value) const noexcept;
+ bool initSourceLayerAndFilter(style::Layer*, const style::conversion::Convertible& value) const noexcept;
+};
+
+} // namespace mbgl
diff --git a/include/mbgl/layermanager/layer_manager.hpp b/include/mbgl/layermanager/layer_manager.hpp
new file mode 100644
index 0000000000..038a6dcb04
--- /dev/null
+++ b/include/mbgl/layermanager/layer_manager.hpp
@@ -0,0 +1,56 @@
+#pragma once
+
+#include <mbgl/style/layer.hpp>
+
+namespace mbgl {
+
+class LayerFactory;
+class RenderLayer;
+
+/**
+ * @brief A singleton class responsible for creating layer instances.
+ *
+ * The LayerManager has implementation per platform. The LayerManager implementation
+ * defines what layer types are available and it can also disable annotations.
+ *
+ * Linker excludes the unreachable code for the disabled annotations and layers
+ * from the binaries, significantly reducing their size.
+ */
+class LayerManager {
+public:
+ /**
+ * @brief A singleton getter.
+ *
+ * @return LayerManager*
+ */
+ static LayerManager* get() noexcept;
+
+ /// Returns a new Layer instance on success call; returns `nulltptr` otherwise.
+ std::unique_ptr<style::Layer> createLayer(const std::string& type, const std::string& id,
+ const style::conversion::Convertible& value, style::conversion::Error& error) noexcept;
+ /// Returns a new RenderLayer instance on success call; returns `nulltptr` otherwise.
+ std::unique_ptr<RenderLayer> createRenderLayer(Immutable<style::Layer::Impl>) noexcept;
+
+ /**
+ * @brief a build-time flag to enable/disable annotations in mapbox-gl-native core.
+ *
+ * At the moment, the annotations implementation in core is creating concrete
+ * layer instances apart from LayerManager/LayerFactory code path.
+ *
+ * So, annotations must be disabled if the LayerManager implementation does
+ * not provide line, fill or symbol layers (those, used by the annotations
+ * implementation).
+ *
+ * Note: in future, annotations implemantation will be moved from the core to platform
+ * SDK (see https://github.com/mapbox/mapbox-plugins-android/tree/master/plugin-annotation)
+ * and this flag won't be needed any more.
+ */
+ static const bool annotationsEnabled;
+
+protected:
+ virtual ~LayerManager() = default;
+ virtual LayerFactory* getFactory(const std::string& type) noexcept = 0;
+ virtual LayerFactory* getFactory(const style::LayerTypeInfo*) noexcept = 0;
+};
+
+} // namespace mbgl