#include #include #include namespace mbgl { 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", double(r)}, {"g", double(g)}, {"b", double(b)}, {"a", double(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