123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // 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 <cmath>
- #include <utility>
- #include <vector>
- #include "base/cxx17_backports.h"
- #include "base/strings/string_util.h"
- #include "base/strings/stringprintf.h"
- #include "content/public/common/color_parser.h"
- #include "ui/gfx/color_utils.h"
- namespace {
- bool IsHexFormat(const std::string& str) {
- // Must be either #ARGB or #AARRGGBB.
- bool is_hex_length = str.length() == 5 || str.length() == 9;
- if (str[0] != '#' || !is_hex_length)
- return false;
- if (!std::all_of(str.begin() + 1, str.end(), ::isxdigit))
- return false;
- return true;
- }
- } // namespace
- namespace electron {
- SkColor ParseCSSColor(const std::string& color_string) {
- // ParseCssColorString expects RGBA and we historically use ARGB
- // so we need to convert before passing to ParseCssColorString.
- std::string color_str = color_string;
- if (IsHexFormat(color_str)) {
- if (color_str.length() == 5) {
- // #ARGB => #RGBA
- std::swap(color_str[1], color_str[4]);
- } else {
- // #AARRGGBB => #RRGGBBAA
- std::swap(color_str[1], color_str[7]);
- std::swap(color_str[2], color_str[8]);
- }
- }
- SkColor color;
- if (!content::ParseCssColorString(color_str, &color))
- color = SK_ColorWHITE;
- return color;
- }
- 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
|