summaryrefslogtreecommitdiff
path: root/src/mbgl/layermanager
diff options
context:
space:
mode:
authorGali Nelle <galinelle.mapbox@gmail.com>2020-03-25 17:35:44 +0200
committergalinelle <paolo.angelelli@mapbox.com>2020-04-08 14:00:26 +0300
commit9a55c282fecfdd76b1acdf64cef0ce2ed99472ef (patch)
treed2c412ef6ac4782d28cea66b761deeb5fff10cc3 /src/mbgl/layermanager
parent7f53cec17b047a1804952a8da543dc10321e1dae (diff)
downloadqtlocation-mapboxgl-9a55c282fecfdd76b1acdf64cef0ce2ed99472ef.tar.gz
Add LocationIndicatorLayer
New key is "G" in mbgl-glfw, cycling between no puck, centered in the viewport and positioned in Tokyo.
Diffstat (limited to 'src/mbgl/layermanager')
-rw-r--r--src/mbgl/layermanager/layer_manager.cpp9
-rw-r--r--src/mbgl/layermanager/location_indicator_layer_factory.cpp25
2 files changed, 31 insertions, 3 deletions
diff --git a/src/mbgl/layermanager/layer_manager.cpp b/src/mbgl/layermanager/layer_manager.cpp
index 1e2074cd70..377d3acce4 100644
--- a/src/mbgl/layermanager/layer_manager.cpp
+++ b/src/mbgl/layermanager/layer_manager.cpp
@@ -14,14 +14,17 @@ namespace mbgl {
std::unique_ptr<style::Layer> LayerManager::createLayer(
const std::string& type, const std::string& id,
const style::conversion::Convertible& value, style::conversion::Error& error) noexcept {
- if (LayerFactory* factory = getFactory(type)) {
+ LayerFactory* factory = getFactory(type);
+ if (factory) {
auto layer = factory->createLayer(id, value);
if (!layer) {
- error.message = "Error parsing a layer of type: " + type;
+ error.message = "Error parsing layer " + id + " of type: " + type;
}
return layer;
+ } else {
+ error.message = "Null factory for type: " + type;
}
- error.message = "Unsupported layer type: " + type;
+ error.message = "Unsupported layer type! " + error.message;
return nullptr;
}
diff --git a/src/mbgl/layermanager/location_indicator_layer_factory.cpp b/src/mbgl/layermanager/location_indicator_layer_factory.cpp
new file mode 100644
index 0000000000..67f7280e93
--- /dev/null
+++ b/src/mbgl/layermanager/location_indicator_layer_factory.cpp
@@ -0,0 +1,25 @@
+#include <mbgl/layermanager/location_indicator_layer_factory.hpp>
+
+#include <mbgl/renderer/layers/render_location_indicator_layer.hpp>
+#include <mbgl/style/layers/location_indicator_layer.hpp>
+#include <mbgl/style/layers/location_indicator_layer_impl.hpp>
+
+namespace mbgl {
+
+const style::LayerTypeInfo* LocationIndicatorLayerFactory::getTypeInfo() const noexcept {
+ return style::LocationIndicatorLayer::Impl::staticTypeInfo();
+}
+
+std::unique_ptr<style::Layer> LocationIndicatorLayerFactory::createLayer(
+ const std::string& id, const style::conversion::Convertible&) noexcept {
+ return std::unique_ptr<style::Layer>(new style::LocationIndicatorLayer(id));
+}
+
+std::unique_ptr<RenderLayer> LocationIndicatorLayerFactory::createRenderLayer(
+ Immutable<style::Layer::Impl> impl) noexcept {
+ assert(impl->getTypeInfo() == getTypeInfo());
+ return std::make_unique<RenderLocationIndicatorLayer>(
+ staticImmutableCast<style::LocationIndicatorLayer::Impl>(impl));
+}
+
+} // namespace mbgl