FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
ftxui / dom

title-img

Ce module définit un ensemble hiérarchique de ftxui::Element. Un élément gère la disposition et peut être réactif aux changements de dimensions du terminal. Considérez l'exemple suivant où ce module est utilisé pour créer une disposition simple avec un certain nombre d'opérateurs :

La section Example fournit une collection d'exemples.

Exemple :

namespace ftxui {
...
// Define the document
Element document = vbox({
text("The window") | bold | color(Color::Blue),
gauge(0.5)
text("The footer")
});
// Add a border, by calling the `ftxui::border` decorator function.
document = border(document);
// Add another border, using the pipe operator.
document = document | border.
// Add another border, using the |= operator.
document |= border
...
}
Element text(std::string_view text)
Affiche un morceau de texte unicode encodé en UTF8.
Element color(Color color, Element child)
Définit la couleur de premier plan d'un élément.
Definition dom/color.cpp:81
Element gauge(float progress)
Dessine une barre de progression haute définition.
Element vbox(Elements children)
Un conteneur affichant les éléments verticalement un par un.
Definition vbox.cpp:96
L'espace de noms FTXUI ftxui::
Definition animation.hpp:11

Liste des éléments

La liste de tous les éléments est incluse et peut être accédée en incluant le fichier d'en-tête correspondant :

// 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.
#ifndef FTXUI_DOM_ELEMENTS_HPP
#define FTXUI_DOM_ELEMENTS_HPP
#include <cstdint>
#include <functional>
#include <memory>
#include <string_view>
namespace ftxui {
class Node;
using Element = std::shared_ptr<Node>;
using Elements = std::vector<Element>;
using Decorator = std::function<Element(Element)>;
using GraphFunction = std::function<std::vector<int>(int, int)>;
/// @brief BorderStyle est une énumération qui représente les différents styles
/// de bordures pouvant être appliqués aux éléments de l'interface utilisateur du terminal.
///
/// BorderStyle est une énumération qui représente les différents styles de
/// bordures pouvant être appliqués aux éléments de l'interface utilisateur du terminal.
/// Il est utilisé pour définir l'apparence visuelle des bordures autour des éléments,
/// tels que les fenêtres, les cadres ou les séparateurs.
/// @ingroup dom
enum BorderStyle : uint8_t {
};
// Enchaîner les éléments dans des décorateurs.
// Par exemple les lignes suivantes sont équivalentes :
// -> text("ftxui") | bold | underlined
// -> underlined(bold(text("FTXUI")))
// --- Composant ---
FTXUI_EXPORT(DOM) Element text(std::string_view text);
FTXUI_EXPORT(DOM) Element vtext(std::string_view text);
FTXUI_EXPORT(DOM) Element separatorCharacter(std::string_view);
float right,
Color unselected_color,
Color selected_color);
float down,
Color unselected_color,
Color selected_color);
FTXUI_EXPORT(DOM) Element gauge(float progress);
FTXUI_EXPORT(DOM) Element gaugeLeft(float progress);
FTXUI_EXPORT(DOM) Element gaugeRight(float progress);
FTXUI_EXPORT(DOM) Element gaugeUp(float progress);
FTXUI_EXPORT(DOM) Element gaugeDown(float progress);
// charset[0] est le glyphe "vide", charset.back() est "plein" ; les entrées entre
// les deux ombrent la cellule limite.
Element gaugeCharset(float progress,
std::vector<std::string> charset,
FTXUI_EXPORT(DOM) Decorator borderWith(const Cell&);
Element window(Element title, Element content, BorderStyle border = ROUNDED);
FTXUI_EXPORT(DOM) Element spinner(int charset_index, size_t image_index);
FTXUI_EXPORT(DOM) Element paragraph(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignLeft(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignRight(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignCenter(std::string_view text);
FTXUI_EXPORT(DOM) Element paragraphAlignJustify(std::string_view text);
FTXUI_EXPORT(DOM) Element canvas(ConstRef<Canvas>);
Element canvas(int width, int height, std::function<void(Canvas&)>);
FTXUI_EXPORT(DOM) Element canvas(std::function<void(Canvas&)>);
// -- Décorateur ---
FTXUI_EXPORT(DOM) Decorator color(const LinearGradient&);
FTXUI_EXPORT(DOM) Decorator bgcolor(const LinearGradient&);
FTXUI_EXPORT(DOM) Element color(const LinearGradient&, Element);
FTXUI_EXPORT(DOM) Element bgcolor(const LinearGradient&, Element);
FTXUI_EXPORT(DOM) Decorator hyperlink(std::string_view link);
FTXUI_EXPORT(DOM) Element hyperlink(std::string_view link, Element child);
FTXUI_EXPORT(DOM) Decorator selectionColor(Color foreground);
FTXUI_EXPORT(DOM) Decorator selectionStyle(std::function<void(Cell&)> style);
// --- Disposition ---
// Horizontal, Vertical ou empilé d'éléments.
Element flexbox(Elements, FlexboxConfig config = FlexboxConfig());
FTXUI_EXPORT(DOM) Element gridbox(std::vector<Elements> lines);
Element hflow(Elements); // Aide : flexbox par défaut avec direction de ligne.
Element vflow(Elements); // Aide : flexbox par défaut avec direction de colonne.
// -- Flexibilité ---
// Définit comment partager l'espace restant lorsque tout n'est pas utilisé à l'intérieur d'un
// conteneur.
FTXUI_EXPORT(DOM) Element flex(Element); // Développer/Réduire si possible/nécessaire.
FTXUI_EXPORT(DOM) Element flex_grow(Element); // Développer l'élément si possible.
FTXUI_EXPORT(DOM) Element flex_shrink(Element); // Réduire l'élément si nécessaire.
Element xflex(Element); // Développer/Réduire si possible/nécessaire sur l'axe X.
Element xflex_grow(Element); // Développer l'élément si possible sur l'axe X.
Element xflex_shrink(Element); // Réduire l'élément si nécessaire sur l'axe X.
Element yflex(Element); // Développer/Réduire si possible/nécessaire sur l'axe Y.
Element yflex_grow(Element); // Développer l'élément si possible sur l'axe Y.
Element yflex_shrink(Element); // Réduire l'élément si nécessaire sur l'axe Y.
FTXUI_EXPORT(DOM) Element notflex(Element); // Réinitialiser l'attribut flex.
FTXUI_EXPORT(DOM) Element filler(); // Un élément vide extensible.
// -- Surcharger la taille ---
enum WidthOrHeight : uint8_t { WIDTH, HEIGHT };
enum Constraint : uint8_t { LESS_THAN, EQUAL, GREATER_THAN };
// --- Cadre ---
// Un cadre est une zone défilante. La zone interne est potentiellement plus grande que
// la zone externe. La zone interne est défilée afin de rendre visible l'élément focalisé.
FTXUI_EXPORT(DOM) Element select(Element e); // Obsolète - Alias pour focus.
// --- Curseur ---
// Ceux-ci sont similaires à `focus`, mais changent également la forme du curseur.
// --- Divers ---
// Avant de dessiner l'|element|, effacer le pixel en dessous. Ceci est utile en
// combinaison avec dbox.
// --- Utilitaire --------------------------------------------------------------------
namespace Dimension {
FTXUI_EXPORT(DOM) Dimensions Fit(Element&, bool extend_beyond_screen = false);
} // namespace Dimension
} // namespace ftxui
// Rendre le conteneur capable de prendre n'importe quel nombre d'enfants en entrée.
#include "ftxui/dom/take_any_args.hpp"
// Inclure les anciennes définitions utilisant wstring.
#endif // FTXUI_DOM_ELEMENTS_HPP
#define FTXUI_EXPORT(component)
Definition export.hpp:24
Element window(Element title, Element content, BorderStyle border=ROUNDED)
Dessine une fenêtre avec un titre et une bordure autour de l'élément.
Element borderDouble(Element child)
Dessine une double bordure autour de l'élément.
Element focusCursorBarBlinking(Element child)
Identique à focus, mais définit la forme du curseur comme une barre clignotante.
Definition frame.cpp:189
Element xflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe X.
Definition flex.cpp:101
Element gaugeDirection(float progress, Direction direction)
Dessine une barre de progression haute définition progressant dans la direction spécifiée.
Decorator focusPositionRelative(float x, float y)
Utilisé à l'intérieur d'un frame, cela force la vue à être défilée vers une position donnée....
Element separatorStyled(BorderStyle style)
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element xflex_grow(Element)
S'étend si possible sur l'axe X.
Definition flex.cpp:119
Element underlinedDouble(Element child)
Applique un double soulignement au texte.
Element clear_under(Element element)
Avant de dessiner |child|, efface les cellules en dessous. Ceci est utile en combinaison avec dbox.
Element borderDashed(Element child)
Dessine une bordure en pointillés autour de l'élément.
Element separatorEmpty()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style EMP...
Element vscroll_indicator(Element child)
Affiche une barre de défilement verticale à droite. Les couleurs suivent le contenu.
Element nothing(Element element)
Une décoration qui ne fait absolument rien.
Definition dom/util.cpp:28
Element paragraphAlignLeft(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné à gauche.
Decorator size(WidthOrHeight direction, Constraint constraint, int value)
Applique une contrainte sur la taille d'un élément.
Element flex(Element child)
Permet à un élément enfant de s'étendre proportionnellement à l'espace restant dans un conteneur.
Definition flex.cpp:95
Element hyperlink(std::string_view link, Element child)
Rend la zone affichée cliquable à l'aide d'un navigateur web. Le lien sera ouvert lorsque l'utilisate...
Definition hyperlink.cpp:52
Element gaugeRight(float progress)
Dessine une barre de progression en haute définition progressant de gauche à droite.
Element focusCursorUnderlineBlinking(Element child)
Identique à focus, mais définit la forme du curseur comme un soulignement clignotant.
Definition frame.cpp:217
Element bold(Element child)
Utilise une police en gras, pour les éléments avec plus d'emphase.
Definition bold.cpp:33
Element separatorLight()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style LIG...
Element spinner(int charset_index, size_t image_index)
Utile pour représenter l'effet du temps et/ou des événements. Cela affiche une "vidéo" en art ASCII.
Element borderRounded(Element child)
Dessine une bordure arrondie autour de l'élément.
Element emptyElement()
Definition dom/util.cpp:140
Element yflex(Element)
Développer/Réduire si possible/nécessaire sur l'axe Y.
Definition flex.cpp:107
Element flex_shrink(Element child)
Minimiser si nécessaire.
Definition flex.cpp:131
Element focusCursorBar(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
Definition frame.cpp:175
Element focusCursorBlock(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc fixe.
Definition frame.cpp:147
Element vtext(std::string_view text)
Affiche un morceau de texte unicode verticalement.
BorderStyle
BorderStyle est une énumération qui représente les différents styles de bordures pouvant être appliqu...
Definition elements.hpp:38
Element underlined(Element child)
Souligne l'élément donné.
Element center(Element child)
Centre un élément horizontalement et verticalement.
Element paragraphAlignJustify(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné en utilisant un alignement ju...
Direction
Direction est une énumération qui représente les quatre directions cardinales.
Definition direction.hpp:15
Element focusCursorUnderline(Element child)
Identique à focus, mais définit la forme du curseur comme un soulignement fixe.
Definition frame.cpp:203
Element borderHeavy(Element child)
Dessine une bordure épaisse autour de l'élément.
Element inverted(Element child)
Ajoute un filtre qui inversera les couleurs de premier plan et d'arrière-plan.
Definition inverted.cpp:33
Element gaugeUp(float progress)
Dessine une barre de progression en haute définition progressant de bas en haut.
Element gaugeCharset(float progress, std::vector< std::string > charset, Direction direction=Direction::Right)
Dessine une barre de progression haute définition en utilisant un jeu de caractères personnalisé.
Element align_right(Element child)
Aligne un élément sur le côté droit.
Decorator focusPosition(int x, int y)
Utilisé à l'intérieur d'un frame, cela force la vue à être défilée vers une position donnée....
Element yflex_grow(Element)
S'étend si possible sur l'axe Y.
Definition flex.cpp:125
Element hscroll_indicator(Element child)
Affiche une barre de défilement horizontale en bas. Les couleurs suivent le contenu.
Element flex_grow(Element child)
S'étend si possible.
Definition flex.cpp:113
Element separatorDashed()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style DAS...
Element notflex(Element child)
Rend l'élément non flexible.
Definition flex.cpp:149
Element strikethrough(Element child)
Applique un barré au texte.
Element italic(Element child)
Applique un double soulignement au texte.
Definition italic.cpp:17
Element dbox(Elements children_)
Empile plusieurs éléments les uns sur les autres.
Element xflex_shrink(Element)
Minimiser si nécessaire sur l'axe X.
Definition flex.cpp:137
Decorator borderWith(const Cell &pixel)
Identique à border mais avec une Cell constante autour de l'élément.
Element gaugeLeft(float progress)
Dessine une barre de progression en haute définition progressant de droite à gauche.
Element paragraphAlignCenter(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné au centre.
Element borderLight(Element child)
Dessine une bordure fine autour de l'élément.
Element focus(Element child)
Définit l'élément child comme étant celui qui est focalisé parmi ses frères.
Definition frame.cpp:101
Element paragraph(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes.
Element bgcolor(Color color, Element child)
Définit la couleur d'arrière-plan d'un élément.
Definition dom/color.cpp:96
Decorator borderStyled(BorderStyle style)
Identique à border mais avec différents styles.
Element paragraphAlignRight(std::string_view the_text)
Renvoie un élément affichant le paragraphe sur plusieurs lignes, aligné à droite.
Element separator()
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element filler()
Un élément qui s'étendra proportionnellement à l'espace restant dans un conteneur.
Definition flex.cpp:70
Element dim(Element child)
Utilise une police de caractères claire, pour les éléments moins mis en valeur.
Definition dim.cpp:33
Element automerge(Element child)
Permet aux caractères d'être fusionnés automatiquement avec d'autres à proximité.
Definition automerge.cpp:17
Element separatorCharacter(std::string_view value)
Dessine une séparation verticale ou horizontale entre deux autres éléments.
Element blink(Element child)
Le texte affiché alterne entre visible et masqué.
Definition blink.cpp:33
Element vcenter(Element child)
Centre un élément verticalement.
Element separatorDouble()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style DOU...
Element focusCursorBlockBlinking(Element child)
Identique à focus, mais définit la forme du curseur comme un bloc clignotant.
Definition frame.cpp:161
Element border(Element child)
Dessine une bordure autour de l'élément.
Element separatorHeavy()
Dessine une séparation verticale ou horizontale entre deux autres éléments, en utilisant le style HEA...
Element borderEmpty(Element child)
Dessine une bordure vide autour de l'élément.
Element yflex_shrink(Element)
Minimiser si nécessaire sur l'axe Y.
Definition flex.cpp:143
Element hcenter(Element child)
Centre un élément horizontalement.
Element gaugeDown(float progress)
Dessine une barre de progression haute définition progressant de haut en bas.
@ EMPTY
Definition elements.hpp:44
@ DOUBLE
Definition elements.hpp:42
@ HEAVY
Definition elements.hpp:41
@ ROUNDED
Definition elements.hpp:43
@ DASHED
Definition elements.hpp:40
@ LIGHT
Definition elements.hpp:39
L'espace de noms ftxui::Dimension:: de FTXUI.
bool extend_beyond_screen
Definition elements.hpp:231
@ LESS_THAN
Definition elements.hpp:194
@ GREATER_THAN
Definition elements.hpp:194
Element flexbox(Elements, FlexboxConfig config=FlexboxConfig())
Un conteneur affichant des éléments sur des lignes/colonnes et capable de passer à la colonne/ligne s...
Definition flexbox.cpp:252
Element separatorVSelector(float up, float down, Color unselected_color, Color selected_color)
Dessine une barre verticale, avec la zone entre le haut et le bas colorée différemment.
Decorator yflex_shrink_factor(int shrink)
Definition flex.cpp:201
size_t image_index
Definition elements.hpp:104
std::shared_ptr< Node > Element
Definition elements.hpp:25
Element xframe(Element child)
Identique à frame, mais seulement sur l'axe x.
Definition frame.cpp:126
Decorator xflex_grow_factor(int grow)
Definition flex.cpp:177
FTXUI_EXPORT(DOM) Element gridbox(std Element hflow(Elements)
Un conteneur affichant des éléments en lignes de gauche à droite. Quand il est rempli,...
Definition flexbox.cpp:270
Decorator yflex_grow_factor(int grow)
Definition flex.cpp:195
FTXUI_EXPORT(DOM) Element separatorCharacter(std Element separatorHSelector(float left, float right, Color unselected_color, Color selected_color)
Dessine une barre horizontale, avec la zone entre la gauche et la droite colorée différemment.
Direction direction
Definition elements.hpp:83
Element hbox(Elements children)
Un conteneur affichant les éléments horizontalement un par un.
Definition hbox.cpp:94
std::vector< Element > Elements
Definition elements.hpp:26
Decorator selectionForegroundColor(Color foreground)
Définit la couleur de premier plan d'un élément lorsqu'il est sélectionné. Notez que le style est app...
Decorator yflex_factor(int grow, int shrink)
Definition flex.cpp:189
WidthOrHeight
Definition elements.hpp:193
Component operator|(Component component, ComponentDecorator decorator)
Decorator selectionBackgroundColor(Color foreground)
Définit la couleur d'arrière-plan d'un élément lorsqu'il est sélectionné. Notez que le style est appl...
std::function< Element(Element)> Decorator
Definition elements.hpp:27
Decorator flex_shrink_factor(int shrink)
Definition flex.cpp:165
Element yframe(Element child)
Identique à frame, mais seulement sur l'axe y.
Definition frame.cpp:134
Decorator flex_grow_factor(int grow)
Definition flex.cpp:159
Decorator selectionColor(Color foreground)
Définit la couleur d'un élément lorsqu'il est sélectionné.
int shrink
Definition elements.hpp:165
int y
Definition elements.hpp:134
Element selectionStyleReset(Element child)
Réinitialise le style de sélection d'un élément.
const Element & element
Definition node.hpp:94
Decorator reflect(Box &box)
Definition reflect.cpp:43
std::function< std::vector< int >(int, int)> GraphFunction
Definition elements.hpp:28
Decorator xflex_shrink_factor(int shrink)
Definition flex.cpp:183
Decorator xflex_factor(int grow, int shrink)
Definition flex.cpp:171
Decorator flex_factor(int grow, int shrink)
Definition flex.cpp:153
Element gridbox(std::vector< Elements > lines)
A container displaying a grid of elements.
int value
Definition elements.hpp:195
Element canvas(int width, int height, std::function< void(Canvas &)>)
Produit un élément dessinant un canevas de la taille demandée.
Element frame(Element child)
Permet à un élément d'être affiché dans une zone 'virtuelle'. Sa taille peut être plus grande que son...
Definition frame.cpp:118
Component & operator|=(Component &component, ComponentDecorator decorator)
Element select(Element e)
Définit child comme étant l'élément focalisé parmi ses frères et sœurs.
Definition frame.cpp:108
Decorator selectionStyle(std::function< void(Cell &)> style)
Définit le style d'un élément lorsqu'il est sélectionné.
Element vflow(Elements)
Un conteneur affichant des éléments en colonnes de haut en bas. Quand il est rempli,...
Definition flexbox.cpp:288
Element graph(GraphFunction graph_function)
Dessine un graphique en utilisant une GraphFunction.
std::uint8_t left
Definition screen.cpp:147
std::uint8_t down
Definition screen.cpp:150
std::uint8_t right
Definition screen.cpp:149

text

Le widget le plus simple. Il affiche un texte.

text("I am a piece of text");
I am a piece of text.

vtext

Identique à ftxui::text, mais affiché verticalement.

Code :

vtext("HELLO");

Sortie terminale :

H
E
L
L
O

paragraph

Similaire à ftxui::text, mais les mots individuels sont enveloppés sur plusieurs lignes, en fonction de la largeur de son conteneur.

Exemple de code :

paragraph("A very long text")

ezgif com-gif-maker (4)

Pour un exemple plus détaillé, reportez-vous à exemple détaillé. Paragraph inclut également un certain nombre d'autres variantes comme indiqué ci-dessous :

namespace ftxui {
Element paragraph(std::string text);
Element paragraphAlignLeft(std::string text);
Element paragraphAlignRight(std::string text);
Element paragraphAlignCenter(std::string text);
Element paragraphAlignJustify(std::string text);
}

border

Ajoute une bordure autour d'un élément.

Code :

border(text("The element"))

Sortie terminale :

┌───────────┐
│The element│
└───────────┘
Note
Vous pouvez obtenir le même comportement en utilisant l'opérateur pipe.

Code :
text("L'élément") | border

Border est également disponible dans une variété de styles, comme indiqué ci-dessous :

window

Une ftxui::window est une ftxui::border, mais avec un en-tête supplémentaire. Pour ajouter une fenêtre autour d'un élément, enveloppez-le et spécifiez une chaîne de caractères comme en-tête. Code :

window("The window", text("The element"))

Sortie terminale :

┌The window─┐
│The element│
└───────────┘

separator

Affiche une ligne verticale/horizontale pour diviser visuellement le contenu d'un conteneur en deux.

Code :

border(
hbox({
text("Left"),
separator(),
text("Right")
})
)

Sortie terminale :

┌────┬─────┐
│left│right│
└────┴─────┘

Les séparateurs sont disponibles dans une variété de styles, comme indiqué ci-dessous :

namespace ftxui {
float right,
Color background,
Color foreground);
float down,
Color background,
Color foreground);
}

gauge

Ceci est un élément visuel qui représente un ratio de progression.

Code :

border(gauge(0.5))

Sortie terminale :

┌────────────────────────────────────────────────────────────────────────────┐
│██████████████████████████████████████ │
└────────────────────────────────────────────────────────────────────────────┘

Les jauges peuvent être affichées dans de nombreuses orientations, comme indiqué ci-dessous :

namespace {
Element gauge(float ratio);
Element gaugeLeft(float ratio);
Element gaugeRight(float ratio);
Element gaugeUp(float ratio);
Element gaugeDown(float ratio);
Element gaugeDirection(float ratio, GaugeDirection);
}

graph

Voir :

Element graph(GraphFunction);

Couleurs

La plupart des consoles de terminal peuvent afficher du texte coloré et des arrière-plans colorés. FTXUI prend en charge toutes les palettes de couleurs :

Decorator color(Color);
Decorator bgcolor(Color);

Galerie de couleurs : image

Palette16

Sur la plupart des terminaux, les couleurs suivantes sont prises en charge :

  • Par défaut
  • Noir
  • GrisFoncé
  • GrisClair
  • Blanc
  • Bleu
  • BleuClair
  • Cyan
  • CyanClair
  • Vert
  • VertClair
  • Magenta
  • MagentaClair
  • Rouge
  • RougeClair
  • Jaune
  • JauneClair

Exemple d'utilisation des couleurs ci-dessus avec l'opérateur pipe :

text("Blue foreground") | color(Color::Blue);
text("Blue background") | bgcolor(Color::Blue);
text("Black on white") | color(Color::Black) | bgcolor(Color::White);

Palette256

Sur les terminaux prenant en charge 256 couleurs.

text("HotPink") | color(Color::HotPink);

TrueColor

Sur les terminaux prenant en charge TrueColor, vous pouvez utiliser directement l'espace colorimétrique RVB 24 bits :

Utilisez les constructeurs ci-dessous pour spécifier les valeurs RVB ou TSV de votre couleur :

Il existe deux constructeurs :

ftxui::Color::RGB(uint8_t red, uint8_t green, uint8_t blue);
ftxui::Color::HSV(uint8_t hue, uint8_t saturation, uint8_t value);

LinearGradient

FTXUI prend en charge le dégradé linéaire. Soit au premier plan, soit à l'arrière-plan.

Decorator color(const LinearGradient&);
Decorator bgcolor(const LinearGradient&);

Un ftxui::LinearGradient est défini par un angle en degrés et une liste de points de couleur.

auto gradient = LinearGradient()
.Angle(45)
.AddStop(0.0, Color::Red)
.AddStop(0.5, Color::Green)
.AddStop(1.0, Color::Blue);

Vous pouvez également utiliser des constructeurs simplifiés :

LinearGradient(Color::Red, Color::Blue);
LinearGradient(45, Color::Red, Color::Blue);

Voir la démo.

Style

En plus du texte coloré et des arrière-plans colorés. De nombreux terminaux prennent en charge les effets de texte tels que : bold, italic, dim, underlined, inverted, blink.

Element bold(Element);
Element italic(Element);
Element dim(Element);
Element inverted(Element);
Element underlined(Element);
Element underlinedDouble(Element);
Element strikethrough(Element);
Element blink(Element);
Decorator color(Color);
Decorator bgcolor(Color);
Decorator colorgrad(LinearGradient);
Decorator bgcolorgrad(LinearGradient);

Exemple

image

Pour utiliser ces effets, enveloppez simplement vos éléments avec l'effet désiré :

underlined(bold(text("This text is bold and underlined")))

Alternativement, utilisez l'opérateur pipe pour le chaîner sur votre élément :

text("This text is bold") | bold | underlined

Layout

Permet d'organiser les éléments des manières suivantes :

  • Horizontalement avec ftxui::hbox
  • Verticalement avec ftxui::vbox
  • À l'intérieur d'une grille avec ftxui::gridbox
  • Enveloppé dans une direction en utilisant le ftxui::flexbox.

Exemple utilisant ftxui::hbox, ftxui::vbox et ftxui::filler.

image

Exemple utilisant ftxui::gridbox :

image

Exemple utilisant flexbox :

image

Consultez cet exemple et la démo associée.

L'élément peut également devenir flexible en utilisant le décorateur ftxui::flex.

Code :

hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border,
});

Sortie terminale :

┌────┐┌─────────────────────────────────────────────────────┐┌─────┐
│left││middle ││right│
└────┘└─────────────────────────────────────────────────────┘└─────┘

Code :

hbox({
text("left") | border ,
text("middle") | border | flex,
text("right") | border | flex,
});

Sortie terminale :

┌────┐┌───────────────────────────────┐┌───────────────────────────────┐
│left││middle ││right │
└────┘└───────────────────────────────┘└───────────────────────────────┘

Table

Permet un formatage facile des données sous une forme visuelle de tableau ordonné.

Exemple simple :

auto table = Table({
{"Planet", "Radius", "Mass"},
{"Mercury", "2440", "0.330"},
{"Venus", "6052", "4.87"},
{"Earth", "6371", "5.97"},
{"Mars", "3390", "0.642"},
});
table.SelectAll().Border(LIGHT);
table.SelectRow(0).Decorate(bold);
table.SelectRow(0).SeparatorVertical(LIGHT);
table.SelectRow(0).Border(DOUBLE);
auto document = table.Render();

Exemple de code:

image

Sélection et style

Vous pouvez sélectionner des parties du tableau et leur appliquer des décorateurs ou des bordures. Les méthodes de sélection incluent :

ftxui::TableSelection::SelectAll();
ftxui::TableSelection::SelectCell(column, row);
ftxui::TableSelection::SelectRow(row_index);
ftxui::TableSelection::SelectRows(row_min, row_max);
ftxui::TableSelection::SelectColumn(column_index);
ftxui::TableSelection::SelectColumns(column_min, column_max);
ftxui::TableSelection::SelectRectangle(column_min, column_max, row_min, row_max);

Une fois une sélection effectuée, vous pouvez appliquer :

ftxui::TableSelection::Decorate(Decorator); // Apply a decorator to the whole selection (cells and borders).
ftxui::TableSelection::DecorateCells(Decorator); // Apply a decorator only to the cells.
ftxui::TableSelection::Border(BorderStyle); // Add a border around the selection.
ftxui::TableSelection::Separator(BorderStyle); //

Bordures colorées

Vous pouvez également appliquer des décorateurs spécifiquement aux bordures et séparateurs :

// Apply a red border to the whole table.
table.SelectAll().Border(LIGHT, color(Color::Red));
// Apply a blue separator to the first row.
table.SelectRow(0).SeparatorVertical(LIGHT, color(Color::Blue));

Les méthodes suivantes sont disponibles pour un contrôle fin de la décoration des bordures :

ftxui::TableSelection::DecorateBorder(Decorator); // Apply a decorator to all borders of the selection.
ftxui::TableSelection::DecorateBorderLeft(Decorator); // Apply a decorator to the left border of the selection.
ftxui::TableSelection::DecorateBorderRight(Decorator); // Apply a decorator to the right border of the selection.
ftxui::TableSelection::DecorateBorderTop(Decorator); // Apply a decorator to the top border of the selection.
ftxui::TableSelection::DecorateBorderBottom(Decorator); // Apply a decorator to the bottom border of the selection.
ftxui::TableSelection::DecorateSeparator(Decorator); // Apply a decorator to all separators of the selection.
ftxui::TableSelection::DecorateSeparatorVertical(Decorator); // Apply a decorator to all vertical separators of the selection.
ftxui::TableSelection::DecorateSeparatorHorizontal(Decorator); // Apply a decorator to all horizontal separators of the selection.

Canvas

Voir l'API <ftxui/dom/canvas.hpp>

auto c = Canvas(100, 100);
c.DrawPointLine(10, 10, 80, 10, Color::Red);
auto element = canvas(c);

Le dessin peut être effectué sur un ftxui::Canvas, en utilisant des caractères braille, des blocs ou de simples caractères :

Exemple simple :

image

Exemple complexe :

ezgif com-gif-maker (3)