Add an UDL for combined hex RGB colors (#203)

In order to allow using the literal on its own it has been put into the
inline namespace `literals`.
This commit is contained in:
Henrik Gaßmann 2021-09-14 14:22:30 +02:00 committed by GitHub
parent b5c3b17b3f
commit 7d4452f45c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 3 deletions

View File

@ -28,7 +28,8 @@ int main(int argc, const char* argv[]) {
color(Color::Red, text("Red")),
color(Color::RedLight, text("RedLight")),
color(Color::Yellow, text("Yellow")),
color(Color::YellowLight, text("YellowLight"))
color(Color::YellowLight, text("YellowLight")),
color(0x66ff66_rgb, text("Phosphor"))
),
vbox(
bgcolor(Color::Default, text("Default")),
@ -47,7 +48,8 @@ int main(int argc, const char* argv[]) {
bgcolor(Color::Red, text("Red")),
bgcolor(Color::RedLight, text("RedLight")),
bgcolor(Color::Yellow, text("Yellow")),
bgcolor(Color::YellowLight, text("YellowLight"))
bgcolor(Color::YellowLight, text("YellowLight")),
bgcolor(0x66ff66_rgb, text("Phosphor"))
),
filler()
);

View File

@ -2,7 +2,7 @@
#define FTXUI_SCREEN_COLOR
#include <stdint.h> // for uint8_t
#include <string> // for wstring
#include <string> // for wstring
#ifdef RGB
// Workaround for wingdi.h (via Windows.h) defining macros that break things.
@ -322,6 +322,14 @@ class Color {
uint8_t blue_ = 0;
};
inline namespace literals {
/// @brief Creates a color from a combined hex RGB representation,
/// e.g. 0x808000_rgb
Color operator""_rgb(unsigned long long int combined);
} // namespace literals
} // namespace ftxui
#endif /* end of include guard: FTXUI_COLOR_H_ */

View File

@ -1,5 +1,7 @@
#include "ftxui/screen/color.hpp"
#include <cassert>
#include "ftxui/screen/color_info.hpp" // for GetColorInfo, ColorInfo
#include "ftxui/screen/terminal.hpp" // for Terminal, Terminal::Color, Terminal::Palette256, Terminal::TrueColor
@ -143,6 +145,18 @@ Color Color::HSV(uint8_t h, uint8_t s, uint8_t v) {
return Color(0, 0, 0);
}
inline namespace literals {
Color operator""_rgb(unsigned long long int combined) {
assert(combined <= 0xffffffU);
auto const red = static_cast<uint8_t>(combined >> 16);
auto const green = static_cast<uint8_t>(combined >> 8);
auto const blue = static_cast<uint8_t>(combined);
return Color(red, green, blue);
}
} // namespace literals
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved.