FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
src/ftxui/dom/dbox.cpp
Go to the documentation of this file.
1// 版權所有 2020 Arthur Sonzogni。保留所有權利。
2// 本原始碼的使用受 MIT 授權條款的約束,該條款可在 LICENSE 檔案中找到。
3#include <algorithm> // for max
4#include <cstddef> // for size_t
5#include <memory> // for __shared_ptr_access, shared_ptr, make_shared
6#include <utility> // for move
7#include <vector>
8
9#include "ftxui/dom/elements.hpp" // for Element, Elements, dbox
10#include "ftxui/dom/node.hpp" // for Node, Elements
11#include "ftxui/dom/requirement.hpp" // for Requirement
12#include "ftxui/screen/box.hpp" // for Box
13#include "ftxui/screen/pixel.hpp" // for Pixel
14
15namespace ftxui {
16
17namespace {
18class DBox : public Node {
19 public:
20 explicit DBox(Elements children) : Node(std::move(children)) {}
21
22 void ComputeRequirement() override {
23 requirement_ = Requirement{};
24 for (auto& child : children_) {
25 child->ComputeRequirement();
26
27 // Propagate the focused requirement.
28 if (requirement_.focused.Prefer(child->requirement().focused)) {
29 requirement_.focused = child->requirement().focused;
30 }
31
32 // Extend the min_x and min_y to contain all the children
33 requirement_.min_x =
34 std::max(requirement_.min_x, child->requirement().min_x);
35 requirement_.min_y =
36 std::max(requirement_.min_y, child->requirement().min_y);
37 }
38 }
39
40 void SetBox(Box box) override {
41 Node::SetBox(box);
42
43 for (auto& child : children_) {
44 child->SetBox(box);
45 }
46 }
47};
48} // namespace
49
50/// @brief 將多個元素堆疊在一起。
51/// @param children_ 輸入元素。
52/// @return 向右對齊的元素。
53/// @ingroup dom
54Element dbox(Elements children_) {
55 return std::make_shared<DBox>(std::move(children_));
56}
57
58} // namespace ftxui
virtual void SetBox(Box box)
為元素分配繪圖位置和尺寸。
Definition node.cpp:40
Element dbox(Elements)
將多個元素堆疊在一起。
FTXUI 的 ftxui:: 命名空間
Definition animation.hpp:10
std::shared_ptr< Node > Element
Definition elements.hpp:22
std::vector< Element > Elements
Definition elements.hpp:23