diff options
Diffstat (limited to 'src/mbgl/style/sources/image_source.cpp')
-rw-r--r-- | src/mbgl/style/sources/image_source.cpp | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/mbgl/style/sources/image_source.cpp b/src/mbgl/style/sources/image_source.cpp index 7b62c6fb9d..2e2f8c0148 100644 --- a/src/mbgl/style/sources/image_source.cpp +++ b/src/mbgl/style/sources/image_source.cpp @@ -1,4 +1,7 @@ #include <mbgl/storage/file_source.hpp> +#include <mbgl/style/conversion/constant.hpp> +#include <mbgl/style/conversion/coordinate.hpp> +#include <mbgl/style/conversion_impl.hpp> #include <mbgl/style/layer.hpp> #include <mbgl/style/source_observer.hpp> #include <mbgl/style/sources/image_source.hpp> @@ -105,22 +108,39 @@ Mutable<Source::Impl> ImageSource::createMutable() const noexcept { } Value ImageSource::serialize() const { + using namespace conversion; auto value = Source::serialize(); assert(value.getObject()); auto object = value.getObject(); - if (url) object->insert({"url", url.value()}); + object->insert({"coordinates", makeValue(getCoordinates())}); - const auto source_coordinates = getCoordinates(); - std::vector<mapbox::base::Value> coordinates; - coordinates.reserve(source_coordinates.size()); + return value; +} - for (const auto& c : source_coordinates) { - coordinates.emplace_back(std::vector<mapbox::base::Value>{c.longitude(), c.latitude()}); +optional<conversion::Error> ImageSource::setPropertyInternal(const std::string& name, + const conversion::Convertible& value) { + using namespace conversion; + optional<Error> error; + if (name == "url") { + if (auto url_ = convert<std::string>(value, *error)) { + setURL(*url_); + return nullopt; + } + } else if (name == "coordinates") { + if (auto coordinates = convert<std::array<LatLng, 4>>(value, *error)) { + setCoordinates(*coordinates); + return nullopt; + } } - object->insert({"coordinates", coordinates}); + return error ? error : Source::setPropertyInternal(name, value); +} - return value; +Value ImageSource::getPropertyInternal(const std::string& name) const { + using namespace conversion; + if (name == "url" && url) return *url; + if (name == "coordinates") return makeValue(getCoordinates()); + return Value(); } } // namespace style |