94void Render(Screen& screen, Node* node, Selection& selection) {
98 box.x_max = screen.dimx() - 1;
99 box.y_max = screen.dimy() - 1;
102 node->Check(&status);
103 const int max_iterations = 20;
104 while (status.need_iteration && status.iteration < max_iterations) {
106 node->ComputeRequirement();
112 status.need_iteration =
false;
114 node->Check(&status);
118 if (!selection.IsEmpty()) {
119 node->Select(selection);
122 if (node->requirement().focused.enabled
123#
if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK)
140 node->requirement().focused.cursor_shape != Screen::Cursor::Shape::Hidden
143 screen.SetCursor(Screen::Cursor{
144 node->requirement().focused.node->box_.x_max,
145 node->requirement().focused.node->box_.y_max,
146 node->requirement().focused.cursor_shape,
149 screen.SetCursor(Screen::Cursor{
152 Screen::Cursor::Shape::Hidden,
157 screen.stencil = box;
158 node->Render(screen);
161 screen.ApplyShader();
166 Selection& selection) {
170 box.x_max = screen.dimx() - 1;
171 box.y_max = screen.dimy() - 1;
174 node->Check(&status);
175 const int max_iterations = 20;
176 while (status.need_iteration && status.iteration < max_iterations) {
178 node->ComputeRequirement();
184 status.need_iteration =
false;
186 node->Check(&status);
190 node->Select(selection);
193 return node->GetSelectedContent(selection);