You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.5 KiB
67 lines
1.5 KiB
#include "app.hpp"
|
|
#include <fmt/xchar.h>
|
|
#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<ControlUI>(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<SlidesUI> 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<SlidesUI>(deck, options.pres_size);
|
|
slides->init();
|
|
|
|
return slides;
|
|
}
|
|
|