blob: aec41330a57cfefe846403d93e62088810ff3193 [file] [log] [blame]
#include "display.hpp"
#include "engine/engine.hpp"
using namespace blit;
static void(*orig_render)(uint32_t) = nullptr;
static std::string message;
static uint32_t progress_value = 0, progress_total = 0;
static bool render_flag = false;
static void overlay_render(uint32_t time) {
// TODO: don't want to do this if we add a menu to avoid the problems the stm32 firmware has...
if(orig_render)
orig_render(time);
if(!message.empty() || progress_total) {
screen.pen = Pen(0, 0, 0, 150);
screen.rectangle(Rect(0, screen.bounds.h - 25, screen.bounds.w, 25));
screen.pen = Pen(255, 255, 255);
screen.text(message, minimal_font, Point(5, screen.bounds.h - 20));
uint32_t progress_width = float(progress_value) / progress_total * (screen.bounds.w - 10);
screen.rectangle(Rect(5, screen.bounds.h - 10, progress_width, 5));
}
render_flag = false;
}
void set_render_overlay_enabled(bool enabled) {
if(enabled && blit::render != overlay_render) {
orig_render = blit::render;
blit::render = overlay_render;
} else if(!enabled && orig_render) {
blit::render = orig_render;
orig_render = nullptr;
}
}
void set_overlay_message(std::string_view text) {
message = text;
}
void set_overlay_progress(uint32_t value, uint32_t total) {
progress_value = value;
progress_total = total;
}
void overlay_try_render(bool force) {
render_flag = force;
do {
update_display(blit::now());
} while(render_flag);
}