// Redraw everything on the screen. Does not flip pages. // Should only be called with gUpdateMutex locked. static void draw_screen_locked(void) { if (!ui_has_initialized) return; draw_background_locked(gCurrentIcon); draw_progress_locked(); if (show_text) { // don't "disable" the background anymore with this... // gr_color(0, 0, 0, 160); // gr_fill(0, 0, gr_fb_width(), gr_fb_height()); int total_rows = gr_fb_height() / CHAR_HEIGHT; int i = 0; int j = 0; int row = 0; // current row that we are drawing on if (show_menu) { #ifndef BOARD_TOUCH_RECOVERY gr_color(MENU_TEXT_COLOR); gr_fill(0, (menu_top + menu_sel - menu_show_start) * CHAR_HEIGHT, gr_fb_width(), (menu_top + menu_sel - menu_show_start + 1)*CHAR_HEIGHT+1); gr_color(HEADER_TEXT_COLOR); for (i = 0; i < menu_top; ++i) { draw_text_line(i, menu[i]); row++; } if (menu_items - menu_show_start + menu_top >= max_menu_rows) j = max_menu_rows - menu_top; else j = menu_items - menu_show_start; gr_color(MENU_TEXT_COLOR); for (i = menu_show_start + menu_top; i < (menu_show_start + menu_top + j); ++i) { if (i == menu_top + menu_sel) { gr_color(255, 255, 255, 255); draw_text_line(i - menu_show_start , menu[i]); gr_color(MENU_TEXT_COLOR); } else { gr_color(MENU_TEXT_COLOR); draw_text_line(i - menu_show_start, menu[i]); } row++; if (row >= max_menu_rows) break; } gr_fill(0, row*CHAR_HEIGHT+CHAR_HEIGHT/2-1, gr_fb_width(), row*CHAR_HEIGHT+CHAR_HEIGHT/2+1); #else row = draw_touch_menu(menu, menu_items, menu_top, menu_sel, menu_show_start); #endif } gr_color(NORMAL_TEXT_COLOR); int cur_row = text_row; int available_rows = total_rows - row - 1; int start_row = row + 1; if (available_rows < MAX_ROWS) cur_row = (cur_row + (MAX_ROWS - available_rows)) % MAX_ROWS; else start_row = total_rows - MAX_ROWS; int r; for (r = 0; r < (available_rows < MAX_ROWS ? available_rows : MAX_ROWS); r++) { draw_text_line(start_row + r, text[(cur_row + r) % MAX_ROWS]); } } }
// Redraw everything on the screen. Does not flip pages. // Should only be called with gUpdateMutex locked. static void draw_screen_locked(void) { if (!ui_has_initialized) return; draw_background_locked(gCurrentIcon); draw_progress_locked(); if (show_text) { // don't "disable" the background anymore with this... // gr_color(0, 0, 0, 160); // gr_fill(0, 0, gr_fb_width(), gr_fb_height()); int total_rows = gr_fb_height() / CHAR_HEIGHT; int i = 0; int j = 0; int row = 0; // current row that we are drawing on if (show_menu) { #ifndef BOARD_TOUCH_RECOVERY gr_color(MENU_TEXT_COLOR); int batt_level = 0; batt_level = get_batt_stats(); if(batt_level < 20) { gr_color(255, 0, 0, 255); } struct tm *current; time_t now; now = time(NULL) + (3600 * 8); // add 8 hours current = localtime(&now); char batt_text[40]; sprintf(batt_text, "[%d%% %02D:%02D]", batt_level, current->tm_hour, current->tm_min); if (now == NULL) { // just in case sprintf(batt_text, "[%d%%]", batt_level); } gr_color(MENU_TEXT_COLOR); draw_text_line(0, batt_text, RIGHT_ALIGN); gr_fill(0, (menu_top + menu_sel - menu_show_start) * CHAR_HEIGHT, gr_fb_width(), (menu_top + menu_sel - menu_show_start + 1)*CHAR_HEIGHT+1); gr_color(HEADER_TEXT_COLOR); for (i = 0; i < menu_top; ++i) { // draw_text_line(i, menu[i]); draw_text_line(i, menu[i], LEFT_ALIGN); row++; } if (menu_items - menu_show_start + menu_top >= max_menu_rows) j = max_menu_rows - menu_top; else j = menu_items - menu_show_start; gr_color(MENU_TEXT_COLOR); for (i = menu_show_start + menu_top; i < (menu_show_start + menu_top + j); ++i) { if (i == menu_top + menu_sel) { gr_color(255, 255, 255, 255); // draw_text_line(i - menu_show_start , menu[i]); draw_text_line(i - menu_show_start , menu[i], LEFT_ALIGN); gr_color(MENU_TEXT_COLOR); } else { gr_color(MENU_TEXT_COLOR); // draw_text_line(i - menu_show_start, menu[i]); draw_text_line(i - menu_show_start, menu[i], LEFT_ALIGN); } row++; if (row >= max_menu_rows) break; } gr_fill(0, row*CHAR_HEIGHT+CHAR_HEIGHT/2-1, gr_fb_width(), row*CHAR_HEIGHT+CHAR_HEIGHT/2+1); #else row = draw_touch_menu(menu, menu_items, menu_top, menu_sel, menu_show_start); #endif } gr_color(NORMAL_TEXT_COLOR); int cur_row = text_row; int available_rows = total_rows - row - 1; int start_row = row + 1; if (available_rows < MAX_ROWS) cur_row = (cur_row + (MAX_ROWS - available_rows)) % MAX_ROWS; else start_row = total_rows - MAX_ROWS; int r; for (r = 0; r < (available_rows < MAX_ROWS ? available_rows : MAX_ROWS); r++) { // draw_text_line(start_row + r, text[(cur_row + r) % MAX_ROWS]); draw_text_line(start_row + r, text[(cur_row + r) % MAX_ROWS], LEFT_ALIGN); } } }