FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
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) {
39 old_style(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
friend void Render(Screen &screen, Node *node, Selection &selection)
Definition node.cpp:96
void Render(Screen &screen, const Element &element)
Display an element on a ftxui::Screen.
Definition node.cpp:84
Color foreground_color
Definition pixel.hpp:49
Color background_color
Definition pixel.hpp:48
Color is a class that represents a color in the terminal user interface.
Definition color.hpp:22
A Unicode character and its associated style.
Definition pixel.hpp:15
The FTXUI ftxui:: namespace.
Definition animation.hpp:10
std::function< Element(Element)> Decorator
Definition elements.hpp:24
std::shared_ptr< Node > Element
Definition elements.hpp:22
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.
std::function< void(Pixel &)> style_