mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-10-31 18:48:11 +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:
		 Damien D
					Damien D
				
			
				
					committed by
					
						 Arthur Sonzogni
						Arthur Sonzogni
					
				
			
			
				
	
			
			
			 Arthur Sonzogni
						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