mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-11-04 05:28:15 +08:00 
			
		
		
		
	Add support for full RGB colors.
FTXUI supported only the 16 colors palette. This patch adds support for the 256 palette and the TrueColor(8×8×8) mode. This was made by kerdelos@ and fixes issue: https://github.com/ArthurSonzogni/FTXUI/issues/45 Co-authored-by: Damien D <kerdelos@gmail.com> Co-authored-by: Arthur Sonzogni <sonzogniarthur@gmail.com>
This commit is contained in:
		
				
					committed by
					
						
						Arthur Sonzogni
					
				
			
			
				
	
			
			
			
						parent
						
							49941b6403
						
					
				
				
					commit
					dc8c090753
				
			@@ -2,39 +2,307 @@
 | 
			
		||||
#define FTXUI_SCREEN_COLOR
 | 
			
		||||
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
namespace ftxui {
 | 
			
		||||
 | 
			
		||||
/// @brief The set of supported terminal colors.
 | 
			
		||||
/// @brief A class representing terminal colors.
 | 
			
		||||
/// @ingroup screen
 | 
			
		||||
enum class Color : uint8_t {
 | 
			
		||||
  // --- Transparent -----
 | 
			
		||||
  Default = 39,
 | 
			
		||||
class Color {
 | 
			
		||||
 public:
 | 
			
		||||
  // clang-format off
 | 
			
		||||
  enum Palette16 {
 | 
			
		||||
    Black        = 30,
 | 
			
		||||
    Blue         = 34,
 | 
			
		||||
    BlueLight    = 94,
 | 
			
		||||
    Cyan         = 36,
 | 
			
		||||
    CyanLight    = 96,
 | 
			
		||||
    Default      = 39, // Transparent
 | 
			
		||||
    GrayDark     = 90,
 | 
			
		||||
    GrayLight    = 37,
 | 
			
		||||
    Green        = 32,
 | 
			
		||||
    GreenLight   = 92,
 | 
			
		||||
    Magenta      = 35,
 | 
			
		||||
    MagentaLight = 95,
 | 
			
		||||
    Red          = 31,
 | 
			
		||||
    RedLight     = 91,
 | 
			
		||||
    White        = 97,
 | 
			
		||||
    Yellow       = 33,
 | 
			
		||||
    YellowLight  = 93,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // --- Grayscale -----
 | 
			
		||||
  Black = 30,
 | 
			
		||||
  GrayDark = 90,
 | 
			
		||||
  GrayLight = 37,
 | 
			
		||||
  White = 97,
 | 
			
		||||
  enum Palette256 {
 | 
			
		||||
    Aquamarine1        = 122,
 | 
			
		||||
    Aquamarine1Bis     = 86,
 | 
			
		||||
    Aquamarine3        = 79,
 | 
			
		||||
    Blue1              = 21,
 | 
			
		||||
    Blue3              = 19,
 | 
			
		||||
    Blue3Bis           = 20,
 | 
			
		||||
    BlueViolet         = 57,
 | 
			
		||||
    CadetBlue          = 72,
 | 
			
		||||
    CadetBlueBis       = 73,
 | 
			
		||||
    Chartreuse1        = 118,
 | 
			
		||||
    Chartreuse2        = 112,
 | 
			
		||||
    Chartreuse2Bis     = 82,
 | 
			
		||||
    Chartreuse3        = 70,
 | 
			
		||||
    Chartreuse3Bis     = 76,
 | 
			
		||||
    Chartreuse4        = 64,
 | 
			
		||||
    CornflowerBlue     = 69,
 | 
			
		||||
    Cornsilk1          = 230,
 | 
			
		||||
    Cyan1              = 51,
 | 
			
		||||
    Cyan2              = 50,
 | 
			
		||||
    Cyan3              = 43,
 | 
			
		||||
    DarkBlue           = 18,
 | 
			
		||||
    DarkCyan           = 36,
 | 
			
		||||
    DarkGoldenrod      = 136,
 | 
			
		||||
    DarkGreen          = 22,
 | 
			
		||||
    DarkKhaki          = 143,
 | 
			
		||||
    DarkMagenta        = 90,
 | 
			
		||||
    DarkMagentaBis     = 91,
 | 
			
		||||
    DarkOliveGreen1    = 191,
 | 
			
		||||
    DarkOliveGreen1Bis = 192,
 | 
			
		||||
    DarkOliveGreen2    = 155,
 | 
			
		||||
    DarkOliveGreen3    = 107,
 | 
			
		||||
    DarkOliveGreen3Bis = 113,
 | 
			
		||||
    DarkOliveGreen3Ter = 149,
 | 
			
		||||
    DarkOrange         = 208,
 | 
			
		||||
    DarkOrange3        = 130,
 | 
			
		||||
    DarkOrange3Bis     = 166,
 | 
			
		||||
    DarkRed            = 52,
 | 
			
		||||
    DarkRedBis         = 88,
 | 
			
		||||
    DarkSeaGreen       = 108,
 | 
			
		||||
    DarkSeaGreen1      = 158,
 | 
			
		||||
    DarkSeaGreen1Bis   = 193,
 | 
			
		||||
    DarkSeaGreen2      = 151,
 | 
			
		||||
    DarkSeaGreen2Bis   = 157,
 | 
			
		||||
    DarkSeaGreen3      = 115,
 | 
			
		||||
    DarkSeaGreen3Bis   = 150,
 | 
			
		||||
    DarkSeaGreen4      = 65,
 | 
			
		||||
    DarkSeaGreen4Bis   = 71,
 | 
			
		||||
    DarkSlateGray1     = 123,
 | 
			
		||||
    DarkSlateGray2     = 87,
 | 
			
		||||
    DarkSlateGray3     = 116,
 | 
			
		||||
    DarkTurquoise      = 44,
 | 
			
		||||
    DarkViolet         = 128,
 | 
			
		||||
    DarkVioletBis      = 92,
 | 
			
		||||
    DeepPink1          = 198,
 | 
			
		||||
    DeepPink1Bis       = 199,
 | 
			
		||||
    DeepPink2          = 197,
 | 
			
		||||
    DeepPink3          = 161,
 | 
			
		||||
    DeepPink3Bis       = 162,
 | 
			
		||||
    DeepPink4          = 125,
 | 
			
		||||
    DeepPink4Bis          = 89,
 | 
			
		||||
    DeepPink4Ter       = 53,
 | 
			
		||||
    DeepSkyBlue1       = 39,
 | 
			
		||||
    DeepSkyBlue2       = 38,
 | 
			
		||||
    DeepSkyBlue3       = 31,
 | 
			
		||||
    DeepSkyBlue3Bis    = 32,
 | 
			
		||||
    DeepSkyBlue4       = 23,
 | 
			
		||||
    DeepSkyBlue4Bis    = 24,
 | 
			
		||||
    DeepSkyBlue4Ter    = 25,
 | 
			
		||||
    DodgerBlue1        = 33,
 | 
			
		||||
    DodgerBlue2        = 27,
 | 
			
		||||
    DodgerBlue3        = 26,
 | 
			
		||||
    Gold1              = 220,
 | 
			
		||||
    Gold3              = 142,
 | 
			
		||||
    Gold3Bis           = 178,
 | 
			
		||||
    Green1             = 46,
 | 
			
		||||
    Green3             = 34,
 | 
			
		||||
    Green3Bis          = 40,
 | 
			
		||||
    Green4             = 28,
 | 
			
		||||
    GreenYellow        = 154,
 | 
			
		||||
    Grey0              = 16,
 | 
			
		||||
    Grey100            = 231,
 | 
			
		||||
    Grey11             = 234,
 | 
			
		||||
    Grey15             = 235,
 | 
			
		||||
    Grey19             = 236,
 | 
			
		||||
    Grey23             = 237,
 | 
			
		||||
    Grey27             = 238,
 | 
			
		||||
    Grey3              = 232,
 | 
			
		||||
    Grey30             = 239,
 | 
			
		||||
    Grey35             = 240,
 | 
			
		||||
    Grey37             = 59,
 | 
			
		||||
    Grey39             = 241,
 | 
			
		||||
    Grey42             = 242,
 | 
			
		||||
    Grey46             = 243,
 | 
			
		||||
    Grey50             = 244,
 | 
			
		||||
    Grey53             = 102,
 | 
			
		||||
    Grey54             = 245,
 | 
			
		||||
    Grey58             = 246,
 | 
			
		||||
    Grey62             = 247,
 | 
			
		||||
    Grey63             = 139,
 | 
			
		||||
    Grey66             = 248,
 | 
			
		||||
    Grey69             = 145,
 | 
			
		||||
    Grey7              = 233,
 | 
			
		||||
    Grey70             = 249,
 | 
			
		||||
    Grey74             = 250,
 | 
			
		||||
    Grey78             = 251,
 | 
			
		||||
    Grey82             = 252,
 | 
			
		||||
    Grey84             = 188,
 | 
			
		||||
    Grey85             = 253,
 | 
			
		||||
    Grey89             = 254,
 | 
			
		||||
    Grey93             = 255,
 | 
			
		||||
    Honeydew2          = 194,
 | 
			
		||||
    HotPink            = 205,
 | 
			
		||||
    HotPink2           = 169,
 | 
			
		||||
    HotPink3           = 132,
 | 
			
		||||
    HotPink3Bis        = 168,
 | 
			
		||||
    HotPinkBis         = 206,
 | 
			
		||||
    IndianRed          = 131,
 | 
			
		||||
    IndianRed1         = 203,
 | 
			
		||||
    IndianRed1Bis      = 204,
 | 
			
		||||
    IndianRedBis       = 167,
 | 
			
		||||
    Khaki1             = 228,
 | 
			
		||||
    Khaki3             = 185,
 | 
			
		||||
    LightCoral         = 210,
 | 
			
		||||
    LightCyan1Bis      = 195,
 | 
			
		||||
    LightCyan3         = 152,
 | 
			
		||||
    LightGoldenrod1    = 227,
 | 
			
		||||
    LightGoldenrod2    = 186,
 | 
			
		||||
    LightGoldenrod2Bis = 221,
 | 
			
		||||
    LightGoldenrod2Ter = 222,
 | 
			
		||||
    LightGoldenrod3    = 179,
 | 
			
		||||
    LightGreen         = 119,
 | 
			
		||||
    LightGreenBis      = 120,
 | 
			
		||||
    LightPink1         = 217,
 | 
			
		||||
    LightPink3         = 174,
 | 
			
		||||
    LightPink4         = 95,
 | 
			
		||||
    LightSalmon1       = 216,
 | 
			
		||||
    LightSalmon3       = 137,
 | 
			
		||||
    LightSalmon3Bis       = 173,
 | 
			
		||||
    LightSeaGreen      = 37,
 | 
			
		||||
    LightSkyBlue1      = 153,
 | 
			
		||||
    LightSkyBlue3      = 109,
 | 
			
		||||
    LightSkyBlue3Bis      = 110,
 | 
			
		||||
    LightSlateBlue     = 105,
 | 
			
		||||
    LightSlateGrey     = 103,
 | 
			
		||||
    LightSteelBlue     = 147,
 | 
			
		||||
    LightSteelBlue1    = 189,
 | 
			
		||||
    LightSteelBlue3    = 146,
 | 
			
		||||
    LightYellow3       = 187,
 | 
			
		||||
    Magenta1           = 201,
 | 
			
		||||
    Magenta2           = 165,
 | 
			
		||||
    Magenta2Bis        = 200,
 | 
			
		||||
    Magenta3           = 127,
 | 
			
		||||
    Magenta3Bis        = 163,
 | 
			
		||||
    Magenta3Ter        = 164,
 | 
			
		||||
    MediumOrchid       = 134,
 | 
			
		||||
    MediumOrchid1      = 171,
 | 
			
		||||
    MediumOrchid1Bis   = 207,
 | 
			
		||||
    MediumOrchid3      = 133,
 | 
			
		||||
    MediumPurple       = 104,
 | 
			
		||||
    MediumPurple1      = 141,
 | 
			
		||||
    MediumPurple2      = 135,
 | 
			
		||||
    MediumPurple2Bis   = 140,
 | 
			
		||||
    MediumPurple3      = 97,
 | 
			
		||||
    MediumPurple3Bis   = 98,
 | 
			
		||||
    MediumPurple4      = 60,
 | 
			
		||||
    MediumSpringGreen  = 49,
 | 
			
		||||
    MediumTurquoise    = 80,
 | 
			
		||||
    MediumVioletRed    = 126,
 | 
			
		||||
    MistyRose1         = 224,
 | 
			
		||||
    MistyRose3         = 181,
 | 
			
		||||
    NavajoWhite1       = 223,
 | 
			
		||||
    NavajoWhite3       = 144,
 | 
			
		||||
    NavyBlue           = 17,
 | 
			
		||||
    Orange1            = 214,
 | 
			
		||||
    Orange3            = 172,
 | 
			
		||||
    Orange4            = 58,
 | 
			
		||||
    Orange4Bis         = 94,
 | 
			
		||||
    OrangeRed1         = 202,
 | 
			
		||||
    Orchid             = 170,
 | 
			
		||||
    Orchid1            = 213,
 | 
			
		||||
    Orchid2            = 212,
 | 
			
		||||
    PaleGreen1         = 121,
 | 
			
		||||
    PaleGreen1Bis      = 156,
 | 
			
		||||
    PaleGreen3         = 114,
 | 
			
		||||
    PaleGreen3Bis      = 77,
 | 
			
		||||
    PaleTurquoise1     = 159,
 | 
			
		||||
    PaleTurquoise4     = 66,
 | 
			
		||||
    PaleVioletRed1     = 211,
 | 
			
		||||
    Pink1              = 218,
 | 
			
		||||
    Pink3              = 175,
 | 
			
		||||
    Plum1              = 219,
 | 
			
		||||
    Plum2              = 183,
 | 
			
		||||
    Plum3              = 176,
 | 
			
		||||
    Plum4              = 96,
 | 
			
		||||
    Purple             = 129,
 | 
			
		||||
    Purple3            = 56,
 | 
			
		||||
    Purple4            = 54,
 | 
			
		||||
    Purple4Bis         = 55,
 | 
			
		||||
    PurpleBis          = 93,
 | 
			
		||||
    Red1               = 196,
 | 
			
		||||
    Red3               = 124,
 | 
			
		||||
    Red3Bis            = 160,
 | 
			
		||||
    RosyBrown          = 138,
 | 
			
		||||
    RoyalBlue1         = 63,
 | 
			
		||||
    Salmon1            = 209,
 | 
			
		||||
    SandyBrown         = 215,
 | 
			
		||||
    SeaGreen1          = 84,
 | 
			
		||||
    SeaGreen1Bis       = 85,
 | 
			
		||||
    SeaGreen2          = 83,
 | 
			
		||||
    SeaGreen3          = 78,
 | 
			
		||||
    SkyBlue1           = 117,
 | 
			
		||||
    SkyBlue2           = 111,
 | 
			
		||||
    SkyBlue3           = 74,
 | 
			
		||||
    SlateBlue1         = 99,
 | 
			
		||||
    SlateBlue3         = 61,
 | 
			
		||||
    SlateBlue3Bis      = 62,
 | 
			
		||||
    SpringGreen1       = 48,
 | 
			
		||||
    SpringGreen2       = 42,
 | 
			
		||||
    SpringGreen2Bis    = 47,
 | 
			
		||||
    SpringGreen3       = 35,
 | 
			
		||||
    SpringGreen3Bis    = 41,
 | 
			
		||||
    SpringGreen4       = 29,
 | 
			
		||||
    SteelBlue          = 67,
 | 
			
		||||
    SteelBlue1         = 75,
 | 
			
		||||
    SteelBlue1Bis      = 81,
 | 
			
		||||
    SteelBlue3         = 68,
 | 
			
		||||
    Tan                = 180,
 | 
			
		||||
    Thistle1           = 225,
 | 
			
		||||
    Thistle3           = 182,
 | 
			
		||||
    Turquoise2         = 45,
 | 
			
		||||
    Turquoise4         = 30,
 | 
			
		||||
    Violet             = 177,
 | 
			
		||||
    Wheat1             = 229,
 | 
			
		||||
    Wheat4             = 101,
 | 
			
		||||
    Yellow1            = 226,
 | 
			
		||||
    Yellow2            = 190,
 | 
			
		||||
    Yellow3            = 148,
 | 
			
		||||
    Yellow3Bis         = 184,
 | 
			
		||||
    Yellow4            = 100,
 | 
			
		||||
    Yellow4Bis         = 106,
 | 
			
		||||
  };
 | 
			
		||||
  // clang-format on
 | 
			
		||||
 | 
			
		||||
  // --- Hue -----
 | 
			
		||||
  Blue = 34,
 | 
			
		||||
  BlueLight = 94,
 | 
			
		||||
 public:
 | 
			
		||||
  Color(); // Transparent.
 | 
			
		||||
  Color(Palette256 index);  // Implicit conversion from index to Color.
 | 
			
		||||
  Color(Palette16 index);   // Implicit conversion from index to Color.
 | 
			
		||||
  Color(uint8_t red, uint8_t green, uint8_t blue);
 | 
			
		||||
  static Color RGB(uint8_t red, uint8_t green, uint8_t blue);
 | 
			
		||||
  static Color HSV(uint8_t hue, uint8_t saturation, uint8_t value);
 | 
			
		||||
 | 
			
		||||
  Cyan = 36,
 | 
			
		||||
  CyanLight = 96,
 | 
			
		||||
  // --- Operators ------
 | 
			
		||||
  bool operator==(const Color& rhs) const;
 | 
			
		||||
  bool operator!=(const Color& rhs) const;
 | 
			
		||||
 | 
			
		||||
  Green = 32,
 | 
			
		||||
  GreenLight = 92,
 | 
			
		||||
  std::wstring Print(bool is_background_color) const;
 | 
			
		||||
 | 
			
		||||
  Magenta = 35,
 | 
			
		||||
  MagentaLight = 95,
 | 
			
		||||
 private:
 | 
			
		||||
  enum class ColorType : uint8_t {
 | 
			
		||||
    Palette16,
 | 
			
		||||
    Palette256,
 | 
			
		||||
    TrueColor,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Red = 31,
 | 
			
		||||
  RedLight = 91,
 | 
			
		||||
 | 
			
		||||
  Yellow = 33,
 | 
			
		||||
  YellowLight = 93,
 | 
			
		||||
  ColorType type_;
 | 
			
		||||
  union {
 | 
			
		||||
    uint8_t index_ = 0;
 | 
			
		||||
    uint8_t red_;
 | 
			
		||||
  };
 | 
			
		||||
  uint8_t green_ = 0;
 | 
			
		||||
  uint8_t blue_ = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace ftxui
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								include/ftxui/screen/terminal.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								include/ftxui/screen/terminal.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
#ifndef FTXUI_CORE_TERMINAL_HPP
 | 
			
		||||
#define FTXUI_CORE_TERMINAL_HPP
 | 
			
		||||
 | 
			
		||||
namespace ftxui {
 | 
			
		||||
 | 
			
		||||
class Terminal {
 | 
			
		||||
 public:
 | 
			
		||||
  struct Dimensions {
 | 
			
		||||
    int dimx;
 | 
			
		||||
    int dimy;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static bool CanSupportTrueColors();
 | 
			
		||||
 | 
			
		||||
  static Dimensions Size();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace ftxui
 | 
			
		||||
 | 
			
		||||
#endif /* end of include guard: FTXUI_CORE_TERMINAL_HPP */
 | 
			
		||||
 | 
			
		||||
// Copyright 2020 Arthur Sonzogni. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by the MIT license that can be found in
 | 
			
		||||
// the LICENSE file.
 | 
			
		||||
		Reference in New Issue
	
	Block a user