// 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_REQUIREMENT_HPP #define FTXUI_DOM_REQUIREMENT_HPP #include "ftxui/screen/box.hpp" #include "ftxui/screen/screen.hpp" namespace ftxui { class Node; struct Requirement { // The required size to fully draw the element. int min_x = 0; int min_y = 0; // How much flexibility is given to the component. int flex_grow_x = 0; int flex_grow_y = 0; int flex_shrink_x = 0; int flex_shrink_y = 0; // Focus management to support the frame/focus/select element. struct Focused { bool enabled = false; Box box; Node* node = nullptr; Screen::Cursor::Shape cursor_shape = Screen::Cursor::Shape::Hidden; // Internal for interactions with components. bool component_active = false; // Return whether this requirement should be preferred over the other. bool Prefer(const Focused& other) const { if (!other.enabled) { return false; } if (!enabled) { return true; } return other.component_active && !component_active; } }; Focused focused; }; } // namespace ftxui #endif // FTXUI_DOM_REQUIREMENT_HPP