Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
a37949c2aThis file is pinned to the selected release. Download the original to open it in your design tool.
// window_progress.c
#include "window_progress.h"
#include "gui.h"
#define WINDOW_PROGRESS_MAX_TEXT 16
void window_progress_init(window_progress_t* window)
{
window->color_back = gui_defaults.color_back;
window->color_text = gui_defaults.color_text;
window->color_progress = COLOR_LIME;
window->font = gui_defaults.font;
window->padding = gui_defaults.padding;
window->alignment = ALIGN_CENTER;
window->height_progress = 8;
window->format = "%.0f%%";
window->value = 0;
window->min = 0;
window->max = 100;
}
void window_progress_draw(window_progress_t* window)
{
if (((window->win.flg & (WINDOW_FLG_INVALID | WINDOW_FLG_VISIBLE)) == (WINDOW_FLG_INVALID | WINDOW_FLG_VISIBLE))) {
rect_ui16_t rc = window->win.rect;
char text[WINDOW_PROGRESS_MAX_TEXT];
sprintf(text, window->format, (double)window->value);
int progress_w = (int)(rc.w * (window->value - window->min) / (window->max - window->min));
rc.h = window->height_progress;
if (1) { // TODO: border attribute, default is no border (Prusa GUI)
rc.x += progress_w;
rc.w -= progress_w;
display->fill_rect(rc, window->color_back);
rc.x = window->win.rect.x;
rc.w = progress_w;
display->fill_rect(rc, window->color_progress);
} else {
display->fill_rect(rc, window->color_progress);
rc.x += progress_w;
rc.w = window->win.rect.w - progress_w;
display->draw_rect(rc, window->color_progress);
rc = rect_ui16_sub_padding_ui8(rc, padding_ui8(1, 1, 1, 1));
display->fill_rect(rc, window->color_back);
}
rc = window->win.rect;
if (rc.h > window->height_progress) {
rc.y += window->height_progress;
rc.h -= window->height_progress;
render_text_align(rc,
text,
window->font,
window->color_back,
window->color_text,
window->padding,
window->alignment);
}
window->win.flg &= ~WINDOW_FLG_INVALID;
}
}
const window_class_progress_t window_class_progress = {
{
WINDOW_CLS_PROGRESS,
sizeof(window_progress_t),
(window_init_t*)window_progress_init,
0,
(window_draw_t*)window_progress_draw,
0,
},
};