#include #include #include namespace mbgl { std::optional Color::parse(const std::string& s) { auto css_color = CSSColorParser::parse(s); // Premultiply the color. if (css_color) { const float factor = css_color->a / 255; return {{css_color->r * factor, css_color->g * factor, css_color->b * factor, css_color->a}}; } else { return {}; } } std::string Color::stringify() const { std::array array = toArray(); return "rgba(" + 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 {{0, 0, 0, 0}}; } else { return {{ r * 255 / a, g * 255 / a, b * 255 / a, floor(a * 100 + .5) / 100 // round to 2 decimal places }}; } } mbgl::Value Color::toObject() const { return mapbox::base::ValueObject{{"r", static_cast(r)}, {"g", static_cast(g)}, {"b", static_cast(b)}, {"a", static_cast(a)}}; } mbgl::Value Color::serialize() const { std::array array = toArray(); return std::vector{ std::string("rgba"), array[0], array[1], array[2], array[3], }; } } // namespace mbgl