FTXUI
6.1.9
C++ functional terminal UI.
Toggle main menu visibility
Loading...
Searching...
No Matches
color.cpp
Go to the documentation of this file.
1
// Copyright 2020 Arthur Sonzogni. All rights reserved.
2
// Use of this source code is governed by the MIT license that can be found in
3
// the LICENSE file.
4
#include <memory>
// for make_shared
5
#include <utility>
// for move
6
7
#include "
ftxui/dom/elements.hpp
"
// for Element, Decorator, bgcolor, color
8
#include "
ftxui/dom/node_decorator.hpp
"
// for NodeDecorator
9
#include "
ftxui/screen/box.hpp
"
// for Box
10
#include "
ftxui/screen/color.hpp
"
// for Color
11
#include "
ftxui/screen/screen.hpp
"
// for Pixel, Screen
12
13
namespace
ftxui
{
14
15
namespace
{
16
class
BgColor :
public
NodeDecorator
{
17
public
:
18
BgColor(
Element
child, Color
color
)
19
: NodeDecorator(std::move(child)), color_(
color
) {}
20
21
void
Render
(Screen& screen)
override
{
22
if
(color_.IsOpaque()) {
23
for
(
int
y = box_.y_min; y <= box_.y_max; ++y) {
24
for
(
int
x = box_.x_min; x <= box_.x_max; ++x) {
25
screen.PixelAt(x, y).background_color = color_;
26
}
27
}
28
}
else
{
29
for
(
int
y = box_.y_min; y <= box_.y_max; ++y) {
30
for
(
int
x = box_.x_min; x <= box_.x_max; ++x) {
31
Color
&
color
= screen.PixelAt(x, y).background_color;
32
color
=
Color::Blend
(
color
, color_);
33
}
34
}
35
}
36
NodeDecorator::Render
(screen);
37
}
38
39
Color
color_;
40
};
41
42
class
FgColor :
public
NodeDecorator
{
43
public
:
44
FgColor(
Element
child, Color
color
)
45
: NodeDecorator(std::move(child)), color_(
color
) {}
46
47
void
Render
(Screen& screen)
override
{
48
if
(color_.IsOpaque()) {
49
for
(
int
y = box_.y_min; y <= box_.y_max; ++y) {
50
for
(
int
x = box_.x_min; x <= box_.x_max; ++x) {
51
screen.PixelAt(x, y).foreground_color = color_;
52
}
53
}
54
}
else
{
55
for
(
int
y = box_.y_min; y <= box_.y_max; ++y) {
56
for
(
int
x = box_.x_min; x <= box_.x_max; ++x) {
57
Color
&
color
= screen.PixelAt(x, y).foreground_color;
58
color
=
Color::Blend
(
color
, color_);
59
}
60
}
61
}
62
NodeDecorator::Render
(screen);
63
}
64
65
Color
color_;
66
};
67
68
}
// namespace
69
70
/// @brief Set the foreground color of an element.
71
/// @param color The color of the output element.
72
/// @param child The input element.
73
/// @return The output element colored.
74
/// @ingroup dom
75
///
76
/// ### Example
77
///
78
/// ```cpp
79
/// Element document = color(Color::Green, text("Success")),
80
/// ```
81
Element
color
(
Color
color
,
Element
child) {
82
return
std::make_shared<FgColor>(std::move(child),
color
);
83
}
84
85
/// @brief Set the background color of an element.
86
/// @param color The color of the output element.
87
/// @param child The input element.
88
/// @return The output element colored.
89
/// @ingroup dom
90
///
91
/// ### Example
92
///
93
/// ```cpp
94
/// Element document = bgcolor(Color::Green, text("Success")),
95
/// ```
96
Element
bgcolor
(
Color
color
,
Element
child) {
97
return
std::make_shared<BgColor>(std::move(child),
color
);
98
}
99
100
/// @brief Decorate using a foreground color.
101
/// @param c The foreground color to be applied.
102
/// @return The Decorator applying the color.
103
/// @ingroup dom
104
///
105
/// ### Example
106
///
107
/// ```cpp
108
/// Element document = text("red") | color(Color::Red);
109
/// ```
110
Decorator
color
(
Color
c) {
111
return
[c](
Element
child) {
return
color
(c, std::move(child)); };
112
}
113
114
/// @brief Decorate using a background color.
115
/// @param color The background color to be applied.
116
/// @return The Decorator applying the color.
117
/// @ingroup dom
118
///
119
/// ### Example
120
///
121
/// ```cpp
122
/// Element document = text("red") | bgcolor(Color::Red);
123
/// ```
124
Decorator
bgcolor
(
Color
color
) {
125
return
[
color
](
Element
child) {
return
bgcolor
(
color
, std::move(child)); };
126
}
127
128
}
// namespace ftxui
box.hpp
ftxui::Color
A class representing terminal colors.
Definition
color.hpp:20
ftxui::Color::Blend
static Color Blend(const Color &lhs, const Color &rhs)
Blend two colors together using the alpha channel.
Definition
color.cpp:281
ftxui::NodeDecorator
Definition
node_decorator.hpp:16
ftxui::Node::Render
virtual void Render(Screen &screen)
Display an element on a ftxui::Screen.
Definition
node.cpp:63
color.hpp
elements.hpp
ftxui::Terminal::Color
Color
Definition
terminal.hpp:17
ftxui
Definition
animation.hpp:10
ftxui::bgcolor
Decorator bgcolor(Color)
Decorate using a background color.
Definition
color.cpp:124
ftxui::Decorator
std::function< Element(Element)> Decorator
Definition
elements.hpp:24
ftxui::Element
std::shared_ptr< Node > Element
Definition
elements.hpp:22
ftxui::Render
void Render(Screen &screen, const Element &element)
Display an element on a ftxui::Screen.
Definition
node.cpp:88
ftxui::color
Decorator color(Color)
Decorate using a foreground color.
Definition
color.cpp:110
node_decorator.hpp
screen.hpp