diff --git a/.clang-tidy b/.clang-tidy index 130bda7205a5f1a18b7eacfe1bd2ad59bc34a8af..f5335f0874836d3a0532f827da9fe7e54db6e573 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -27,6 +27,7 @@ Checks: "*, -readability-simplify-boolean-expr, -readability-static-accessed-through-instance, -readability-use-anyofallof, + -readability-avoid-nested-conditional-operator, -zircon-*, " WarningsAsErrors: '' diff --git a/examples/component/homescreen.cpp b/examples/component/homescreen.cpp index de0b8cd6a57180890336ace2e91c10e8656b2dd7..d650ba2e4fd2b5873f9785c99c64267602bbf21e 100644 --- a/examples/component/homescreen.cpp +++ b/examples/component/homescreen.cpp @@ -490,8 +490,8 @@ int main() { }, &tab_index); - auto exit_button = Button( - "Exit", [&] { screen.Exit(); }, ButtonOption::Animated()); + auto exit_button = + Button("Exit", [&] { screen.Exit(); }, ButtonOption::Animated()); auto main_container = Container::Vertical({ Container::Horizontal({ diff --git a/include/ftxui/screen/pixel.hpp b/include/ftxui/screen/pixel.hpp index 8ab686b027bdf8a72eba9f40cf6fe80f0a986940..cbc7cc23ad9a0acbcbf2b8419134d6c27ba39b52 100644 --- a/include/ftxui/screen/pixel.hpp +++ b/include/ftxui/screen/pixel.hpp @@ -49,4 +49,4 @@ struct Pixel { } // namespace ftxui -#endif // FTXUI_SCREEN_PIXEL_HPP +#endif // FTXUI_SCREEN_PIXEL_HPP diff --git a/src/ftxui/component/button.cpp b/src/ftxui/component/button.cpp index 03c7f4a03944b2046ad8c621bc71955987ab696a..e2be2afc151358ae2dc85cf1a3e01cb301014067 100644 --- a/src/ftxui/component/button.cpp +++ b/src/ftxui/component/button.cpp @@ -205,7 +205,7 @@ Component Button(ButtonOption option) { Component Button(ConstStringRef label, std::function<void()> on_click, ButtonOption option) { - option.label = label; + option.label = std::move(label); option.on_click = std::move(on_click); return Make<ButtonBase>(std::move(option)); } diff --git a/src/ftxui/component/collapsible.cpp b/src/ftxui/component/collapsible.cpp index 380ead2f333c60ae7f9d02e853e40da1760efe87..a79c855066de5a8eb5144a96b69319ae74b97c55 100644 --- a/src/ftxui/component/collapsible.cpp +++ b/src/ftxui/component/collapsible.cpp @@ -47,7 +47,7 @@ Component Collapsible(ConstStringRef label, Component child, Ref<bool> show) { return hbox({prefix, t}); }; Add(Container::Vertical({ - Checkbox(label, show_.operator->(), opt), + Checkbox(std::move(label), show_.operator->(), opt), Maybe(std::move(child), show_.operator->()), })); } diff --git a/src/ftxui/component/component.cpp b/src/ftxui/component/component.cpp index 47d882511dcf4a0c3803cb1a26b32a5ddb8c76b4..6ed4cb267970cbc49fc1029e057da5dbe74e2e95 100644 --- a/src/ftxui/component/component.cpp +++ b/src/ftxui/component/component.cpp @@ -5,6 +5,7 @@ #include <cassert> // for assert #include <cstddef> // for size_t #include <iterator> // for begin, end +#include <memory> // for unique_ptr, make_unique #include <utility> // for move #include <vector> // for vector, __alloc_traits<>::value_type diff --git a/src/ftxui/component/component_options.cpp b/src/ftxui/component/component_options.cpp index b89e65b4f06a3569d9ef08bbe8d9606e85f62c85..77b439f36c2efabd2be260a0882796a3f00dab28 100644 --- a/src/ftxui/component/component_options.cpp +++ b/src/ftxui/component/component_options.cpp @@ -3,12 +3,11 @@ // the LICENSE file. #include "ftxui/component/component_options.hpp" -#include <ftxui/dom/linear_gradient.hpp> // for LinearGradient #include <ftxui/screen/color.hpp> // for Color, Color::White, Color::Black, Color::GrayDark, Color::Blue, Color::GrayLight, Color::Red #include <memory> // for shared_ptr #include <utility> // for move - #include "ftxui/component/animation.hpp" // for Function, Duration +#include "ftxui/dom/direction.hpp" #include "ftxui/dom/elements.hpp" // for operator|=, Element, text, bgcolor, inverted, bold, dim, operator|, color, borderEmpty, hbox, automerge, border, borderLight namespace ftxui { diff --git a/src/ftxui/component/dropdown.cpp b/src/ftxui/component/dropdown.cpp index 28212829eca2b6d73ff4e039226d47fd2c4b6842..b268dd9f39270b805eea98cea2fcc71a0578ec12 100644 --- a/src/ftxui/component/dropdown.cpp +++ b/src/ftxui/component/dropdown.cpp @@ -1,11 +1,11 @@ // Copyright 2021 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. -#include <cstddef> // for size_t #include <ftxui/component/event.hpp> #include <functional> // for function #include <string> // for string +#include <utility> #include "ftxui/component/component.hpp" // for Maybe, Checkbox, Make, Radiobox, Vertical, Dropdown #include "ftxui/component/component_base.hpp" // for Component, ComponentBase #include "ftxui/component/component_options.hpp" // for CheckboxOption, EntryState @@ -21,7 +21,7 @@ namespace ftxui { /// @param selected The index of the selected entry. Component Dropdown(ConstStringListRef entries, int* selected) { DropdownOption option; - option.radiobox.entries = entries; + option.radiobox.entries = std::move(entries); option.radiobox.selected = selected; return Dropdown(option); } @@ -29,6 +29,7 @@ Component Dropdown(ConstStringListRef entries, int* selected) { /// @brief A dropdown menu. /// @ingroup component /// @param option The options for the dropdown. +// NOLINTNEXTLINE Component Dropdown(DropdownOption option) { class Impl : public ComponentBase, public DropdownOption { public: diff --git a/src/ftxui/component/event.cpp b/src/ftxui/component/event.cpp index 5e663c903da67e8d11d40e337efb32ba7af0c43c..25a5057545553fd2ba77331248aaac6b85941e5b 100644 --- a/src/ftxui/component/event.cpp +++ b/src/ftxui/component/event.cpp @@ -1,7 +1,8 @@ // 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. -#include <map> // for map +#include <map> // for map +#include <string> #include <utility> // for move #include "ftxui/component/event.hpp" diff --git a/src/ftxui/component/hoverable.cpp b/src/ftxui/component/hoverable.cpp index 304ebc1720bd48a17f4e234bd5959dcd64b4bab5..85c8e0f2c061f09ae796c434cdecc02ead2e5631 100644 --- a/src/ftxui/component/hoverable.cpp +++ b/src/ftxui/component/hoverable.cpp @@ -1,9 +1,8 @@ // Copyright 2022 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. -#include <ftxui/component/captured_mouse.hpp> // for CapturedMouse -#include <functional> // for function -#include <utility> // for move +#include <functional> // for function +#include <utility> // for move #include "ftxui/component/component.hpp" // for ComponentDecorator, Hoverable, Make #include "ftxui/component/component_base.hpp" // for ComponentBase diff --git a/src/ftxui/component/hoverable_test.cpp b/src/ftxui/component/hoverable_test.cpp index e7ac66c7be15079397330461b5f3bbf6f11e4c92..695b90a02b2db32fb291d97ea83af1a9d89aa47e 100644 --- a/src/ftxui/component/hoverable_test.cpp +++ b/src/ftxui/component/hoverable_test.cpp @@ -69,10 +69,10 @@ TEST(HoverableTest, BasicCallback) { int on_enter_2 = 0; int on_leave_1 = 0; int on_leave_2 = 0; - auto c1 = Hoverable( - BasicComponent(), [&] { on_enter_1++; }, [&] { on_leave_1++; }); - auto c2 = Hoverable( - BasicComponent(), [&] { on_enter_2++; }, [&] { on_leave_2++; }); + auto c1 = + Hoverable(BasicComponent(), [&] { on_enter_1++; }, [&] { on_leave_1++; }); + auto c2 = + Hoverable(BasicComponent(), [&] { on_enter_2++; }, [&] { on_leave_2++; }); auto layout = Container::Horizontal({c1, c2}); auto screen = Screen(8, 2); Render(screen, layout->Render()); diff --git a/src/ftxui/component/input.cpp b/src/ftxui/component/input.cpp index b0cf92d136b7f26cc722e854c68ebf61deb1270d..8f5d728c7c85c1e0fbd81d94f1624353d2de84ea 100644 --- a/src/ftxui/component/input.cpp +++ b/src/ftxui/component/input.cpp @@ -5,13 +5,11 @@ #include <cstddef> // for size_t #include <cstdint> // for uint32_t #include <functional> // for function -#include <memory> // for allocator, shared_ptr, allocator_traits<>::value_type -#include <sstream> // for basic_istream, stringstream -#include <string> // for string, basic_string, operator==, getline -#include <utility> // for move -#include <vector> // for vector +#include <sstream> // for basic_istream, stringstream +#include <string> // for string, basic_string, operator==, getline +#include <utility> // for move +#include <vector> // for vector -#include "ftxui/component/captured_mouse.hpp" // for CapturedMouse #include "ftxui/component/component.hpp" // for Make, Input #include "ftxui/component/component_base.hpp" // for ComponentBase #include "ftxui/component/component_options.hpp" // for InputOption @@ -134,7 +132,7 @@ class InputBase : public ComponentBase, public InputOption { break; } - cursor_char_index -= line.size() + 1; + cursor_char_index -= static_cast<int>(line.size() + 1); cursor_line++; } @@ -164,7 +162,7 @@ class InputBase : public ComponentBase, public InputOption { // The cursor is on this line. const int glyph_start = cursor_char_index; - const int glyph_end = GlyphNext(line, glyph_start); + const int glyph_end = static_cast<int>(GlyphNext(line, glyph_start)); const std::string part_before_cursor = line.substr(0, glyph_start); const std::string part_at_cursor = line.substr(glyph_start, glyph_end - glyph_start); @@ -206,7 +204,7 @@ class InputBase : public ComponentBase, public InputOption { const size_t start = GlyphPrevious(content(), cursor_position()); const size_t end = cursor_position(); content->erase(start, end - start); - cursor_position() = start; + cursor_position() = static_cast<int>(start); on_change(); return true; } @@ -234,7 +232,8 @@ class InputBase : public ComponentBase, public InputOption { return false; } - cursor_position() = GlyphPrevious(content(), cursor_position()); + cursor_position() = + static_cast<int>(GlyphPrevious(content(), cursor_position())); return true; } @@ -243,7 +242,8 @@ class InputBase : public ComponentBase, public InputOption { return false; } - cursor_position() = GlyphNext(content(), cursor_position()); + cursor_position() = + static_cast<int>(GlyphNext(content(), cursor_position())); return true; } @@ -258,7 +258,7 @@ class InputBase : public ComponentBase, public InputOption { if (content()[iter] == '\n') { break; } - width += GlyphWidth(content(), iter); + width += static_cast<int>(GlyphWidth(content(), iter)); } return width; } @@ -271,8 +271,9 @@ class InputBase : public ComponentBase, public InputOption { return; } - columns -= GlyphWidth(content(), cursor_position()); - cursor_position() = GlyphNext(content(), cursor_position()); + columns -= static_cast<int>(GlyphWidth(content(), cursor_position())); + cursor_position() = + static_cast<int>(GlyphNext(content(), cursor_position())); } } @@ -292,9 +293,10 @@ class InputBase : public ComponentBase, public InputOption { if (content()[previous] == '\n') { break; } - cursor_position() = previous; + cursor_position() = static_cast<int>(previous); } - cursor_position() = GlyphPrevious(content(), cursor_position()); + cursor_position() = + static_cast<int>(GlyphPrevious(content(), cursor_position())); while (true) { if (cursor_position() == 0) { break; @@ -303,10 +305,10 @@ class InputBase : public ComponentBase, public InputOption { if (content()[previous] == '\n') { break; } - cursor_position() = previous; + cursor_position() = static_cast<int>(previous); } - MoveCursorColumn(columns); + MoveCursorColumn(static_cast<int>(columns)); return true; } @@ -322,14 +324,16 @@ class InputBase : public ComponentBase, public InputOption { if (content()[cursor_position()] == '\n') { break; } - cursor_position() = GlyphNext(content(), cursor_position()); + cursor_position() = + static_cast<int>(GlyphNext(content(), cursor_position())); if (cursor_position() == (int)content().size()) { return true; } } - cursor_position() = GlyphNext(content(), cursor_position()); + cursor_position() = + static_cast<int>(GlyphNext(content(), cursor_position())); - MoveCursorColumn(columns); + MoveCursorColumn(static_cast<int>(columns)); return true; } @@ -339,7 +343,7 @@ class InputBase : public ComponentBase, public InputOption { } bool HandleEnd() { - cursor_position() = content->size(); + cursor_position() = static_cast<int>(content->size()); return true; } @@ -357,7 +361,7 @@ class InputBase : public ComponentBase, public InputOption { DeleteImpl(); } content->insert(cursor_position(), character); - cursor_position() += character.size(); + cursor_position() += static_cast<int>(character.size()); on_change(); return true; } @@ -421,7 +425,7 @@ class InputBase : public ComponentBase, public InputOption { if (IsWordCharacter(content(), previous)) { break; } - cursor_position() = previous; + cursor_position() = static_cast<int>(previous); } // Move left, as long as left is a word character: while (cursor_position()) { @@ -429,7 +433,7 @@ class InputBase : public ComponentBase, public InputOption { if (!IsWordCharacter(content(), previous)) { break; } - cursor_position() = previous; + cursor_position() = static_cast<int>(previous); } return true; } @@ -441,7 +445,8 @@ class InputBase : public ComponentBase, public InputOption { // Move right, until entering a word. while (cursor_position() < (int)content().size()) { - cursor_position() = GlyphNext(content(), cursor_position()); + cursor_position() = + static_cast<int>(GlyphNext(content(), cursor_position())); if (IsWordCharacter(content(), cursor_position())) { break; } @@ -452,7 +457,7 @@ class InputBase : public ComponentBase, public InputOption { if (!IsWordCharacter(content(), cursor_position())) { break; } - cursor_position() = next; + cursor_position() = static_cast<int>(next); } return true; @@ -489,7 +494,7 @@ class InputBase : public ComponentBase, public InputOption { break; } - cursor_char_index -= line.size() + 1; + cursor_char_index -= static_cast<int>(line.size() + 1); cursor_line++; } const int cursor_column = @@ -515,11 +520,13 @@ class InputBase : public ComponentBase, public InputOption { // Convert back the new_cursor_{line,column} toward cursor_position: cursor_position() = 0; for (int i = 0; i < new_cursor_line; ++i) { - cursor_position() += lines[i].size() + 1; + cursor_position() += static_cast<int>(lines[i].size() + 1); } while (new_cursor_column > 0) { - new_cursor_column -= GlyphWidth(content(), cursor_position()); - cursor_position() = GlyphNext(content(), cursor_position()); + new_cursor_column -= + static_cast<int>(GlyphWidth(content(), cursor_position())); + cursor_position() = + static_cast<int>(GlyphNext(content(), cursor_position())); } on_change(); diff --git a/src/ftxui/component/menu.cpp b/src/ftxui/component/menu.cpp index 4de8ec818027cb2f1cde62f51ea365222d3713fe..4fc4d0b9170567f98e5d66e58a2cb4e9c798c6b8 100644 --- a/src/ftxui/component/menu.cpp +++ b/src/ftxui/component/menu.cpp @@ -511,6 +511,7 @@ class MenuBase : public ComponentBase, public MenuOption { /// entry 2 /// entry 3 /// ``` +// NOLINTNEXTLINE Component Menu(MenuOption option) { return Make<MenuBase>(std::move(option)); } @@ -543,7 +544,7 @@ Component Menu(MenuOption option) { /// entry 3 /// ``` Component Menu(ConstStringListRef entries, int* selected, MenuOption option) { - option.entries = entries; + option.entries = std::move(entries); option.selected = selected; return Menu(option); } @@ -554,7 +555,7 @@ Component Menu(ConstStringListRef entries, int* selected, MenuOption option) { /// See also |Menu|. /// @ingroup component Component Toggle(ConstStringListRef entries, int* selected) { - return Menu(entries, selected, MenuOption::Toggle()); + return Menu(std::move(entries), selected, MenuOption::Toggle()); } /// @brief A specific menu entry. They can be put into a Container::Vertical to diff --git a/src/ftxui/component/radiobox.cpp b/src/ftxui/component/radiobox.cpp index 41f29b30d6f20a7d7c2c095ad5d88373a69b4534..bb775000fdcfae021591c1f1ba6ffb0e2d32a287 100644 --- a/src/ftxui/component/radiobox.cpp +++ b/src/ftxui/component/radiobox.cpp @@ -204,6 +204,7 @@ class RadioboxBase : public ComponentBase, public RadioboxOption { /// ○ entry 2 /// ○ entry 3 /// ``` +/// NOLINTNEXTLINE Component Radiobox(RadioboxOption option) { return Make<RadioboxBase>(std::move(option)); } @@ -239,7 +240,7 @@ Component Radiobox(RadioboxOption option) { Component Radiobox(ConstStringListRef entries, int* selected, RadioboxOption option) { - option.entries = entries; + option.entries = std::move(entries); option.selected = selected; return Make<RadioboxBase>(std::move(option)); } diff --git a/src/ftxui/component/screen_interactive.cpp b/src/ftxui/component/screen_interactive.cpp index 997f690ab1b79395be184e59d786e41c366bb166..ead776bd1bb95dee88256e62bb805b128cc43256 100644 --- a/src/ftxui/component/screen_interactive.cpp +++ b/src/ftxui/component/screen_interactive.cpp @@ -1,34 +1,38 @@ // 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. +#include "ftxui/component/screen_interactive.hpp" #include <algorithm> // for copy, max, min #include <array> // for array +#include <atomic> #include <chrono> // for operator-, milliseconds, operator>=, duration, common_type<>::type, time_point #include <csignal> // for signal, SIGTSTP, SIGABRT, SIGWINCH, raise, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM, __sighandler_t, size_t -#include <cstdio> // for fileno, stdin +#include <cstdint> +#include <cstdio> // for fileno, stdin #include <ftxui/component/task.hpp> // for Task, Closure, AnimationTask #include <ftxui/screen/screen.hpp> // for Pixel, Screen::Cursor, Screen, Screen::Cursor::Hidden #include <functional> // for function #include <initializer_list> // for initializer_list #include <iostream> // for cout, ostream, operator<<, basic_ostream, endl, flush -#include <stack> // for stack -#include <thread> // for thread, sleep_for -#include <tuple> // for _Swallow_assign, ignore +#include <memory> +#include <stack> // for stack +#include <string> +#include <thread> // for thread, sleep_for +#include <tuple> // for _Swallow_assign, ignore #include <type_traits> // for decay_t #include <utility> // for move, swap #include <variant> // for visit, variant #include <vector> // for vector - #include "ftxui/component/animation.hpp" // for TimePoint, Clock, Duration, Params, RequestAnimationFrame #include "ftxui/component/captured_mouse.hpp" // for CapturedMouse, CapturedMouseInterface #include "ftxui/component/component_base.hpp" // for ComponentBase #include "ftxui/component/event.hpp" // for Event #include "ftxui/component/loop.hpp" // for Loop #include "ftxui/component/receiver.hpp" // for ReceiverImpl, Sender, MakeReceiver, SenderImpl, Receiver -#include "ftxui/component/screen_interactive.hpp" #include "ftxui/component/terminal_input_parser.hpp" // for TerminalInputParser #include "ftxui/dom/node.hpp" // for Node, Render #include "ftxui/dom/requirement.hpp" // for Requirement +#include "ftxui/screen/pixel.hpp" // for Pixel #include "ftxui/screen/terminal.hpp" // for Dimensions, Size #if defined(_WIN32) @@ -42,6 +46,7 @@ #error Must be compiled in UNICODE mode #endif #else +#include <bits/types/struct_timeval.h> #include <sys/select.h> // for select, FD_ISSET, FD_SET, FD_ZERO, fd_set, timeval #include <termios.h> // for tcsetattr, termios, tcgetattr, TCSANOW, cc_t, ECHO, ICANON, VMIN, VTIME #include <unistd.h> // for STDIN_FILENO, read @@ -213,11 +218,11 @@ void RecordSignal(int signal) { break; #if !defined(_WIN32) - case SIGTSTP: + case SIGTSTP: // NOLINT g_signal_stop_count++; break; - case SIGWINCH: + case SIGWINCH: // NOLINT g_signal_resize_count++; break; #endif @@ -265,7 +270,7 @@ const std::string ST = "\x1b\\"; // NOLINT const std::string DECRQSS_DECSCUSR = DCS + "$q q" + ST; // NOLINT // DEC: Digital Equipment Corporation -enum class DECMode { +enum class DECMode : std::uint16_t { kLineWrap = 7, kCursor = 25, @@ -284,7 +289,7 @@ enum class DECMode { }; // Device Status Report (DSR) { -enum class DSRMode { +enum class DSRMode : std::uint8_t { kCursor = 6, }; @@ -543,7 +548,8 @@ void ScreenInteractive::PostMain() { // On final exit, keep the current drawing and reset cursor position one // line after it. if (!use_alternative_screen_) { - std::cout << std::endl; + std::cout << '\n'; + std::cout << std::flush; } } } @@ -597,7 +603,7 @@ void ScreenInteractive::Install() { // Request the terminal to report the current cursor shape. We will restore it // on exit. std::cout << DECRQSS_DECSCUSR; - on_exit_functions.emplace([=] { + on_exit_functions.emplace([cursor_reset_shape_ = cursor_reset_shape_] { std::cout << "\033[?25h"; // Enable cursor. std::cout << "\033[" + std::to_string(cursor_reset_shape_) + " q"; }); diff --git a/src/ftxui/component/terminal_input_parser.cpp b/src/ftxui/component/terminal_input_parser.cpp index f07afa9771e7be65ad3490520c67ea0f2fb7d3d2..2100d9edd3b9fc7b58bcd10215e54bad0a0043d8 100644 --- a/src/ftxui/component/terminal_input_parser.cpp +++ b/src/ftxui/component/terminal_input_parser.cpp @@ -9,7 +9,7 @@ #include <map> #include <memory> // for unique_ptr, allocator #include <utility> // for move - +#include <vector> #include "ftxui/component/event.hpp" // for Event #include "ftxui/component/task.hpp" // for Task diff --git a/src/ftxui/component/window.cpp b/src/ftxui/component/window.cpp index b2b96cebfb6e8d3f9cbebfe53e9199d1918208e6..4f8e44e5511ad3cbdabb880613e2e90482bed558 100644 --- a/src/ftxui/component/window.cpp +++ b/src/ftxui/component/window.cpp @@ -5,8 +5,14 @@ #include <algorithm> #include <ftxui/component/component.hpp> #include <ftxui/component/component_base.hpp> +#include <ftxui/component/component_options.hpp> #include <ftxui/component/screen_interactive.hpp> // for ScreenInteractive -#include "ftxui/dom/node_decorator.hpp" // for NodeDecorator +#include <memory> +#include <utility> +#include "ftxui/dom/elements.hpp" // for text, window, hbox, vbox, size, clear_under, reflect, emptyElement +#include "ftxui/dom/node_decorator.hpp" // for NodeDecorator +#include "ftxui/screen/color.hpp" // for Color +#include "ftxui/screen/screen.hpp" // for Screen namespace ftxui { @@ -206,7 +212,7 @@ class WindowImpl : public ComponentBase, public WindowOptions { } // Clamp the window size. - width() = std::max<int>(width(), title().size() + 2); + width() = std::max<int>(width(), static_cast<int>(title().size() + 2)); height() = std::max<int>(height(), 2); return true; diff --git a/src/ftxui/dom/benchmark_test.cpp b/src/ftxui/dom/benchmark_test.cpp index fa90b8cde241971b891dd146b9b4577f6f993e18..062cb234904e9bef7c7e68b60a37d61ea868b402 100644 --- a/src/ftxui/dom/benchmark_test.cpp +++ b/src/ftxui/dom/benchmark_test.cpp @@ -2,7 +2,6 @@ // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. #include <benchmark/benchmark.h> -#include <iostream> #include "ftxui/dom/elements.hpp" // for gauge, separator, operator|, text, Element, hbox, vbox, blink, border, inverted #include "ftxui/dom/node.hpp" // for Render diff --git a/src/ftxui/dom/border.cpp b/src/ftxui/dom/border.cpp index 5616a560368b0097e45d85df0d1179ecc0947088..b6756980335acf49e46e7c75b1d984c5ece58618 100644 --- a/src/ftxui/dom/border.cpp +++ b/src/ftxui/dom/border.cpp @@ -8,12 +8,12 @@ #include <optional> // for optional, nullopt #include <string> // for basic_string, string #include <utility> // for move -#include <vector> // for __alloc_traits<>::value_type #include "ftxui/dom/elements.hpp" // for unpack, Element, Decorator, BorderStyle, ROUNDED, borderStyled, Elements, DASHED, DOUBLE, EMPTY, HEAVY, LIGHT, border, borderDashed, borderDouble, borderEmpty, borderHeavy, borderLight, borderRounded, borderWith, window #include "ftxui/dom/node.hpp" // for Node, Elements #include "ftxui/dom/requirement.hpp" // for Requirement #include "ftxui/screen/box.hpp" // for Box +#include "ftxui/screen/pixel.hpp" // for Pixel #include "ftxui/screen/screen.hpp" // for Pixel, Screen namespace ftxui { @@ -38,7 +38,8 @@ class Border : public Node { BorderStyle style, std::optional<Color> foreground_color = std::nullopt) : Node(std::move(children)), - charset_(simple_border_charset[style]), + charset_(simple_border_charset[style]) // NOLINT + , foreground_color_(foreground_color) {} // NOLINT const Charset& charset_; // NOLINT diff --git a/src/ftxui/dom/box_helper.cpp b/src/ftxui/dom/box_helper.cpp index a09b8e279cedd7e055d8f5aa791599fd28f48704..8284cf309411b806adad0bf11e9891ea9d3387aa 100644 --- a/src/ftxui/dom/box_helper.cpp +++ b/src/ftxui/dom/box_helper.cpp @@ -4,6 +4,7 @@ #include "ftxui/dom/box_helper.hpp" #include <algorithm> // for max +#include <vector> // for vector namespace ftxui::box_helper { diff --git a/src/ftxui/dom/canvas.cpp b/src/ftxui/dom/canvas.cpp index a78b8948b09457ca4c402a51ccbab69714e4ed47..ef726721b61a8dfe0eb6f15868229cf201ff70de 100644 --- a/src/ftxui/dom/canvas.cpp +++ b/src/ftxui/dom/canvas.cpp @@ -8,6 +8,7 @@ #include <cstdint> // for uint8_t #include <cstdlib> // for abs #include <ftxui/screen/color.hpp> // for Color +#include <functional> // for function #include <map> // for map #include <memory> // for make_shared #include <utility> // for move, pair @@ -17,6 +18,8 @@ #include "ftxui/dom/node.hpp" // for Node #include "ftxui/dom/requirement.hpp" // for Requirement #include "ftxui/screen/box.hpp" // for Box +#include "ftxui/screen/image.hpp" // for Image +#include "ftxui/screen/pixel.hpp" // for Pixel #include "ftxui/screen/screen.hpp" // for Pixel, Screen #include "ftxui/screen/string.hpp" // for Utf8ToGlyphs #include "ftxui/util/ref.hpp" // for ConstRef @@ -28,7 +31,7 @@ namespace { // Base UTF8 pattern: // 11100010 10100000 10000000 // empty -// Pattern for the individuel dots: +// Pattern for the individual dots: // ┌──────┬───────┐ // │dot1 │ dot4 │ // ├──────┼───────┤ diff --git a/src/ftxui/dom/dbox.cpp b/src/ftxui/dom/dbox.cpp index a75321550437a85be6ff1b31302940a34550c495..c6e752e76da530a607f068145662d84c15f38139 100644 --- a/src/ftxui/dom/dbox.cpp +++ b/src/ftxui/dom/dbox.cpp @@ -2,13 +2,16 @@ // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. #include <algorithm> // for max +#include <cstddef> // for size_t #include <memory> // for __shared_ptr_access, shared_ptr, make_shared #include <utility> // for move +#include <vector> #include "ftxui/dom/elements.hpp" // for Element, Elements, dbox #include "ftxui/dom/node.hpp" // for Node, Elements #include "ftxui/dom/requirement.hpp" // for Requirement #include "ftxui/screen/box.hpp" // for Box +#include "ftxui/screen/pixel.hpp" // for Pixel namespace ftxui { @@ -49,12 +52,13 @@ class DBox : public Node { void Render(Screen& screen) override { if (children_.size() <= 1) { - return Node::Render(screen); + Node::Render(screen); + return; } const int width = box_.x_max - box_.x_min + 1; const int height = box_.y_max - box_.y_min + 1; - std::vector<Pixel> pixels(size_t(width * height)); + std::vector<Pixel> pixels(std::size_t(width * height)); for (auto& child : children_) { child->Render(screen); @@ -67,7 +71,7 @@ class DBox : public Node { acc->background_color = Color::Blend(acc->background_color, pixel.background_color); acc->automerge = pixel.automerge || acc->automerge; - if (pixel.character == "") { + if (pixel.character.empty()) { acc->foreground_color = Color::Blend(acc->foreground_color, pixel.background_color); } else { @@ -82,7 +86,7 @@ class DBox : public Node { acc->character = pixel.character; acc->foreground_color = pixel.foreground_color; } - ++acc; + ++acc; // NOLINT pixel = Pixel(); } @@ -93,7 +97,7 @@ class DBox : public Node { Pixel* acc = pixels.data(); for (int x = 0; x < width; ++x) { for (int y = 0; y < height; ++y) { - screen.PixelAt(x + box_.x_min, y + box_.y_min) = *acc++; + screen.PixelAt(x + box_.x_min, y + box_.y_min) = *acc++; // NOLINT } } } diff --git a/src/ftxui/dom/flex.cpp b/src/ftxui/dom/flex.cpp index 992bb2dd0eef2bdde00fb4e3fc5363698a98496f..2fd3adf67d1129e3e9a37ef3671837843f1b2338 100644 --- a/src/ftxui/dom/flex.cpp +++ b/src/ftxui/dom/flex.cpp @@ -3,7 +3,6 @@ // the LICENSE file. #include <memory> // for make_shared, __shared_ptr_access #include <utility> // for move -#include <vector> // for __alloc_traits<>::value_type #include "ftxui/dom/elements.hpp" // for Element, unpack, filler, flex, flex_grow, flex_shrink, notflex, xflex, xflex_grow, xflex_shrink, yflex, yflex_grow, yflex_shrink #include "ftxui/dom/node.hpp" // for Elements, Node diff --git a/src/ftxui/dom/flexbox_helper.cpp b/src/ftxui/dom/flexbox_helper.cpp index e1a0274e9016b837d6d31fb9247071cb2e561c85..eb3e8134e527d421f5f95ced16c611ce82bd4895 100644 --- a/src/ftxui/dom/flexbox_helper.cpp +++ b/src/ftxui/dom/flexbox_helper.cpp @@ -7,6 +7,7 @@ #include <cstddef> // for size_t #include <ftxui/dom/flexbox_config.hpp> // for FlexboxConfig, FlexboxConfig::Direction, FlexboxConfig::AlignContent, FlexboxConfig::JustifyContent, FlexboxConfig::Wrap, FlexboxConfig::Direction::RowInversed, FlexboxConfig::AlignItems, FlexboxConfig::Direction::Row, FlexboxConfig::Direction::Column, FlexboxConfig::Direction::ColumnInversed, FlexboxConfig::Wrap::WrapInversed, FlexboxConfig::AlignContent::Stretch, FlexboxConfig::JustifyContent::Stretch, FlexboxConfig::Wrap::Wrap, FlexboxConfig::AlignContent::Center, FlexboxConfig::AlignContent::FlexEnd, FlexboxConfig::AlignContent::FlexStart, FlexboxConfig::AlignContent::SpaceAround, FlexboxConfig::AlignContent::SpaceBetween, FlexboxConfig::AlignContent::SpaceEvenly, FlexboxConfig::AlignItems::Center, FlexboxConfig::AlignItems::FlexEnd, FlexboxConfig::AlignItems::FlexStart, FlexboxConfig::AlignItems::Stretch, FlexboxConfig::JustifyContent::Center, FlexboxConfig::JustifyContent::FlexEnd, FlexboxConfig::JustifyContent::FlexStart, FlexboxConfig::JustifyContent::SpaceAround, FlexboxConfig::JustifyContent::SpaceBetween, FlexboxConfig::JustifyContent::SpaceEvenly, FlexboxConfig::Wrap::NoWrap #include <utility> // for swap, move +#include <vector> #include "ftxui/dom/box_helper.hpp" // for Element, Compute @@ -330,8 +331,8 @@ void Compute3(Global& global) { line = Line(); } - block.line = lines.size(); - block.line_position = line.blocks.size(); + block.line = static_cast<int>(lines.size()); + block.line_position = static_cast<int>(line.blocks.size()); line.blocks.push_back(&block); x += block.min_size_x + global.config.gap_x; } diff --git a/src/ftxui/dom/reflect.cpp b/src/ftxui/dom/reflect.cpp index 3155ae8ee62298c430b4a6166bd9ec625814be17..5c5754fbbc2de35d447ad5a9dbb10c6e36703c5b 100644 --- a/src/ftxui/dom/reflect.cpp +++ b/src/ftxui/dom/reflect.cpp @@ -32,7 +32,7 @@ class Reflect : public Node { void Render(Screen& screen) final { reflected_box_ = Box::Intersection(screen.stencil, reflected_box_); - return Node::Render(screen); + Node::Render(screen); } private: diff --git a/src/ftxui/dom/separator.cpp b/src/ftxui/dom/separator.cpp index dc902af867cd98dac5989d429eff4d892f9143b2..4f68dbaead3695d0a693307a6234d2af4a391a7b 100644 --- a/src/ftxui/dom/separator.cpp +++ b/src/ftxui/dom/separator.cpp @@ -11,6 +11,7 @@ #include "ftxui/dom/requirement.hpp" // for Requirement #include "ftxui/screen/box.hpp" // for Box #include "ftxui/screen/color.hpp" // for Color +#include "ftxui/screen/pixel.hpp" // for Pixel #include "ftxui/screen/screen.hpp" // for Pixel, Screen namespace ftxui { @@ -63,7 +64,8 @@ class SeparatorAuto : public Node { const bool is_column = (box_.x_max == box_.x_min); const bool is_line = (box_.y_min == box_.y_max); - const std::string c = charsets[style_][int(is_line && !is_column)]; + const std::string c = + charsets[style_][int(is_line && !is_column)]; // NOLINT for (int y = box_.y_min; y <= box_.y_max; ++y) { for (int x = box_.x_min; x <= box_.x_max; ++x) { diff --git a/src/ftxui/dom/table.cpp b/src/ftxui/dom/table.cpp index e65b2dda5f3ab580e1167d0d853b9355030cef37..18583aa787c6d166282c645644dd5480136ed98c 100644 --- a/src/ftxui/dom/table.cpp +++ b/src/ftxui/dom/table.cpp @@ -6,6 +6,7 @@ #include <algorithm> // for max #include <memory> // for allocator, shared_ptr, allocator_traits<>::value_type #include <utility> // for move, swap +#include <vector> // for vector #include "ftxui/dom/elements.hpp" // for Element, operator|, text, separatorCharacter, Elements, BorderStyle, Decorator, emptyElement, size, gridbox, EQUAL, flex, flex_shrink, HEIGHT, WIDTH diff --git a/src/ftxui/screen/color.cpp b/src/ftxui/screen/color.cpp index 546241f7319f05f0e6d4e92107108536cfc72403..14e2863c00974b13c292871e23a552e322bb1f42 100644 --- a/src/ftxui/screen/color.cpp +++ b/src/ftxui/screen/color.cpp @@ -6,14 +6,12 @@ #include <array> // for array #include <cmath> #include <cstdint> +#include <string> #include "ftxui/screen/color_info.hpp" // for GetColorInfo, ColorInfo #include "ftxui/screen/terminal.hpp" // for ColorSupport, Color, Palette256, TrueColor namespace ftxui { - -using namespace std::literals; - namespace { const std::array<const char*, 33> palette16code = { "30", "40", // @@ -46,22 +44,30 @@ bool Color::operator!=(const Color& rhs) const { } std::string Color::Print(bool is_background_color) const { - switch (type_) { - case ColorType::Palette1: - return is_background_color ? "49"s : "39"s; - - case ColorType::Palette16: - return palette16code[2 * red_ + is_background_color]; // NOLINT; - - case ColorType::Palette256: - return (is_background_color ? "48;5;"s : "38;5;"s) + std::to_string(red_); - - case ColorType::TrueColor: - default: - return (is_background_color ? "48;2;"s : "38;2;"s) // - + std::to_string(red_) + ";" // - + std::to_string(green_) + ";" // - + std::to_string(blue_); // + if (is_background_color) { + switch (type_) { + case ColorType::Palette1: + return "49"; + case ColorType::Palette16: + return palette16code[2 * red_ + 1]; // NOLINT + case ColorType::Palette256: + return "48;5;" + std::to_string(red_); + case ColorType::TrueColor: + return "48;2;" + std::to_string(red_) + ";" + std::to_string(green_) + + ";" + std::to_string(blue_); + } + } else { + switch (type_) { + case ColorType::Palette1: + return "39"; + case ColorType::Palette16: + return palette16code[2 * red_]; // NOLINT + case ColorType::Palette256: + return "38;5;" + std::to_string(red_); + case ColorType::TrueColor: + return "38;2;" + std::to_string(red_) + ";" + std::to_string(green_) + + ";" + std::to_string(blue_); + } } } diff --git a/src/ftxui/screen/image.cpp b/src/ftxui/screen/image.cpp index 3fa3fbefd1af4c019970c808abc53745935c7f48..55e4b135ff5481c30764740e762422c92468394a 100644 --- a/src/ftxui/screen/image.cpp +++ b/src/ftxui/screen/image.cpp @@ -2,8 +2,11 @@ // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. #include <sstream> // IWYU pragma: keep +#include <string> +#include <vector> #include "ftxui/screen/image.hpp" +#include "ftxui/screen/pixel.hpp" namespace ftxui { diff --git a/src/ftxui/screen/screen.cpp b/src/ftxui/screen/screen.cpp index a04914a0a48725032f0aee61df7f5caa4691c7b0..7bd64e296080290b8f07374a987d7eb46543bee9 100644 --- a/src/ftxui/screen/screen.cpp +++ b/src/ftxui/screen/screen.cpp @@ -1,13 +1,16 @@ // 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. -#include <cstdint> // for size_t +#include <cstddef> // for size_t +#include <cstdint> #include <iostream> // for operator<<, stringstream, basic_ostream, flush, cout, ostream #include <limits> #include <map> // for _Rb_tree_const_iterator, map, operator!=, operator== #include <sstream> // IWYU pragma: keep #include <utility> // for pair +#include "ftxui/screen/image.hpp" // for Image +#include "ftxui/screen/pixel.hpp" // for Pixel #include "ftxui/screen/screen.hpp" #include "ftxui/screen/string.hpp" // for string_width #include "ftxui/screen/terminal.hpp" // for Dimensions, Size @@ -117,11 +120,11 @@ void UpdatePixelStyle(const Screen* screen, } struct TileEncoding { - uint8_t left : 2; - uint8_t top : 2; - uint8_t right : 2; - uint8_t down : 2; - uint8_t round : 1; + std::uint8_t left : 2; + std::uint8_t top : 2; + std::uint8_t right : 2; + std::uint8_t down : 2; + std::uint8_t round : 1; // clang-format off bool operator<(const TileEncoding& other) const { @@ -521,20 +524,20 @@ void Screen::ApplyShader() { } // clang-format on -uint8_t Screen::RegisterHyperlink(const std::string& link) { - for (size_t i = 0; i < hyperlinks_.size(); ++i) { +std::uint8_t Screen::RegisterHyperlink(const std::string& link) { + for (std::size_t i = 0; i < hyperlinks_.size(); ++i) { if (hyperlinks_[i] == link) { return i; } } - if (hyperlinks_.size() == std::numeric_limits<uint8_t>::max()) { + if (hyperlinks_.size() == std::numeric_limits<std::uint8_t>::max()) { return 0; } hyperlinks_.push_back(link); return hyperlinks_.size() - 1; } -const std::string& Screen::Hyperlink(uint8_t id) const { +const std::string& Screen::Hyperlink(std::uint8_t id) const { if (id >= hyperlinks_.size()) { return hyperlinks_[0]; } diff --git a/src/ftxui/screen/string.cpp b/src/ftxui/screen/string.cpp index 48012f0fc09407754185702373e37a897abbbced..f07b47a5da0bd8fec5825d303224b9e9862c3d41 100644 --- a/src/ftxui/screen/string.cpp +++ b/src/ftxui/screen/string.cpp @@ -16,6 +16,7 @@ #include <cstdint> // for uint32_t, uint8_t, uint16_t, int32_t #include <string> // for string, basic_string, wstring #include <tuple> // for _Swallow_assign, ignore +#include <vector> #include "ftxui/screen/deprecated.hpp" // for wchar_width, wstring_width #include "ftxui/screen/string_internal.hpp" // for WordBreakProperty, EatCodePoint, CodepointToWordBreakProperty, GlyphCount, GlyphIterate, GlyphNext, GlyphPrevious, IsCombining, IsControl, IsFullWidth, Utf8ToWordBreakProperty @@ -1355,7 +1356,6 @@ int string_width(const std::string& input) { std::vector<std::string> Utf8ToGlyphs(const std::string& input) { std::vector<std::string> out; - const std::string current; out.reserve(input.size()); size_t start = 0; size_t end = 0; diff --git a/src/ftxui/util/ref_test.cpp b/src/ftxui/util/ref_test.cpp index e21dc56e8113aa9e4ebc29d5eefd5df36744a14c..de9e1015a9fb3848984812bd5425b8377df4829a 100644 --- a/src/ftxui/util/ref_test.cpp +++ b/src/ftxui/util/ref_test.cpp @@ -1,3 +1,7 @@ +// Copyright 2023 Arthur Sonzogni. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + #include "ftxui/util/ref.hpp" #include <gtest/gtest.h>