From da95eca6356ec90260d7ac4205a06d04f9959c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Fri, 30 Mar 2018 03:21:44 -0700 Subject: [core] Fixed to-rgba with zero opacity --- include/mbgl/util/color.hpp | 2 ++ mapbox-gl-js | 2 +- src/mbgl/style/expression/compound_expression.cpp | 7 +------ src/mbgl/style/expression/value.cpp | 9 +++++---- src/mbgl/util/color.cpp | 22 ++++++++++++++++++---- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/include/mbgl/util/color.hpp b/include/mbgl/util/color.hpp index 300d7fae82..01a4c8f292 100644 --- a/include/mbgl/util/color.hpp +++ b/include/mbgl/util/color.hpp @@ -4,6 +4,7 @@ #include #include +#include namespace mbgl { @@ -37,6 +38,7 @@ public: static optional parse(const std::string&); std::string stringify() const; + std::array toArray() const; }; inline bool operator==(const Color& colorA, const Color& colorB) { diff --git a/mapbox-gl-js b/mapbox-gl-js index 34902f8db3..bbee7e5169 160000 --- a/mapbox-gl-js +++ b/mapbox-gl-js @@ -1 +1 @@ -Subproject commit 34902f8db3f8a3757a465d62a96b8fa731ee1461 +Subproject commit bbee7e51695184e9b3c0ecb74d314c4ab73d4c27 diff --git a/src/mbgl/style/expression/compound_expression.cpp b/src/mbgl/style/expression/compound_expression.cpp index b1c2d74a9f..77b294b380 100644 --- a/src/mbgl/style/expression/compound_expression.cpp +++ b/src/mbgl/style/expression/compound_expression.cpp @@ -209,12 +209,7 @@ std::unordered_map initiali ); }); define("to-rgba", [](const Color& color) -> Result> { - return std::array {{ - 255 * color.r / color.a, - 255 * color.g / color.a, - 255 * color.b / color.a, - color.a - }}; + return color.toArray(); }); define("rgba", rgba); diff --git a/src/mbgl/style/expression/value.cpp b/src/mbgl/style/expression/value.cpp index 72779d4956..627f6f92e8 100644 --- a/src/mbgl/style/expression/value.cpp +++ b/src/mbgl/style/expression/value.cpp @@ -106,12 +106,13 @@ Value ValueConverter::toExpressionValue(const mbgl::Value& value) { mbgl::Value ValueConverter::fromExpressionValue(const Value& value) { return value.match( [&](const Color& color)->mbgl::Value { + auto array = color.toArray(); return std::vector{ std::string("rgba"), - double(255 * color.r / color.a), - double(255 * color.g / color.a), - double(255 * color.b / color.a), - double(color.a) + array[0], + array[1], + array[2], + array[3], }; }, [&](const std::vector& values)->mbgl::Value { diff --git a/src/mbgl/util/color.cpp b/src/mbgl/util/color.cpp index c8145d36e7..ab311382b5 100644 --- a/src/mbgl/util/color.cpp +++ b/src/mbgl/util/color.cpp @@ -23,11 +23,25 @@ optional Color::parse(const std::string& s) { } std::string Color::stringify() const { + auto array = toArray(); return "rgba(" + - util::toString(r * 255 / a) + "," + - util::toString(g * 255 / a) + "," + - util::toString(b * 255 / a) + "," + - util::toString(a) + ")"; + util::toString(array[0]) + "," + + util::toString(array[1]) + "," + + util::toString(array[2]) + "," + + util::toString(array[3]) + ")"; +} + +std::array Color::toArray() const { + if (a == 0) { + return {{}}; + } else { + return {{ + r * 255 / a, + g * 255 / a, + b * 255 / a, + a, + }}; + } } } // namespace mbgl -- cgit v1.2.1