#include "guecs/sfml/components.hpp" #include "guecs/ui.hpp" #include #include #include #include #include "dbc.hpp" #include #include #include #include #include "constants.hpp" #include "control.hpp" ControlUI::ControlUI(sf::RenderWindow& presenter) : $presenter(presenter) { $gui.position(0, 0, CONTROL_WIDTH, CONTROL_HEIGHT); $gui.layout( "[status|=%(100,100)current]" "[docs|=%(100,100)next]" ); } void ControlUI::init() { auto status_id = $gui.entity("status"); $gui.set(status_id, {L""}); auto docs_id = $gui.entity("docs"); $gui.set(docs_id, {L"A: win left\nD: win right\nQ: quit"}); auto current = $gui.entity("current"); $gui.set(current, {L"Current Slide"}); auto next = $gui.entity("next"); $gui.set(next, {L"Next Slide"}); $gui.init(); // warning! must come after init so the thing is there $status = $gui.get_if(status_id); dbc::check($status != nullptr, "failed to setup the status text"); } void ControlUI::render(sf::RenderWindow& window) { dbc::check($status != nullptr, "called render before init?"); auto pos = $presenter.getPosition(); auto size = $presenter.getSize(); $status->update(fmt::format(L"pos={},{}\nsize={},{}", pos.x, pos.y, size.x, size.y)); window.clear(); $gui.render(window); } void ControlUI::handle_events(sf::RenderWindow& controller, const sf::Event& event) { dbc::check($status != nullptr, "handle_events called before init?!"); if(event.is()) { controller.close(); return; } if(const auto* key = event.getIf()) { auto pos = $presenter.getPosition(); auto size = $presenter.getSize(); using KEY = sf::Keyboard::Scan; switch(key->scancode) { case KEY::A: { pos.x -= size.x; $presenter.setPosition(pos); } break; case KEY::D: { pos.x += int(size.x); $presenter.setPosition(pos); } break; case KEY::Q: controller.close(); break; default: break; } fmt::println("window pos: {},{}", pos.x, pos.y); } }