static int gui_RunMenu(MENU *menu) { MENUITEM *mi; u32 keys; for (;;) { mi = menu->m + menu->cur; keys = key_read(); video_clear(); // check keys if (keys & KEY_SELECT) { key_reset(); return 0; } else if (keys & KEY_UP) { do { if (--menu->cur < 0) menu->cur = menu->num - 1; } while (!(menu->m + menu->cur)->name); // Skip over an empty menu entry. } else if (keys & KEY_DOWN) { do { if (++menu->cur == menu->num) menu->cur = 0; } while (!(menu->m + menu->cur)->name); // Skip over an empty menu entry. } else if (keys & KEY_A) { if (mi->on_press_a) { key_reset(); int result = (*mi->on_press_a)(); if (result) return result; } } else if (keys & KEY_B) { menu->cur = menu->num - 1; key_reset(); } if ((keys & (KEY_LEFT | KEY_RIGHT)) && mi->on_press) { int result = (*mi->on_press)(keys); if (result) return result; } // diplay menu ShowMenu(menu); video_flip(); timer_delay(75); if (keys & (KEY_A | KEY_B | KEY_X | KEY_Y | KEY_L | KEY_R | KEY_LEFT | KEY_RIGHT | KEY_UP | KEY_DOWN)) timer_delay(50); } return 0; }
int key_hook(int keycode, t_mapinfo *map) { t_mapinfo mapcpy; mapcpy = *map; mapcpy.points = ft_mapcopy(map); if (keycode == 53) exit(0); else if (keycode == 15) key_reset(map); else if (keycode >= 0 && keycode <= 14) key_rot(keycode, map); else if (keycode >= 123 && keycode <= 126) key_scale(keycode, map); mlx_clear_window(0, map->win); scale_points(&mapcpy, mapcpy.scale_x, mapcpy.scale_y); rotate_x(map->rot_x, &mapcpy); rotate_y(map->rot_y, &mapcpy); rotate_z(map->rot_z, &mapcpy); ft_centremap(&mapcpy); ft_draw_map(mapcpy); free_map(mapcpy); if (keycode == 15 || keycode == 34) ft_draw_instruct(*map); //ft_putnbr(keycode); //ft_putchar('\n'); return (0); }
static int gui_Credits() { for (;;) { u32 keys = key_read(); video_clear(); // check keys if (keys) { key_reset(); return 0; } // diplay menu port_printf(15 * 8 + 4, 10, "CREDITS:"); port_printf( 2 * 8, 30, "pcsx team, pcsx-df team, pcsx-r team"); port_printf( 6 * 8, 50, "Franxis and Chui - PCSX4ALL"); port_printf( 4 * 8, 60, "Unai - fast PCSX4ALL GPU plugin"); port_printf( 5 * 8, 80, "Ulrich Hecht - psx4all-dingoo"); port_printf(10 * 8, 90, "notaz - PCSX-ReArmed"); port_printf( 0 * 8, 110, "Dmitry Smagin - porting and optimizing"); port_printf( 0 * 8, 120, " of mips recompiler,"); port_printf( 0 * 8, 130, " gui coding"); port_printf( 0 * 8, 150, "senquack - fixing polygons in gpu_unai,"); port_printf( 0 * 8, 160, " porting spu and other stuff"); port_printf( 0 * 8, 170, " from pcsx_rearmed and pcsx-r,"); port_printf( 0 * 8, 180, " many fixes and improvements"); port_printf( 0 * 8, 195, "JohnnyonFlame - gpu_unai dithering"); port_printf( 0 * 8, 205, " and other fixes"); port_printf( 0 * 8, 220, "zear - gui fixing and testing"); video_flip(); timer_delay(75); } return 0; }
int key_hook(int k, t_env *e) { key_zoom(k, e); key_move(k, e); key_reset(k, e); if (k == KEY_DEEP_ADD) e->i_max += 10; if (k == KEY_DEEP_SUB) e->i_max -= 10; if (k == KEY_AUTO_ZOOM) e->zoom_auto = !e->zoom_auto; if (k == KEY_PSYCHEDELIC) e->psychedelic = !e->psychedelic; if (k == KEY_ESC) { mlx_destroy_window(e->mlx, e->win); exit(0); } if (k == KEY_MOUSE_STOP) e->mouse_stop = !e->mouse_stop; e->fractal(e); return (0); }
static int gui_state_save(int slot) { if (sshot_img) { free(sshot_img); sshot_img = NULL; } // Remember which saveslot was accessed last saveslot = slot; video_clear(); port_printf(160-(6*8/2), 120-(8/2), "SAVING"); video_flip(); if (state_save(slot) < 0) { // Error saving for (;;) { u32 keys = key_read(); video_clear(); // check keys if (keys) { key_reset(); return 0; } port_printf(160-(11*8/2), 120-12, "SAVE FAILED"); port_printf(160-(18*8/2), 120+12, "Out of disk space?"); video_flip(); timer_delay(75); } } // Return -1 to gui_StateSave() caller menu, so it knows // to tell main menu to return back to main menu. return -1; }
//To choose which of a multi-CD image should be used. Can be called // from front-end 'Swap CD' menu item, in which case parameter // 'swapping_cd' is true. Or, can be called via callback function // gui_select_multicd_to_boot_from() inside cdriso.cpp, in which // case swapping_cd parameter is false. static int gui_select_multicd(bool swapping_cd) { if (cdrIsoMultidiskCount <= 1) return 0; // Only max of 8 ISO images inside an Eboot multi-disk .pbp are supported // by cdriso.cpp PBP code, but enforce it here to be sure: int num_rows = (cdrIsoMultidiskCount > 8) ? 8 : cdrIsoMultidiskCount; int cursor_pos = cdrIsoMultidiskSelect; if ((cursor_pos >= num_rows) || (cursor_pos < 0)) cursor_pos = 0; for (;;) { video_clear(); u32 keys = key_read(); if ((swapping_cd) && (keys & KEY_SELECT)) { key_reset(); return 0; } if (!swapping_cd) port_printf(MENU_X, MENU_Y, "Multi-CD image detected:"); char tmp_string[41]; for (int row=0; row < num_rows; ++row) { if (row == cursor_pos) { // draw cursor port_printf(MENU_X + 16, MENU_LS + 10 + (10 * row), "-->"); } sprintf(tmp_string, "CD %d", (row+1)); if (swapping_cd && (row == cdrIsoMultidiskSelect)) { // print indication of which CD is already inserted strcat(tmp_string, " (inserted)"); } port_printf(MENU_X + (8 * 5), MENU_LS + 10 + (10 * row), tmp_string); } if (keys & KEY_DOWN) { //down if (++cursor_pos >= num_rows) cursor_pos = 0; } else if (keys & KEY_UP) { // up if (--cursor_pos < 0) cursor_pos = num_rows - 1; } else if (keys & KEY_LEFT) { //left cursor_pos = 0; } else if (keys & KEY_RIGHT) { //right cursor_pos = num_rows - 1; } else if (keys & KEY_A) { // button 1 key_reset(); cdrIsoMultidiskSelect = cursor_pos; video_clear(); video_flip(); // Forget last used save slot saveslot = -1; return 1; } video_flip(); timer_delay(75); if (keys & (KEY_A | KEY_B | KEY_X | KEY_Y | KEY_L | KEY_R | KEY_LEFT | KEY_RIGHT | KEY_UP | KEY_DOWN)) timer_delay(50); } }
char *FileReq(char *dir, const char *ext, char *result) { static char *cwd = NULL; static s32 cursor_pos = 1; static s32 first_visible; static s32 num_items = 0; DIR *dirstream; struct dirent *direntry; static s32 row; char tmp_string[41]; u32 keys; if (dir) ChDir(dir); cwd = GetCwd(); for (;;) { keys = key_read(); video_clear(); if (keys & KEY_SELECT) { FREE_LIST(); key_reset(); return NULL; } if (num_items == 0) { dirstream = opendir(cwd); if (dirstream == NULL) { port_printf(0, 20, "error opening directory"); return NULL; } // read directory entries while ((direntry = readdir(dirstream))) { s32 type = get_entry_type(cwd, direntry->d_name); // this is a very ugly way of only accepting a certain extension if ((type == 0 && strcmp(direntry->d_name, ".")) || check_ext(direntry->d_name) || (ext && (strlen(direntry->d_name) > 4 &&0 == strncasecmp(direntry->d_name + (strlen(direntry->d_name) - strlen(ext)), ext, strlen(ext))))) { // Hide ".." if at Unix root dir. Don't display Unix hidden files (.file). if ((!strcmp(direntry->d_name, "..") && strcmp(cwd, "/")) || direntry->d_name[0] != '.') { filereq_dir_items[num_items].name = (char *)malloc(strlen(direntry->d_name) + 1); strcpy(filereq_dir_items[num_items].name, direntry->d_name); filereq_dir_items[num_items].type = type; num_items++; if (num_items > 1024) break; } } } closedir(dirstream); sort_dir(filereq_dir_items, num_items); cursor_pos = 0; first_visible = 0; } // display current directory int len = strlen(cwd); if (len > 40) { strcpy(tmp_string, ".."); strcat(tmp_string, cwd + len - 38); port_printf(0, MENU_Y, tmp_string); } else port_printf(0, MENU_Y, cwd); if (keys & KEY_DOWN) { //down if (++cursor_pos >= num_items) { cursor_pos = 0; first_visible = 0; } if ((cursor_pos - first_visible) >= MENU_HEIGHT) first_visible++; } else if (keys & KEY_UP) { // up if (--cursor_pos < 0) { cursor_pos = num_items - 1; first_visible = cursor_pos - MENU_HEIGHT + 1; if (first_visible < 0) first_visible = 0; } if (cursor_pos < first_visible) first_visible--; } else if (keys & KEY_LEFT) { //left if (cursor_pos >= 10) cursor_pos -= 10; else cursor_pos = 0; if (cursor_pos < first_visible) first_visible = cursor_pos; } else if (keys & KEY_RIGHT) { //right if (cursor_pos < (num_items - 11)) cursor_pos += 10; else cursor_pos = num_items - 1; if ((cursor_pos - first_visible) >= MENU_HEIGHT) first_visible = cursor_pos - (MENU_HEIGHT - 1); } else if (keys & KEY_A) { // button 1 // directory selected if (filereq_dir_items[cursor_pos].type == 0) { strcat(cwd, "/"); strcat(cwd, filereq_dir_items[cursor_pos].name); ChDir(cwd); cwd = GetCwd(); FREE_LIST(); key_reset(); } else { sprintf(result, "%s/%s", cwd, filereq_dir_items[cursor_pos].name); if (dir) strcpy(dir, cwd); video_clear(); port_printf(16 * 8, 120, "LOADING"); video_flip(); FREE_LIST(); key_reset(); return result; } } else if (keys & KEY_B) { cursor_pos = 0; first_visible = 0; key_reset(); } // display directory contents row = 0; while (row < num_items && row < MENU_HEIGHT) { if (row == (cursor_pos - first_visible)) { // draw cursor port_printf(MENU_X + 16, MENU_LS + (10 * row), "-->"); } if (filereq_dir_items[row + first_visible].type == 0) port_printf(MENU_X, MENU_LS + (10 * row), "DIR"); int len = strlen(filereq_dir_items[row + first_visible].name); if (len > 32) { snprintf(tmp_string, 16, "%s", filereq_dir_items[row + first_visible].name); strcat(tmp_string, ".."); strcat(tmp_string, &filereq_dir_items[row + first_visible].name[len - 15]); } else snprintf(tmp_string, 33, "%s", filereq_dir_items[row + first_visible].name); port_printf(MENU_X + (8 * 5), MENU_LS + (10 * row), tmp_string); row++; } while (row < MENU_HEIGHT) row++; video_flip(); timer_delay(75); if (keys & (KEY_A | KEY_B | KEY_X | KEY_Y | KEY_L | KEY_R | KEY_LEFT | KEY_RIGHT | KEY_UP | KEY_DOWN)) timer_delay(50); } return NULL; }