// Copyright (c) 2016 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #include "shell/common/color_util.h" #include #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" namespace electron { SkColor ParseHexColor(const std::string& color_string) { // Check the string for incorrect formatting. if (color_string.empty() || color_string[0] != '#') return SK_ColorWHITE; // Prepend FF if alpha channel is not specified. std::string source = color_string.substr(1); if (source.size() == 3) source.insert(0, "F"); else if (source.size() == 6) source.insert(0, "FF"); // Convert the string from #FFF format to #FFFFFF format. std::string formatted_color; if (source.size() == 4) { for (size_t i = 0; i < 4; ++i) { formatted_color += source[i]; formatted_color += source[i]; } } else if (source.size() == 8) { formatted_color = source; } else { return SK_ColorWHITE; } // Convert the string to an integer and make sure it is in the correct value // range. std::vector bytes; if (!base::HexStringToBytes(formatted_color, &bytes)) return SK_ColorWHITE; return SkColorSetARGB(bytes[0], bytes[1], bytes[2], bytes[3]); } std::string ToRGBHex(SkColor color) { return base::StringPrintf("#%02X%02X%02X", SkColorGetR(color), SkColorGetG(color), SkColorGetB(color)); } std::string ToRGBAHex(SkColor color, bool include_hash) { std::string color_str = base::StringPrintf( "%02X%02X%02X%02X", SkColorGetR(color), SkColorGetG(color), SkColorGetB(color), SkColorGetA(color)); if (include_hash) { return "#" + color_str; } return color_str; } } // namespace electron