diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-06-16 13:25:06 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-16 13:25:06 -0700 |
commit | 19158d9f01909bf566616524f23e0acb635562f7 (patch) | |
tree | a3adf8c8713dbe6d20fe9fae055836e677b4ca47 | |
parent | 3f024ebaf02e82e9282e303a46127f366a84904d (diff) | |
download | qtlocation-mapboxgl-19158d9f01909bf566616524f23e0acb635562f7.tar.gz |
[core, node] Implement setPaintProperty for color properties (#5380)
-rw-r--r-- | include/mbgl/map/view.hpp | 1 | ||||
-rw-r--r-- | include/mbgl/util/color.hpp | 6 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | platform/node/src/node_style.hpp | 14 | ||||
-rw-r--r-- | src/mbgl/style/property_parsing.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/util/color.cpp | 20 |
6 files changed, 45 insertions, 14 deletions
diff --git a/include/mbgl/map/view.hpp b/include/mbgl/map/view.hpp index 9f12ee5fb6..fa6f91d910 100644 --- a/include/mbgl/map/view.hpp +++ b/include/mbgl/map/view.hpp @@ -4,6 +4,7 @@ #include <mbgl/util/chrono.hpp> #include <mbgl/util/image.hpp> +#include <array> #include <functional> #include <memory> diff --git a/include/mbgl/util/color.hpp b/include/mbgl/util/color.hpp index 87d3175178..6491f75801 100644 --- a/include/mbgl/util/color.hpp +++ b/include/mbgl/util/color.hpp @@ -1,6 +1,8 @@ #pragma once -#include <array> +#include <mbgl/util/optional.hpp> + +#include <string> namespace mbgl { @@ -14,6 +16,8 @@ public: static constexpr Color black() { return { 0.0f, 0.0f, 0.0f, 1.0f }; }; static constexpr Color white() { return { 1.0f, 1.0f, 1.0f, 1.0f }; }; + + static optional<Color> parse(const std::string&); }; inline bool operator==(const Color& colorA, const Color& colorB) { diff --git a/package.json b/package.json index 5785994247..08e666dec6 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "express": "^4.11.1", "mapbox-gl-shaders": "mapbox/mapbox-gl-shaders#59e998295d548f208ee3ec10cdd21ff2630e2079", "mapbox-gl-style-spec": "mapbox/mapbox-gl-style-spec#194fc55b6a7dd54c1e2cf2dd9048fbb5e836716d", - "mapbox-gl-test-suite": "mapbox/mapbox-gl-test-suite#05d8865cf38920d5d15de0e410475514d6edace0", + "mapbox-gl-test-suite": "mapbox/mapbox-gl-test-suite#3a6baea2f364410e6d0873b71babfe0484870a72", "node-gyp": "^3.3.1", "request": "^2.72.0", "tape": "^4.5.1" diff --git a/platform/node/src/node_style.hpp b/platform/node/src/node_style.hpp index a987c0d262..0b6b05e13b 100644 --- a/platform/node/src/node_style.hpp +++ b/platform/node/src/node_style.hpp @@ -65,8 +65,18 @@ struct ValueConverter<T, std::enable_if_t<std::is_enum<T>::value>> { template <> struct ValueConverter<mbgl::Color> { mbgl::optional<mbgl::style::PropertyValue<mbgl::Color>> operator()(const v8::Local<v8::Value>& value) const { - (void)value; - return {}; + if (!value->IsString()) { + Nan::ThrowTypeError("string required"); + return {}; + } + + mbgl::optional<mbgl::Color> result = mbgl::Color::parse(*Nan::Utf8String(value)); + if (!result) { + Nan::ThrowTypeError("invalid color"); + return {}; + } + + return { *result }; } }; diff --git a/src/mbgl/style/property_parsing.cpp b/src/mbgl/style/property_parsing.cpp index 2b08ba8788..2eb55dcb25 100644 --- a/src/mbgl/style/property_parsing.cpp +++ b/src/mbgl/style/property_parsing.cpp @@ -2,8 +2,6 @@ #include <mbgl/platform/log.hpp> -#include <csscolorparser/csscolorparser.hpp> - namespace mbgl { namespace style { @@ -44,15 +42,13 @@ optional<Color> parseConstant(const char* name, const JSValue& value) { return {}; } - CSSColorParser::Color css_color = CSSColorParser::parse({ value.GetString(), value.GetStringLength() }); - - // Premultiply the color. - const float factor = css_color.a / 255; + optional<Color> result = Color::parse({ value.GetString(), value.GetStringLength() }); + if (!result) { + Log::Warning(Event::ParseStyle, "value of '%s' must be a valid color", name); + return {}; + } - return Color{ (float)css_color.r * factor, - (float)css_color.g * factor, - (float)css_color.b * factor, - css_color.a }; + return result; } template <> diff --git a/src/mbgl/util/color.cpp b/src/mbgl/util/color.cpp new file mode 100644 index 0000000000..eea897d3ab --- /dev/null +++ b/src/mbgl/util/color.cpp @@ -0,0 +1,20 @@ +#include <mbgl/util/color.hpp> + +#include <csscolorparser/csscolorparser.hpp> + +namespace mbgl { + +optional<Color> Color::parse(const std::string& s) { + CSSColorParser::Color css_color = CSSColorParser::parse(s); + + // Premultiply the color. + const float factor = css_color.a / 255; + return {{ + css_color.r * factor, + css_color.g * factor, + css_color.b * factor, + css_color.a + }}; +} + +} // namespace mbgl |