#include "app.hpp" #include #include "parser.hpp" #include "dbc.hpp" void App::init() { presenter.setPosition({0,0}); presenter.setFramerateLimit(FRAME_LIMIT); presenter.setVerticalSyncEnabled(VSYNC); slides = load_slides(); dbc::check(slides != nullptr, "ERROR in your .md file"); control_ui = std::make_shared(presenter, controller, options.port); control_ui->init(); control_ui->full_screen(false); reloader.watch(options.deck_file); reloader.watch(slides->$deck->config["layouts"]); } void App::change_slides() { // save the current slide auto current_slide = slides->$deck->current; // load the new one auto new_slides = load_slides(); if(new_slides) { new_slides->set_slide(current_slide); slides = new_slides; } } void App::update() { if(reloader.changed()) { change_slides(); } slides->update(presenter); control_ui->update(slides); } void App::render() { slides->render(presenter); control_ui->render(controller, *slides->$deck); presenter.display(); controller.display(); } bool App::open() { return controller.isOpen(); } std::shared_ptr App::load_slides() { auto deck = parse_slides(options.deck_file, [&](nlohmann::json& config) { backend.set_font(config["font_file"]); guecs::init(&backend); }); fmt::println("FONT FILE: {}", backend.$font_file); auto slides = std::make_shared(deck, options.pres_size); slides->init(); return slides; }