#include "panel.hpp" #include "dbc.hpp" void Panel::resize(int w, int h) { $dirty = true; width = w; height = h; $screen = Screen(width, height); } void Panel::set_renderer(Component renderer) { $dirty = true; $component = renderer; } void Panel::add(Component child) { dbc::pre("must set_renderer first", $component != nullptr); $dirty = true; $component->Add(child); } void Panel::render() { $dirty = true; if(must_clear) $screen.Clear(); Render($screen, $component->Render()); } const std::wstring& Panel::to_string() { if($dirty) { std::string as_text = $screen.ToString(); $screenout = $converter.from_bytes(as_text); $dirty = false; } return $screenout; } void Panel::mouse_click(ftxui::Mouse::Button btn, Point pos) { ftxui::Mouse mev{ .button=btn, .motion=ftxui::Mouse::Motion::Pressed, .x=int(pos.x), .y=int(pos.y) }; $component->OnEvent(ftxui::Event::Mouse("", mev)); } void Panel::mouse_release(ftxui::Mouse::Button btn, Point pos) { ftxui::Mouse mev{ .button=btn, .motion=ftxui::Mouse::Motion::Released, .x=int(pos.x), .y=int(pos.y) }; $component->OnEvent(ftxui::Event::Mouse("", mev)); } const Screen& Panel::screen() { return $screen; } void Panel::key_press(ftxui::Event event) { $component->OnEvent(event); }