#include // for size_t #include // for shared_ptr, __shared_ptr_access, allocator #include // for string, basic_string, to_string, operator+, char_traits #include // for vector #include "ftxui/component/captured_mouse.hpp" // for ftxui #include "ftxui/component/component.hpp" // for Radiobox, Vertical, Checkbox, Horizontal, Renderer, ResizableSplitBottom, ResizableSplitRight #include "ftxui/component/component_base.hpp" // for ComponentBase #include "ftxui/component/screen_interactive.hpp" // for ScreenInteractive #include "ftxui/dom/elements.hpp" // for text, window, operator|, vbox, hbox, Element, flexbox, bgcolor, filler, flex, size, border, hcenter, color, EQUAL, bold, dim, notflex, xflex_grow, yflex_grow, HEIGHT, WIDTH #include "ftxui/dom/flexbox_config.hpp" // for FlexboxConfig, FlexboxConfig::AlignContent, FlexboxConfig::JustifyContent, FlexboxConfig::AlignContent::Center, FlexboxConfig::AlignItems, FlexboxConfig::Direction, FlexboxConfig::JustifyContent::Center, FlexboxConfig::Wrap #include "ftxui/screen/color.hpp" // for Color, Color::Black using namespace ftxui; Element make_box(int x, int y) { std::string title = "(" + std::to_string(x) + ", " + std::to_string(y) + ")"; return text(title) | center | size(WIDTH, EQUAL, 18) | size(HEIGHT, EQUAL, 9) | border | bgcolor(Color::HSV(x * 255 / 15, 255, y * 255 / 15)); }; Element make_grid() { std::vector rows; for (int i = 0; i < 15; i++) { std::vector cols; for (int j = 0; j < 15; j++) { cols.push_back(make_box(i, j)); } rows.push_back(cols); } return gridbox(rows); }; int main(int argc, const char* argv[]) { float focus_x = 0.0f; float focus_y = 0.0f; auto slider_x = Slider("x", &focus_x, 0.f, 1.f, 0.01f); auto slider_y = Slider("y", &focus_y, 0.f, 1.f, 0.01f); auto renderer = Renderer( Container::Vertical({ slider_x, slider_y, }), [&] { auto title = "focusPositionRelative(" + // std::to_string(focus_x) + ", " + // std::to_string(focus_y) + ")"; // return vbox({ text(title), separator(), slider_x->Render(), slider_y->Render(), separator(), make_grid() | focusPositionRelative(focus_x, focus_y) | frame | flex, }) | border; }); auto screen = ScreenInteractive::Fullscreen(); screen.Loop(renderer); return 0; } // 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.