FTXUI  6.0.2
C++ functional terminal UI.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
selection_style.cpp
Go to the documentation of this file.
1// Copyright 2024 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 <functional> // for function
5#include <memory> // for make_shared
6#include <utility> // for move
7
8#include "ftxui/dom/elements.hpp" // for Element, Decorator, bgcolor, color
9#include "ftxui/dom/node_decorator.hpp" // for NodeDecorator
10#include "ftxui/screen/color.hpp" // for Color
11#include "ftxui/screen/pixel.hpp" // for Pixel
12#include "ftxui/screen/screen.hpp" // for Screen
13
14namespace ftxui {
15
16namespace {
17
18class SelectionStyleReset : public NodeDecorator {
19 public:
20 explicit SelectionStyleReset(Element child)
21 : NodeDecorator(std::move(child)) {}
22
23 void Render(Screen& screen) final {
24 auto old_style = screen.GetSelectionStyle();
25 screen.SetSelectionStyle([](Pixel&) {});
27 screen.SetSelectionStyle(old_style);
28 }
29};
30
31class SelectionStyle : public NodeDecorator {
32 public:
33 SelectionStyle(Element child, const std::function<void(Pixel&)>& style)
34 : NodeDecorator(std::move(child)), style_(style) {}
35
36 void Render(Screen& screen) final {
37 auto old_style = screen.GetSelectionStyle();
38 auto new_style = [&, old_style](Pixel& pixel) {
40 style_(pixel);
41 };
42 screen.SetSelectionStyle(new_style);
44 screen.SetSelectionStyle(old_style);
45 }
46
47 std::function<void(Pixel&)> style_;
48};
49
50} // namespace
51
52/// @brief Reset the selection style of an element.
53/// @param child The input element.
54/// @return The output element with the selection style reset.
56 return std::make_shared<SelectionStyleReset>(std::move(child));
57}
58
59/// @brief Set the background color of an element when selected.
60/// Note that the style is applied on top of the existing style.
62 return selectionStyle([foreground](Pixel& pixel) { //
63 pixel.background_color = foreground;
64 });
65}
66
67/// @brief Set the foreground color of an element when selected.
68/// Note that the style is applied on top of the existing style.
70 return selectionStyle([foreground](Pixel& pixel) { //
71 pixel.foreground_color = foreground;
72 });
73}
74
75/// @brief Set the color of an element when selected.
76/// @param foreground The color to be applied.
77/// Note that the style is applied on top of the existing style.
79 return selectionForegroundColor(foreground);
80}
81
82/// @brief Set the style of an element when selected.
83/// @param style The style to be applied.
84/// Note that the style is applied on top of the existing style.
85// NOLINTNEXTLINE
86Decorator selectionStyle(std::function<void(Pixel&)> style) {
87 return [style](Element child) -> Element {
88 return std::make_shared<SelectionStyle>(std::move(child), style);
89 };
90}
91
92} // namespace ftxui
A class representing terminal colors.
Definition color.hpp:20
friend void Render(Screen &screen, Node *node, Selection &selection)
Definition node.cpp:100
std::function< Element(Element)> Decorator
Definition elements.hpp:24
std::shared_ptr< Node > Element
Definition elements.hpp:22
std::shared_ptr< T > Make(Args &&... args)
Definition component.hpp:26
Decorator selectionStyle(std::function< void(Pixel &)> style)
Set the style of an element when selected.
Decorator selectionForegroundColor(Color foreground)
Set the foreground color of an element when selected. Note that the style is applied on top of the ex...
Decorator selectionBackgroundColor(Color foreground)
Set the background color of an element when selected. Note that the style is applied on top of the ex...
Decorator selectionColor(Color foreground)
Set the color of an element when selected.
Element selectionStyleReset(Element)
Reset the selection style of an element.
void Render(Screen &screen, const Element &element)
Display an element on a ftxui::Screen.
Definition node.cpp:88
A Unicode character and its associated style.
Definition pixel.hpp:15