void GUI_DrawBackground(u16 x, u16 y, u16 w, u16 h) { if(w == 0 || h == 0) return; if(FullRedraw != REDRAW_ONLY_DIRTY) { if(w == LCD_WIDTH && h == LCD_HEIGHT) _gui_draw_background(x, y, w, h); //Optimization to prevent partial redraw when it isn't needed return; //Optimization to prevent partial redraw when it isn't needed } if (objDIALOG) GUI_DialogDrawBackground(x, y, w, h); else _gui_draw_background(x, y, w, h); }
void GUI_DrawDialog(struct guiObject *obj) { struct guiBox *box = &obj->box; struct guiDialog *dialog = (struct guiDialog *)obj; if (dialog->txtbox.height == 0) { _draw_dialog_box(box, dialog->txtbox.x, dialog->title); } else if(dialog->txtbox.width) { // NOTE: We assume all redraw events after the 1st are incremental! GUI_DialogDrawBackground(dialog->txtbox.x, dialog->txtbox.y, dialog->txtbox.width, dialog->txtbox.height); } const char *str = dialog->string_cb ? dialog->string_cb(obj, dialog->cbData) : (const char *)dialog->cbData; int button_height = GUI_ButtonHeight(DIALOG_BUTTON); LCD_SetFont(DIALOGBODY_FONT.font); LCD_SetFontColor(DIALOGBODY_FONT.font_color); LCD_GetStringDimensions((const u8 *)str, &dialog->txtbox.width, &dialog->txtbox.height); dialog->txtbox.y = box->y + DIALOG_HEADER_Y + (box->height - dialog->txtbox.height - DIALOG_HEADER_Y - button_height) / 2; LCD_PrintStringXY(dialog->txtbox.x, dialog->txtbox.y, str); }