18static const std::string charset_horizontal[11] = {
19#if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK)
22 " ",
" ",
" ",
" ",
"▌",
"▌",
"▌",
"█",
"█",
"█",
24 " ",
" ",
"▏",
"▎",
"▍",
"▌",
"▋",
"▊",
"▉",
"█",
31static const std::string charset_vertical[10] = {
46class Gauge :
public Node {
49 : progress_(
progress), direction_(direction) {
51 if (!(progress_ > 0.F)) {
54 if (!(progress_ < 1.F)) {
59 void ComputeRequirement()
override {
63 requirement_.flex_grow_x = 1;
64 requirement_.flex_grow_y = 0;
65 requirement_.flex_shrink_x = 1;
66 requirement_.flex_shrink_y = 0;
70 requirement_.flex_grow_x = 0;
71 requirement_.flex_grow_y = 1;
72 requirement_.flex_shrink_x = 0;
73 requirement_.flex_shrink_y = 1;
76 requirement_.min_x = 1;
77 requirement_.min_y = 1;
83 RenderHorizontal(
screen,
false);
86 RenderVertical(
screen,
false);
89 RenderHorizontal(
screen,
true);
92 RenderVertical(
screen,
true);
97 void RenderHorizontal(Screen&
screen,
bool invert) {
98 const int y = box_.y_min;
105 const float progress = invert ? 1.F - progress_ : progress_;
107 float(box_.x_min) +
progress * float(box_.x_max - box_.x_min + 1);
108 const int limit_int =
static_cast<int>(limit);
110 while (x < limit_int) {
111 screen.at(x++, y) = charset_horizontal[9];
114 screen.at(x++, y) = charset_horizontal[int(9 * (limit - limit_int))];
115 while (x <= box_.x_max) {
116 screen.at(x++, y) = charset_horizontal[0];
121 for (
int x = box_.x_min; x <= box_.x_max; x++) {
122 screen.PixelAt(x, y).inverted ^=
true;
127 void RenderVertical(Screen&
screen,
bool invert) {
128 const int x = box_.x_min;
129 if (x > box_.x_max) {
135 const float progress = invert ? progress_ : 1.F - progress_;
137 float(box_.y_min) +
progress * float(box_.y_max - box_.y_min + 1);
138 const int limit_int =
static_cast<int>(limit);
140 while (y < limit_int) {
141 screen.at(x, y++) = charset_vertical[8];
144 screen.at(x, y++) = charset_vertical[int(8 * (limit - limit_int))];
145 while (y <= box_.y_max) {
146 screen.at(x, y++) = charset_vertical[0];
151 for (
int y = box_.y_min; y <= box_.y_max; y++) {
152 screen.PixelAt(x, y).inverted ^=
true;
169 return std::make_shared<Gauge>(
progress, direction);
Element gaugeDirection(float progress, Direction direction)
Dibuja una barra de progreso de alta definición que avanza en la dirección especificada.
Direction
Direction es una enumeración que representa las cuatro cardinales direcciones.
Element gaugeRight(float progress)
Dibuja una barra de progreso de alta definición que avanza de izquierda a derecha.
Element gaugeUp(float progress)
Dibuja una barra de progreso de alta definición que avanza de abajo hacia arriba.
Element gaugeLeft(float progress)
Dibuja una barra de progreso de alta definición que avanza de derecha a izquierda.
void Render(Screen &screen, const Element &element)
Muestra un elemento en un ftxui::Screen.
Element gauge(float progress)
Dibuja una barra de progreso de alta definición.
Element gaugeDown(float progress)
Dibuja una barra de progreso de alta definición que avanza de arriba hacia abajo.
El espacio de nombres ftxui:: de FTXUI.
std::shared_ptr< Node > Element