static void handle_release(input_device *dev, struct input_event *ev) { if (dev->touch_pos.y < (gr_fb_height() - virtualkey_h)) { if(dev->slide_right == 1) { ev->type = EV_KEY; ev->code = KEY_ENTER; ev->value = 2; vibrate(VIBRATOR_TIME_MS); } else if(dev->slide_left == 1) { ev->type = EV_KEY; ev->code = KEY_BACK; ev->value = 2; vibrate(VIBRATOR_TIME_MS); } } #ifdef USE_VIRTUAL_KEY else { ev->type = EV_KEY; ev->code=ui_get_virtualkey_pressed(dev); ev->value = 2; vibrate(VIBRATOR_TIME_MS); } //clear button pressed down effect. if (virtualkey_pressed == 1 && ui_handle_key(ev->code, 1) == NO_ACTION) { pthread_mutex_lock(&gUpdateMutex); draw_virtualkeys_locked(); gr_flip(); pthread_mutex_unlock(&gUpdateMutex); virtualkey_pressed = 0; } #endif reset_touch(dev); }
// 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()); gr_surface surface = gVirtualKeys; int total_rows = (gr_fb_height() / CHAR_HEIGHT) - (gr_get_height(surface) / CHAR_HEIGHT) - 1; int i = 0; int j = 0; int offset = 0; // offset of separating bar under menus int row = 0; // current row that we are drawing on if (show_menu) { gr_color(MENU_TEXT_COLOR); int batt_level = 0; batt_level = get_batt_stats(); if (batt_level < 21) { gr_color(255, 0, 0, 255); } char batt_text[40]; sprintf(batt_text, "[%d%%]", batt_level); draw_text_line(0, batt_text, RIGHT_ALIGN); 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], 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], LEFT_ALIGN); gr_color(MENU_TEXT_COLOR); } else { gr_color(MENU_TEXT_COLOR); draw_text_line(i - menu_show_start, menu[i], LEFT_ALIGN); } row++; if (row >= max_menu_rows) break; } if (menu_items <= max_menu_rows) offset = 0; gr_fill(0, (row-offset)*CHAR_HEIGHT+CHAR_HEIGHT/2-1, gr_fb_width(), (row-offset)*CHAR_HEIGHT+CHAR_HEIGHT/2+1); } 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], LEFT_ALIGN); } } draw_virtualkeys_locked(); //added to draw the virtual keys }
// 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()); #ifdef PHILZ_TOUCH_RECOVERY draw_touch_menu(); #else 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]); } #endif } #ifdef PHILZ_TOUCH_RECOVERY draw_virtualkeys_locked(); //added to draw the virtual keys #endif }
// 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) { int total_rows = (gr_fb_height() - virtualkey_h) / CHAR_HEIGHT; int i = 0; int j = 0; int row = 0; // current row that we are drawing on if (show_menu) { int batt_level = 0; char batt_text[40]; batt_level = get_batt_stats(); /*struct tm *current; time_t now; now = time(NULL); // add 2 hours current = localtime(&now); sprintf(batt_text, "[%d%% %02D:%02D]", batt_level, current->tm_hour, current->tm_min); if (now == NULL)*/ sprintf(batt_text, " [%d%%]", batt_level); gr_color(menuTextColor[0], menuTextColor[1], menuTextColor[2], menuTextColor[3]); //gr_color(0, 255, 0, 255); if (batt_level < 21) gr_color(255, 0, 0, 255); draw_text_line(0, batt_text, RIGHT_ALIGN); gr_color(menuTextColor[0], menuTextColor[1], menuTextColor[2], menuTextColor[3]); 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], 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(menuTextColor[0], menuTextColor[1], menuTextColor[2], menuTextColor[3]); 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], LEFT_ALIGN); gr_color(menuTextColor[0], menuTextColor[1], menuTextColor[2], menuTextColor[3]); } else { gr_color(menuTextColor[0], menuTextColor[1], menuTextColor[2], menuTextColor[3]); 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); } 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], LEFT_ALIGN); } } #ifdef USE_VIRTUAL_KEY draw_virtualkeys_locked(); #endif }