Colors.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * IFont.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "Colors.h"
  12. #include "../../lib/json/JsonNode.h"
  13. const ColorRGBA Colors::YELLOW = { 229, 215, 123, ColorRGBA::ALPHA_OPAQUE };
  14. const ColorRGBA Colors::WHITE = { 255, 243, 222, ColorRGBA::ALPHA_OPAQUE };
  15. const ColorRGBA Colors::METALLIC_GOLD = { 173, 142, 66, ColorRGBA::ALPHA_OPAQUE };
  16. const ColorRGBA Colors::GREEN = { 0, 255, 0, ColorRGBA::ALPHA_OPAQUE };
  17. const ColorRGBA Colors::CYAN = { 0, 255, 255, ColorRGBA::ALPHA_OPAQUE };
  18. const ColorRGBA Colors::ORANGE = { 232, 184, 32, ColorRGBA::ALPHA_OPAQUE };
  19. const ColorRGBA Colors::BRIGHT_YELLOW = { 242, 226, 110, ColorRGBA::ALPHA_OPAQUE };
  20. const ColorRGBA Colors::DEFAULT_KEY_COLOR = {0, 255, 255, ColorRGBA::ALPHA_OPAQUE};
  21. const ColorRGBA Colors::RED = {255, 0, 0, ColorRGBA::ALPHA_OPAQUE};
  22. const ColorRGBA Colors::PURPLE = {255, 75, 125, ColorRGBA::ALPHA_OPAQUE};
  23. const ColorRGBA Colors::BLACK = {0, 0, 0, ColorRGBA::ALPHA_OPAQUE};
  24. const ColorRGBA Colors::TRANSPARENCY = {0, 0, 0, ColorRGBA::ALPHA_TRANSPARENT};
  25. std::optional<ColorRGBA> Colors::parseColor(std::string text)
  26. {
  27. std::smatch match;
  28. std::regex expr("^#([0-9a-fA-F]{6})$");
  29. std::vector<ui8> rgb;
  30. rgb.reserve(3);
  31. if(std::regex_search(text, match, expr))
  32. {
  33. boost::algorithm::unhex(match[1].str(), std::back_inserter(rgb));
  34. return ColorRGBA(rgb[0], rgb[1], rgb[2]);
  35. }
  36. static const JsonNode config(JsonPath::builtin("CONFIG/textColors"));
  37. auto colors = config["colors"].Struct();
  38. for(auto & color : colors) {
  39. if(boost::algorithm::to_lower_copy(color.first) == boost::algorithm::to_lower_copy(text))
  40. {
  41. boost::algorithm::unhex(color.second.String(), std::back_inserter(rgb));
  42. return ColorRGBA(rgb[0], rgb[1], rgb[2]);
  43. }
  44. }
  45. return std::nullopt;
  46. }