mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-09-28 16:29:34 +08:00
Apply Clang-tidy (#918)
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
@@ -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->()),
|
||||
}));
|
||||
}
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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 {
|
||||
|
@@ -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:
|
||||
|
@@ -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"
|
||||
|
@@ -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
|
||||
|
@@ -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());
|
||||
|
@@ -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();
|
||||
|
@@ -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
|
||||
|
@@ -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));
|
||||
}
|
||||
|
@@ -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";
|
||||
});
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user