FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
src/ftxui/dom/focus.cpp
Go to the documentation of this file.
1// Copyright 2020 Arthur Sonzogni. All rights reserved.
2// このソースコードの使用は、LICENSE ファイルにある MIT ライセンスに従って管理されます。
3#include <memory> // for make_shared
4#include <utility> // for move
5
6#include "ftxui/dom/elements.hpp" // for Decorator, Element, focusPosition, focusPositionRelative
7#include "ftxui/dom/node_decorator.hpp" // for NodeDecorator
8#include "ftxui/dom/requirement.hpp" // for Requirement, Requirement::NORMAL, Requirement::Selection
9#include "ftxui/screen/box.hpp" // for Box
10
11namespace ftxui {
12
13/// @brief `frame`内で使用され、ビューを特定の位置にスクロールさせます。位置は要求されたサイズの割合で表されます。
14///
15/// 例えば:
16/// - (0, 0) は、ビューが左上隅にスクロールされることを意味します。
17/// - (1, 0) は、ビューが右上隅にスクロールされることを意味します。
18/// - (0, 1) は、ビューが左下隅にスクロールされることを意味します。
19/// @ingroup dom
20///
21/// ### Example
22///
23/// ```cpp
24/// Element document = huge_document()
25/// | focusPositionRelative(0.f, 1.f)
26/// | frame;
27/// ```
29 class Impl : public NodeDecorator {
30 public:
31 Impl(Element child, float x, float y)
32 : NodeDecorator(std::move(child)), x_(x), y_(y) {}
33
34 void ComputeRequirement() override {
35 NodeDecorator::ComputeRequirement();
36 requirement_.focused.enabled = true;
37 requirement_.focused.node = this;
38 requirement_.focused.box.x_min = int(float(requirement_.min_x) * x_);
39 requirement_.focused.box.y_min = int(float(requirement_.min_y) * y_);
40 requirement_.focused.box.x_max = int(float(requirement_.min_x) * x_);
41 requirement_.focused.box.y_max = int(float(requirement_.min_y) * y_);
42 }
43
44 private:
45 const float x_;
46 const float y_;
47 };
48
49 return [x, y](Element child) {
50 return std::make_shared<Impl>(std::move(child), x, y);
51 };
52}
53
54/// @brief `frame`内で使用され、ビューを特定の位置にスクロールさせます。位置はセル数で表されます。
55///
56/// @ingroup dom
57///
58/// ### Example
59///
60/// ```cpp
61/// Element document = huge_document()
62/// | focusPosition(10, 10)
63/// | frame;
64/// ```
65Decorator focusPosition(int x, int y) {
66 class Impl : public NodeDecorator {
67 public:
68 Impl(Element child, int x, int y)
69 : NodeDecorator(std::move(child)), x_(x), y_(y) {}
70
71 void ComputeRequirement() override {
72 NodeDecorator::ComputeRequirement();
73 requirement_.focused.enabled = false;
74
75 Box& box = requirement_.focused.box;
76 box.x_min = x_;
77 box.y_min = y_;
78 box.x_max = x_;
79 box.y_max = y_;
80 }
81
82 private:
83 const int x_;
84 const int y_;
85 };
86
87 return [x, y](Element child) {
88 return std::make_shared<Impl>(std::move(child), x, y);
89 };
90}
91
92} // namespace ftxui
Decorator focusPositionRelative(float x, float y)
frame内で使用され、ビューを特定の位置にスクロールさせます。位置は要求されたサイズの割合で表されます。
Decorator focusPosition(int x, int y)
frame内で使用され、ビューを特定の位置にスクロールさせます。位置はセル数で表されます。
int x_max
Definition box.hpp:16
int y_min
Definition box.hpp:17
int y_max
Definition box.hpp:18
int x_min
Definition box.hpp:15
Boxは、2D空間における矩形領域を表す構造体です。
Definition box.hpp:14
FTXUI ftxui:: 名前空間
Definition animation.hpp:9
std::function< Element(Element)> Decorator
Definition elements.hpp:23
std::shared_ptr< Node > Element
Definition elements.hpp:21