| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #pragma once
- #include <string>
- #include <cstdlib>
- namespace lumacs {
- /// RGB Color representation
- struct Color {
- int r, g, b;
- Color(int r = 0, int g = 0, int b = 0) : r(r), g(g), b(b) {}
- /// Convert to ncurses color index (will be assigned dynamically)
- int to_ncurses_color() const;
- /// Create Color from hex string (e.g., "#FF5500" or "FF5500")
- static Color from_hex(const std::string& hex) {
- std::string h = hex;
- // Remove leading # if present
- if (!h.empty() && h[0] == '#') {
- h = h.substr(1);
- }
- // Parse hex values
- if (h.length() >= 6) {
- int r = static_cast<int>(std::strtol(h.substr(0, 2).c_str(), nullptr, 16));
- int g = static_cast<int>(std::strtol(h.substr(2, 2).c_str(), nullptr, 16));
- int b = static_cast<int>(std::strtol(h.substr(4, 2).c_str(), nullptr, 16));
- return Color(r, g, b);
- }
- return Color(0, 0, 0); // Default to black on parse error
- }
- /// Comparison operator for use in maps
- bool operator<(const Color& other) const {
- if (r != other.r) return r < other.r;
- if (g != other.g) return g < other.g;
- return b < other.b;
- }
- bool operator==(const Color& other) const {
- return r == other.r && g == other.g && b == other.b;
- }
- };
- } // namespace lumacs
|