summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-06-13 11:38:18 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-06-14 11:25:45 -0700
commit9b0093e32dece62abc6fd7add789613871252a58 (patch)
treed6e8f90b12d64c41d4f95d9433e2dfca58be4f60
parent7080196bf6b749de5f25b298c0acf49cced20b1e (diff)
downloadqtlocation-mapboxgl-9b0093e32dece62abc6fd7add789613871252a58.tar.gz
[core] Introduce source subclasses
-rw-r--r--src/mbgl/annotation/annotation_manager.cpp4
-rw-r--r--src/mbgl/annotation/annotation_source.cpp13
-rw-r--r--src/mbgl/annotation/annotation_source.hpp16
-rw-r--r--src/mbgl/style/parser.cpp38
-rw-r--r--src/mbgl/style/sources/geojson_source.cpp15
-rw-r--r--src/mbgl/style/sources/geojson_source.hpp18
-rw-r--r--src/mbgl/style/sources/raster_source.cpp15
-rw-r--r--src/mbgl/style/sources/raster_source.hpp18
-rw-r--r--src/mbgl/style/sources/vector_source.cpp15
-rw-r--r--src/mbgl/style/sources/vector_source.hpp18
-rw-r--r--test/style/source.cpp25
11 files changed, 167 insertions, 28 deletions
diff --git a/src/mbgl/annotation/annotation_manager.cpp b/src/mbgl/annotation/annotation_manager.cpp
index 29062383be..71dca16359 100644
--- a/src/mbgl/annotation/annotation_manager.cpp
+++ b/src/mbgl/annotation/annotation_manager.cpp
@@ -1,10 +1,10 @@
#include <mbgl/annotation/annotation_manager.hpp>
+#include <mbgl/annotation/annotation_source.hpp>
#include <mbgl/annotation/annotation_tile.hpp>
#include <mbgl/annotation/symbol_annotation_impl.hpp>
#include <mbgl/annotation/line_annotation_impl.hpp>
#include <mbgl/annotation/fill_annotation_impl.hpp>
#include <mbgl/annotation/style_sourced_annotation_impl.hpp>
-#include <mbgl/style/source.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/style/layers/symbol_layer.hpp>
#include <mbgl/style/layers/symbol_layer_impl.hpp>
@@ -107,7 +107,7 @@ std::unique_ptr<AnnotationTileData> AnnotationManager::getTileData(const Canonic
void AnnotationManager::updateStyle(Style& style) {
// Create annotation source, point layer, and point bucket
if (!style.getSource(SourceID)) {
- std::unique_ptr<Source> source = std::make_unique<Source>(SourceType::Annotations, SourceID, "", util::tileSize, std::make_unique<Tileset>(), nullptr);
+ std::unique_ptr<Source> source = std::make_unique<AnnotationSource>(SourceID, "", util::tileSize, std::make_unique<Tileset>(), nullptr);
source->enabled = true;
style.addSource(std::move(source));
diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp
new file mode 100644
index 0000000000..8e2a5b22eb
--- /dev/null
+++ b/src/mbgl/annotation/annotation_source.cpp
@@ -0,0 +1,13 @@
+#include <mbgl/annotation/annotation_source.hpp>
+
+namespace mbgl {
+
+AnnotationSource::AnnotationSource(std::string id_,
+ std::string url_,
+ uint16_t tileSize_,
+ std::unique_ptr<Tileset>&& tileset_,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&& geojsonvt_)
+ : Source(SourceType::Annotations, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) {
+}
+
+} // namespace mbgl
diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp
new file mode 100644
index 0000000000..6af38f76b4
--- /dev/null
+++ b/src/mbgl/annotation/annotation_source.hpp
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <mbgl/style/source.hpp>
+
+namespace mbgl {
+
+class AnnotationSource : public style::Source {
+public:
+ AnnotationSource(std::string id,
+ std::string url,
+ uint16_t tileSize,
+ std::unique_ptr<Tileset>&&,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&&);
+};
+
+} // namespace mbgl
diff --git a/src/mbgl/style/parser.cpp b/src/mbgl/style/parser.cpp
index 870fd6d71e..0a11d6f978 100644
--- a/src/mbgl/style/parser.cpp
+++ b/src/mbgl/style/parser.cpp
@@ -1,4 +1,7 @@
#include <mbgl/style/parser.hpp>
+#include <mbgl/style/sources/raster_source.hpp>
+#include <mbgl/style/sources/vector_source.hpp>
+#include <mbgl/style/sources/geojson_source.hpp>
#include <mbgl/style/layer_impl.hpp>
#include <mbgl/style/layers/fill_layer.hpp>
#include <mbgl/style/layers/line_layer.hpp>
@@ -182,6 +185,21 @@ void Parser::parseSources(const JSValue& value) {
std::unique_ptr<Tileset> tileset;
std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> geojsonvt;
+ const std::string id { nameVal.GetString(), nameVal.GetStringLength() };
+ std::unique_ptr<Source> source;
+
+ if (sourceVal.HasMember("url")) {
+ const JSValue& urlVal = sourceVal["url"];
+ if (urlVal.IsString()) {
+ url = { urlVal.GetString(), urlVal.GetStringLength() };
+ } else {
+ Log::Error(Event::ParseStyle, "source url must be a string");
+ continue;
+ }
+ } else {
+ tileset = parseTileJSON(sourceVal);
+ }
+
switch (*type) {
case SourceType::Raster:
if (sourceVal.HasMember("tileSize")) {
@@ -193,20 +211,12 @@ void Parser::parseSources(const JSValue& value) {
continue;
}
}
- // Fall through. Vector sources are forbidden from having a tileSize.
+
+ source = std::make_unique<RasterSource>(id, url, tileSize, std::move(tileset), std::move(geojsonvt));
+ break;
case SourceType::Vector:
- if (sourceVal.HasMember("url")) {
- const JSValue& urlVal = sourceVal["url"];
- if (urlVal.IsString()) {
- url = { urlVal.GetString(), urlVal.GetStringLength() };
- } else {
- Log::Error(Event::ParseStyle, "source url must be a string");
- continue;
- }
- } else {
- tileset = parseTileJSON(sourceVal);
- }
+ source = std::make_unique<VectorSource>(id, url, tileSize, std::move(tileset), std::move(geojsonvt));
break;
case SourceType::GeoJSON:
@@ -233,6 +243,7 @@ void Parser::parseSources(const JSValue& value) {
continue;
}
+ source = std::make_unique<GeoJSONSource>(id, url, tileSize, std::move(tileset), std::move(geojsonvt));
break;
default:
@@ -240,9 +251,6 @@ void Parser::parseSources(const JSValue& value) {
continue;
}
- const std::string id { nameVal.GetString(), nameVal.GetStringLength() };
- std::unique_ptr<Source> source = std::make_unique<Source>(*type, id, url, tileSize, std::move(tileset), std::move(geojsonvt));
-
sourcesMap.emplace(id, source.get());
sources.emplace_back(std::move(source));
}
diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp
new file mode 100644
index 0000000000..785c8a3eb0
--- /dev/null
+++ b/src/mbgl/style/sources/geojson_source.cpp
@@ -0,0 +1,15 @@
+#include <mbgl/style/sources/geojson_source.hpp>
+
+namespace mbgl {
+namespace style {
+
+GeoJSONSource::GeoJSONSource(std::string id_,
+ std::string url_,
+ uint16_t tileSize_,
+ std::unique_ptr<Tileset>&& tileset_,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&& geojsonvt_)
+ : Source(SourceType::GeoJSON, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) {
+}
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/sources/geojson_source.hpp b/src/mbgl/style/sources/geojson_source.hpp
new file mode 100644
index 0000000000..d9f8cb4c62
--- /dev/null
+++ b/src/mbgl/style/sources/geojson_source.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <mbgl/style/source.hpp>
+
+namespace mbgl {
+namespace style {
+
+class GeoJSONSource : public Source {
+public:
+ GeoJSONSource(std::string id,
+ std::string url,
+ uint16_t tileSize,
+ std::unique_ptr<Tileset>&&,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&&);
+};
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/sources/raster_source.cpp b/src/mbgl/style/sources/raster_source.cpp
new file mode 100644
index 0000000000..d0f525894a
--- /dev/null
+++ b/src/mbgl/style/sources/raster_source.cpp
@@ -0,0 +1,15 @@
+#include <mbgl/style/sources/raster_source.hpp>
+
+namespace mbgl {
+namespace style {
+
+RasterSource::RasterSource(std::string id_,
+ std::string url_,
+ uint16_t tileSize_,
+ std::unique_ptr<Tileset>&& tileset_,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&& geojsonvt_)
+ : Source(SourceType::Raster, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) {
+}
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/sources/raster_source.hpp b/src/mbgl/style/sources/raster_source.hpp
new file mode 100644
index 0000000000..1b04865464
--- /dev/null
+++ b/src/mbgl/style/sources/raster_source.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <mbgl/style/source.hpp>
+
+namespace mbgl {
+namespace style {
+
+class RasterSource : public Source {
+public:
+ RasterSource(std::string id,
+ std::string url,
+ uint16_t tileSize,
+ std::unique_ptr<Tileset>&&,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&&);
+};
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/sources/vector_source.cpp b/src/mbgl/style/sources/vector_source.cpp
new file mode 100644
index 0000000000..6cbb667c40
--- /dev/null
+++ b/src/mbgl/style/sources/vector_source.cpp
@@ -0,0 +1,15 @@
+#include <mbgl/style/sources/vector_source.hpp>
+
+namespace mbgl {
+namespace style {
+
+VectorSource::VectorSource(std::string id_,
+ std::string url_,
+ uint16_t tileSize_,
+ std::unique_ptr<Tileset>&& tileset_,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&& geojsonvt_)
+ : Source(SourceType::Vector, std::move(id_), std::move(url_), tileSize_, std::move(tileset_), std::move(geojsonvt_)) {
+}
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/sources/vector_source.hpp b/src/mbgl/style/sources/vector_source.hpp
new file mode 100644
index 0000000000..e3a14a7531
--- /dev/null
+++ b/src/mbgl/style/sources/vector_source.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <mbgl/style/source.hpp>
+
+namespace mbgl {
+namespace style {
+
+class VectorSource : public Source {
+public:
+ VectorSource(std::string id,
+ std::string url,
+ uint16_t tileSize,
+ std::unique_ptr<Tileset>&&,
+ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&&);
+};
+
+} // namespace style
+} // namespace mbgl
diff --git a/test/style/source.cpp b/test/style/source.cpp
index ae8fb54d2f..6828042c6a 100644
--- a/test/style/source.cpp
+++ b/test/style/source.cpp
@@ -2,7 +2,10 @@
#include <mbgl/test/stub_file_source.hpp>
#include <mbgl/test/stub_style_observer.hpp>
-#include <mbgl/style/source.hpp>
+#include <mbgl/style/sources/raster_source.hpp>
+#include <mbgl/style/sources/vector_source.hpp>
+#include <mbgl/style/sources/geojson_source.hpp>
+
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/string.hpp>
#include <mbgl/util/io.hpp>
@@ -83,7 +86,7 @@ TEST(Source, LoadingFail) {
test.end();
};
- Source source(SourceType::Vector, "source", "url", 512, nullptr, nullptr);
+ VectorSource source("source", "url", 512, nullptr, nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
@@ -106,7 +109,7 @@ TEST(Source, LoadingCorrupt) {
test.end();
};
- Source source(SourceType::Vector, "source", "url", 512, nullptr, nullptr);
+ VectorSource source("source", "url", 512, nullptr, nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
@@ -134,7 +137,7 @@ TEST(Source, RasterTileEmpty) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr);
+ RasterSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);
@@ -163,7 +166,7 @@ TEST(Source, VectorTileEmpty) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr);
+ VectorSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);
@@ -192,7 +195,7 @@ TEST(Source, RasterTileFail) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr);
+ RasterSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);
@@ -221,7 +224,7 @@ TEST(Source, VectorTileFail) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr);
+ VectorSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);
@@ -249,7 +252,7 @@ TEST(Source, RasterTileCorrupt) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr);
+ RasterSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);
@@ -281,7 +284,7 @@ TEST(Source, VectorTileCorrupt) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr);
+ VectorSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);
@@ -308,7 +311,7 @@ TEST(Source, RasterTileCancel) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Raster, "source", "", 512, std::move(tileset), nullptr);
+ RasterSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);
@@ -335,7 +338,7 @@ TEST(Source, VectorTileCancel) {
auto tileset = std::make_unique<Tileset>();
tileset->tiles = { "tiles" };
- Source source(SourceType::Vector, "source", "", 512, std::move(tileset), nullptr);
+ VectorSource source("source", "", 512, std::move(tileset), nullptr);
source.setObserver(&test.observer);
source.load(test.fileSource);
source.update(test.updateParameters);