void gui_display (int shortcut){ void* stor = display ? malloc(display->h * display->pitch) : 0; if (stor) memcpy(stor, display->pixels, display->h * display->pitch); if (tmpSDLScreen == NULL) { tmpSDLScreen = SDL_DisplayFormat(display); if (tmpSDLScreen == NULL) { write_log ("SDLUI: Failed to create temp screen\n"); abort(); } else { write_log ("SDLUI: Created temp screen %dx%dx%d\n", display->w, display->h, display->format->BitsPerPixel); } } SDL_Event event; int menu_exitcode = -1; int mainloopdone = 0; int mouse_x = 30; int mouse_y = 40; int kup = 0; int kdown = 0; int kleft = 0; int kright = 0; int ksel = 0; int iconpos_x = 0; int iconpos_y = 0; if (getcwd (launchDir, 256)) { strcpy (yol, launchDir); write_log ("SDLUI: current dir: %s\n", launchDir); } else { write_log("getcwd failed with errno %d\n", errno); return; } /* set a proper keyboard delay so we can move through lists without having hammer the keyboard... */ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); int need_redraw = 1; while (!mainloopdone) { while (SDL_PollEvent(&event)) { need_redraw = 1; switch(event.type) { case SDL_QUIT: mainloopdone = 1; break; case SDL_JOYBUTTONDOWN: switch (event.jbutton.button) { case PLATFORM_BUTTON_R: break; case PLATFORM_BUTTON_L: break; case PLATFORM_BUTTON_UP: kup = 1; break; case PLATFORM_BUTTON_DOWN: kdown = 1; break; case PLATFORM_BUTTON_LEFT: kleft = 1; break; case PLATFORM_BUTTON_RIGHT: kright = 1; break; case PLATFORM_BUTTON_CLICK: ksel = 1; break; case PLATFORM_BUTTON_B: ksel = 1; break; case PLATFORM_BUTTON_Y: break; case PLATFORM_BUTTON_START: mainloopdone = 1; break; } break; case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_RETURN: if((event.key.keysym.mod & KMOD_LALT) || (event.key.keysym.mod & KMOD_RALT)) { toggle_fullscreen(0); //SDL_Delay(100); break; } else { // enter to select ksel = 1; break; } case SDLK_ESCAPE: mainloopdone = 1; break; case SDLK_UP: kup = 1; break; case SDLK_DOWN: kdown = 1; break; case SDLK_LEFT: kleft = 1; break; case SDLK_RIGHT: kright = 1; break; // space to run default case SDLK_SPACE: selected_item = menu_sel_run; ksel =1; break; default: break; } break; case SDL_MOUSEMOTION: mouse_x += event.motion.xrel; mouse_y += event.motion.yrel; break; case SDL_MOUSEBUTTONDOWN: if (selected_item == 0) { if (mouse_x >= 0 && mouse_x <= 20) { if (mouse_y >= 0 && mouse_y <= 20) { mainloopdone = 1; } } } else { ksel = 1; break; } break; case SDL_ACTIVEEVENT: case SDL_KEYUP: break; default: dprintf(2, "got event %lu\n", (long) event.type); need_redraw = 0; } } if(!need_redraw) { SDL_Delay(20); continue; } if (ksel == 1) { if (selected_item == menu_sel_expansion) { sprintf (msg, "%s", "Select KickStart ROM"); sprintf (msg_status, "%s", "EXIT: Back/ESC"); sprintf (yol, "%s/roms", launchDir); dirz(1); } if (selected_item == menu_sel_floppy) { sprintf (msg, "%s", "Select Disk Image"); sprintf (msg_status, "%s", "DF0: B DF1: A"); sprintf (yol, "%s/disks", launchDir); dirz(0); } if (selected_item == menu_sel_prefs) { sprintf (msg, "%s", "Emulation Configuration"); sprintf (msg_status, "%s", "EXIT: Back/ESC"); prefz(0); } if (selected_item == menu_sel_reset) { uae_reset(0, 1); menu_exitcode = 2; mainloopdone = 1; } if (selected_item == menu_sel_keymaps) { } /* if (selected_item == menu_sel_tweaks) { sprintf(msg,"%s","Tweaks"); sprintf(msg_status,"%s","L/R = -/+ B: Apply"); tweakz(0); }*/ if (selected_item == menu_sel_storage) { strcpy(msg, "Savestates"); strcpy(msg_status, "LOAD: A SAVE: B"); sprintf (yol, "%s/saves", launchDir); dirz(2); } if (selected_item == menu_sel_run) { menu_exitcode = 1; mainloopdone = 1; } if (selected_item == menu_sel_exit) { SDL_Quit(); exit(0); } ksel = 0; } // background SDL_BlitSurface (pMenu_Surface, NULL, tmpSDLScreen, NULL); // icons iconpos_x = 10; iconpos_y = 33; selected_hilite (iconpos_x, iconpos_y, mouse_x, mouse_y, icon_floppy, menu_sel_floppy); blit_image (icon_floppy, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; selected_hilite (iconpos_x, iconpos_y, mouse_x, mouse_y, icon_preferences, menu_sel_prefs); blit_image (icon_preferences, iconpos_x, iconpos_y); // iconpos_x += iconsizex + bosluk; // selected_hilite (iconpos_x, iconpos_y, mouse_x, mouse_y, icon_tweaks, menu_sel_tweaks); // blit_image (icon_tweaks, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; selected_hilite (iconpos_x, iconpos_y, mouse_x, mouse_y, icon_keymaps, menu_sel_keymaps); blit_image (icon_keymaps, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; selected_hilite (iconpos_x, iconpos_y, mouse_x, mouse_y, icon_expansion, menu_sel_expansion); blit_image (icon_expansion, iconpos_x, iconpos_y); iconpos_x = 10; iconpos_y = iconpos_y + iconsizey + bosluk; selected_hilite (iconpos_x,iconpos_y,mouse_x,mouse_y,icon_storage, menu_sel_storage); blit_image (icon_storage, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; selected_hilite (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_reset, menu_sel_reset); blit_image (icon_reset, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; selected_hilite (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_run, menu_sel_run); blit_image (icon_run, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; selected_hilite (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_exit, menu_sel_exit); blit_image (icon_exit, iconpos_x, iconpos_y); // texts write_text (TITLE_X, TITLE_Y, "PUAE //GnoStiC"); // mouse pointer ------------------------------ if (kleft == 1) { mouse_x -= (iconsizex + bosluk); kleft = 0; } if (kright == 1) { mouse_x += (iconsizex + bosluk); kright = 0; } if (kup == 1) { mouse_y -= (iconsizey + bosluk); kup = 0; } if (kdown == 1) { kdown = 0; mouse_y += (iconsizey + bosluk); } #define _MENU_X 640 #define _MENU_Y 480 if (mouse_x < 1) { mouse_x = 1; } if (mouse_y < 1) { mouse_y = 1; } /* pMainMenu_Surface->w */ #define MOUSE_MAX_X (_MENU_X - pMouse_Pointer->w) #define MOUSE_MAX_Y (_MENU_Y - pMouse_Pointer->h) if (mouse_x > MOUSE_MAX_X) { mouse_x = MOUSE_MAX_X; } if (mouse_y > MOUSE_MAX_Y) { mouse_y = MOUSE_MAX_Y; } rect.x = mouse_x; rect.y = mouse_y; //rect.w = pMouse_Pointer->w; //rect.h = pMouse_Pointer->h; SDL_BlitSurface (pMouse_Pointer, NULL, tmpSDLScreen, &rect); // mouse pointer-end SDL_BlitSurface (tmpSDLScreen, NULL, display, NULL); #ifdef USE_GL flush_gl_buffer (&glbuffer, 0, display->h - 1); render_gl_buffer (&glbuffer, 0, display->h - 1); glFlush (); SDL_GL_SwapBuffers (); #else SDL_Flip (display); #endif need_redraw = 0; SDL_Delay(20); } //while done if (stor) { memcpy(display->pixels, stor, display->h * display->pitch); free(stor); SDL_Flip(display); } SDL_EnableKeyRepeat(0, 0); /* disable keyrepeat again */ // return menu_exitcode; }
int gui_display(int shortcut){ SDL_Event event; int menu_exitcode = -1; int mainloopdone = 0; int mouse_x = 30; int mouse_y = 40; int kup = 0; int kdown = 0; int kleft = 0; int kright = 0; int ksel = 0; int iconpos_x = 0; int iconpos_y = 0; getcwd(launchDir,256); while (!mainloopdone) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { mainloopdone = 1; } if (event.type == SDL_JOYBUTTONDOWN) { switch (event.jbutton.button) { case GP2X_BUTTON_R: break; case GP2X_BUTTON_L: break; case GP2X_BUTTON_UP: kup = 1; break; case GP2X_BUTTON_DOWN: kdown = 1; break; case GP2X_BUTTON_LEFT: kleft = 1; break; case GP2X_BUTTON_RIGHT: kright = 1; break; case GP2X_BUTTON_CLICK: ksel = 1; break; case GP2X_BUTTON_B: ksel = 1; break; case GP2X_BUTTON_Y: break; case GP2X_BUTTON_START: mainloopdone = 1; break; } } if (event.type == SDL_KEYDOWN) { switch (event.key.keysym.sym) { case SDLK_ESCAPE: mainloopdone = 1; break; case SDLK_UP: kup = 1; break; case SDLK_DOWN: kdown = 1; break; case SDLK_LEFT: kleft = 1; break; case SDLK_RIGHT: kright = 1; break; case SDLK_b: ksel = 1; break; default: break; } } if (event.type == SDL_MOUSEMOTION) { mouse_x += event.motion.xrel; mouse_y += event.motion.yrel; } if (event.type == SDL_MOUSEBUTTONDOWN) { if (seciliolan == 0) { if (mouse_x >= 0 && mouse_x <= 20) { if (mouse_y >= 0 && mouse_y <= 20) { mainloopdone = 1; } } } else { ksel = 1; break; } } } if (ksel == 1) { if (seciliolan == menu_sel_expansion) { sprintf(msg,"%s","Select KickStart ROM"); sprintf(msg_status,"%s"," "); sprintf(yol,"%s/roms",launchDir); dirz(1); } if (seciliolan == menu_sel_floppy) { sprintf(msg,"%s","Select Disk Image"); sprintf(msg_status,"%s","DF0: B DF1: A"); sprintf(yol,"%s/disks",launchDir); dirz(0); } if (seciliolan == menu_sel_prefs) { sprintf(msg,"%s"," "); sprintf(msg_status,"%s"," "); prefz(0); } if (seciliolan == menu_sel_reset) { //reset amiga menu_exitcode = 2; mainloopdone = 1; } if (seciliolan == menu_sel_keymaps) { } if (seciliolan == menu_sel_tweaks) { sprintf(msg,"%s","Tweaks"); sprintf(msg_status,"%s","L/R = -/+ B: Apply"); tweakz(0); } if (seciliolan == menu_sel_storage) { } if (seciliolan == menu_sel_run) { menu_exitcode = 1; mainloopdone = 1; } if (seciliolan == menu_sel_exit) { SDL_Quit(); #ifdef GP2X //remove mmuhack module system("/sbin/rmmod mmuhack"); //menu chdir("/usr/gp2x"); execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL); #endif exit(0); } ksel = 0; } // background SDL_BlitSurface (pMenu_Surface,NULL,tmpSDLScreen,NULL); // icons iconpos_x = 10; iconpos_y = 23; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y,icon_floppy, menu_sel_floppy); blit_image (icon_floppy, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_preferences, menu_sel_prefs); blit_image (icon_preferences, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_tweaks, menu_sel_tweaks); blit_image (icon_tweaks, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_keymaps, menu_sel_keymaps); blit_image (icon_keymaps, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_expansion, menu_sel_expansion); blit_image (icon_expansion, iconpos_x, iconpos_y); iconpos_x = 10; iconpos_y = 93; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y,icon_storage, menu_sel_storage); blit_image (icon_storage, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_reset, menu_sel_reset); blit_image (icon_reset, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_run, menu_sel_run); blit_image (icon_run, iconpos_x, iconpos_y); iconpos_x += iconsizex + bosluk; secilimi (iconpos_x,iconpos_y,mouse_x,mouse_y, icon_exit, menu_sel_exit); blit_image (icon_exit, iconpos_x, iconpos_y); // texts write_text (26,3,"UAE2x 0.1 alpha //GnoStiC"); // mouse pointer ------------------------------ if (kleft == 1) { mouse_x -= (iconsizex + bosluk); kleft = 0; } if (kright == 1) { mouse_x += (iconsizex + bosluk); kright = 0; } if (kup == 1) { mouse_y -= (iconsizey + bosluk); kup = 0; } if (kdown == 1) { kdown = 0; mouse_y += (iconsizey + bosluk); } if (mouse_x < 1) { mouse_x = 1; } if (mouse_y < 1) { mouse_y = 1; } if (mouse_x > 320) { mouse_x = 320; } if (mouse_y > 240) { mouse_y = 240; } rect.x = mouse_x; rect.y = mouse_y; //rect.w = pMouse_Pointer->w; //rect.h = pMouse_Pointer->h; SDL_BlitSurface (pMouse_Pointer,NULL,tmpSDLScreen,&rect); // mouse pointer-end SDL_BlitSurface (tmpSDLScreen,NULL,display,NULL); SDL_Flip(display); } //while done return menu_exitcode; }