summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2020-02-25 12:29:04 +0200
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2020-02-26 18:15:23 +0200
commite55a46e5d19178a04b8244f7077ac71f12df639d (patch)
tree5a46ccacccfbb2b42f0dd82cb1fc54bebb0d50c1
parent8785f77cd633be92123464310f85ea671689473c (diff)
downloadqtlocation-mapboxgl-e55a46e5d19178a04b8244f7077ac71f12df639d.tar.gz
[core] Fix Color serialization
-rw-r--r--include/mbgl/style/conversion_impl.hpp9
-rw-r--r--include/mbgl/util/color.hpp1
-rw-r--r--src/mbgl/style/expression/value.cpp11
-rw-r--r--src/mbgl/util/color.cpp11
4 files changed, 19 insertions, 13 deletions
diff --git a/include/mbgl/style/conversion_impl.hpp b/include/mbgl/style/conversion_impl.hpp
index 73d83302a0..30aa132ce0 100644
--- a/include/mbgl/style/conversion_impl.hpp
+++ b/include/mbgl/style/conversion_impl.hpp
@@ -318,7 +318,7 @@ struct ValueFactory<TransitionOptions> {
template <>
struct ValueFactory<Color> {
- static Value make(const Color& color) { return color.toObject(); }
+ static Value make(const Color& color) { return color.serialize(); }
};
template <typename T>
@@ -358,11 +358,14 @@ Value makeValue(T&& arg) {
template <typename T>
StyleProperty makeStyleProperty(const PropertyValue<T>& value) {
return value.match([](const Undefined&) -> StyleProperty { return {}; },
- [](const T& t) -> StyleProperty {
- return {makeValue(t), StyleProperty::Kind::Constant};
+ [](const Color& c) -> StyleProperty {
+ return {makeValue(c), StyleProperty::Kind::Expression};
},
[](const PropertyExpression<T>& fn) -> StyleProperty {
return {fn.getExpression().serialize(), StyleProperty::Kind::Expression};
+ },
+ [](const auto& t) -> StyleProperty {
+ return {makeValue(t), StyleProperty::Kind::Constant};
});
}
diff --git a/include/mbgl/util/color.hpp b/include/mbgl/util/color.hpp
index 1ff44ce085..8a03abfcdb 100644
--- a/include/mbgl/util/color.hpp
+++ b/include/mbgl/util/color.hpp
@@ -41,6 +41,7 @@ public:
std::string stringify() const;
std::array<double, 4> toArray() const;
mbgl::Value toObject() const;
+ mbgl::Value serialize() const;
};
inline bool operator==(const Color& colorA, const Color& colorB) {
diff --git a/src/mbgl/style/expression/value.cpp b/src/mbgl/style/expression/value.cpp
index aac1c61655..110844f421 100644
--- a/src/mbgl/style/expression/value.cpp
+++ b/src/mbgl/style/expression/value.cpp
@@ -126,16 +126,7 @@ Value ValueConverter<mbgl::Value>::toExpressionValue(const mbgl::Value& value) {
mbgl::Value ValueConverter<mbgl::Value>::fromExpressionValue(const Value& value) {
return value.match(
- [&](const Color& color) -> mbgl::Value {
- std::array<double, 4> array = color.toArray();
- return std::vector<mbgl::Value>{
- std::string("rgba"),
- array[0],
- array[1],
- array[2],
- array[3],
- };
- },
+ [&](const Color& color) -> mbgl::Value { return color.serialize(); },
[&](const Collator&) -> mbgl::Value {
// fromExpressionValue can't be used for Collator values,
// because they have no meaningful representation as an mbgl::Value
diff --git a/src/mbgl/util/color.cpp b/src/mbgl/util/color.cpp
index 44f815e8b8..5d30d25244 100644
--- a/src/mbgl/util/color.cpp
+++ b/src/mbgl/util/color.cpp
@@ -48,4 +48,15 @@ mbgl::Value Color::toObject() const {
return mapbox::base::ValueObject{{"r", double(r)}, {"g", double(g)}, {"b", double(b)}, {"a", double(a)}};
}
+mbgl::Value Color::serialize() const {
+ std::array<double, 4> array = toArray();
+ return std::vector<mbgl::Value>{
+ std::string("rgba"),
+ array[0],
+ array[1],
+ array[2],
+ array[3],
+ };
+}
+
} // namespace mbgl