X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gui.c;h=0184a18dce00c1ff74913ce596a09396c5e76eb4;hb=2455b6a30e7d58cddfa7f196c4553e008996d46a;hp=8e0c1d462d792dede8e8c601cf152b5d9617fdf5;hpb=638cc6264cf3e8d1f046885fb68b5a1e22729d06;p=gpsp.git diff --git a/gui.c b/gui.c index 8e0c1d4..0184a18 100644 --- a/gui.c +++ b/gui.c @@ -16,6 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "common.h" +#include "font.h" + #ifndef _WIN32_WCE #include @@ -25,20 +28,13 @@ #endif -#ifndef GP2X_BUILD -#include "gp2x/cpuctrl.h" -#endif - -#include "common.h" -#include "font.h" - #define MAX_PATH 1024 // Blatantly stolen and trimmed from MZX (megazeux.sourceforge.net) #ifdef GP2X_BUILD -#define FILE_LIST_ROWS ((int)((SDL_SCREEN_HEIGHT - 40) / FONT_HEIGHT)) +#define FILE_LIST_ROWS 20 #define FILE_LIST_POSITION 5 #define DIR_LIST_POSITION 260 @@ -52,23 +48,17 @@ #ifdef PSP_BUILD +#define COLOR_BG color16(2, 8, 10) + #define color16(red, green, blue) \ (blue << 11) | (green << 5) | red \ #else -#define color16(red, green, blue) \ - (red << 11) | (green << 5) | blue \ - -#endif - -#ifdef GP2X_BUILD - #define COLOR_BG color16(0, 0, 0) -#else - -#define COLOR_BG color16(2, 8, 10) +#define color16(red, green, blue) \ + (red << 11) | (green << 5) | blue \ #endif @@ -79,33 +69,48 @@ #define COLOR_HELP_TEXT color16(16, 40, 24) #ifdef PSP_BUILD - #define get_clock_speed() \ + u8 *clock_speed_options[] = + { + "33MHz", "66MHz", "100MHz", "133MHz", "166MHz", "200MHz", "233MHz", + "266MHz", "300MHz", "333MHz" + }; + #define menu_get_clock_speed() \ clock_speed = (clock_speed_number + 1) * 33 #define get_clock_speed_number() \ clock_speed_number = (clock_speed / 33) - 1 #elif defined(WIZ_BUILD) - #define get_clock_speed() \ + u8 *clock_speed_options[] = + { + "300MHz", "333MHz", "366MHz", "400MHz", "433MHz", + "466MHz", "500MHz", "533MHz", "566MHz", "600MHz", + "633MHz", "666MHz", "700MHz", "733MHz", "766MHz", + "800MHz", "833MHz", "866MHz", "900MHz" + }; + #define menu_get_clock_speed() \ clock_speed = 300 + (clock_speed_number * 3333) / 100 #define get_clock_speed_number() \ clock_speed_number = (clock_speed - 300) / 33 #elif defined(GP2X_BUILD) - #define get_clock_speed() \ + u8 *clock_speed_options[] = + { + "150MHz", "160MHz", "170MHz", "180MHz", "190MHz", + "200MHz", "210MHz", "220MHz", "230MHz", "240MHz", + "250MHz", "260MHz", "270MHz", "280MHz", "290MHz" + }; + #define menu_get_clock_speed() \ clock_speed = 150 + clock_speed_number * 10 #define get_clock_speed_number() \ clock_speed_number = (clock_speed - 150) / 10 #else - #define get_clock_speed() 0 + u8 *clock_speed_options[] = + { + "0" + }; + #define menu_get_clock_speed() 0 #define get_clock_speed_number() 0 #endif -const int -#ifdef WIZ_BUILD - default_clock_speed = 533; -#elif defined(GP2X_BUILD) - default_clock_speed = 200; -#else - default_clock_speed = 333; -#endif + int sort_function(const void *dest_str_ptr, const void *src_str_ptr) { char *dest_str = *((char **)dest_str_ptr); @@ -140,11 +145,11 @@ s32 load_file(u8 **wildcards, u8 *result) u32 chosen_file, chosen_dir; u32 dialog_result = 1; s32 return_value = 1; - u32 current_file_selection; - u32 current_file_scroll_value; + s32 current_file_selection; + s32 current_file_scroll_value; u32 current_dir_selection; u32 current_dir_scroll_value; - u32 current_file_in_scroll; + s32 current_file_in_scroll; u32 current_dir_in_scroll; u32 current_file_number, current_dir_number; u32 current_column = 0; @@ -364,6 +369,13 @@ s32 load_file(u8 **wildcards, u8 *result) current_file_in_scroll++; } } + else + { + clear_screen(COLOR_BG); + current_file_selection = 0; + current_file_scroll_value = 0; + current_file_in_scroll = 0; + } } else { @@ -384,6 +396,25 @@ s32 load_file(u8 **wildcards, u8 *result) break; + case CURSOR_R: + if (current_column != 0) + break; + clear_screen(COLOR_BG); + current_file_selection += FILE_LIST_ROWS; + if (current_file_selection > num_files - 1) + current_file_selection = num_files - 1; + current_file_scroll_value = current_file_selection - FILE_LIST_ROWS / 2; + if (current_file_scroll_value < 0) + { + current_file_scroll_value = 0; + current_file_in_scroll = current_file_selection; + } + else + { + current_file_in_scroll = FILE_LIST_ROWS / 2; + } + break; + case CURSOR_UP: if(current_column == 0) { @@ -400,6 +431,17 @@ s32 load_file(u8 **wildcards, u8 *result) current_file_in_scroll--; } } + else + { + clear_screen(COLOR_BG); + current_file_selection = num_files - 1; + current_file_in_scroll = FILE_LIST_ROWS - 1; + if (current_file_in_scroll > num_files - 1) + current_file_in_scroll = num_files - 1; + current_file_scroll_value = num_files - FILE_LIST_ROWS; + if (current_file_scroll_value < 0) + current_file_scroll_value = 0; + } } else { @@ -419,7 +461,26 @@ s32 load_file(u8 **wildcards, u8 *result) } break; - case CURSOR_RIGHT: + case CURSOR_L: + if (current_column != 0) + break; + clear_screen(COLOR_BG); + current_file_selection -= FILE_LIST_ROWS; + if (current_file_selection < 0) + current_file_selection = 0; + current_file_scroll_value = current_file_selection - FILE_LIST_ROWS / 2; + if (current_file_scroll_value < 0) + { + current_file_scroll_value = 0; + current_file_in_scroll = current_file_selection; + } + else + { + current_file_in_scroll = FILE_LIST_ROWS / 2; + } + break; + + case CURSOR_RIGHT: if(current_column == 0) { if(num_dirs != 0) @@ -679,6 +740,18 @@ u32 gamepad_config_line_to_button[] = #endif +u8 *scale_options[] = +{ +#ifdef WIZ_BUILD + "unscaled 3:2", "scaled 3:2 (slower)", + "unscaled 3:2 (anti-tear)", "scaled 3:2 (anti-tear)" +#else + "unscaled 3:2", "scaled 3:2", "fullscreen", "scaled 3:2 (software)" +#ifdef PSP_BUILD + " 16:9" +#endif +#endif +}; s32 load_game_config_file() { @@ -740,6 +813,9 @@ s32 load_game_config_file() current_frameskip_type = auto_frameskip; frameskip_value = 4; +#ifdef WIZ_BUILD + frameskip_value = 1; +#endif random_skip = 0; clock_speed = default_clock_speed; @@ -756,10 +832,10 @@ s32 load_config_file() { u8 config_path[512]; - #if (defined(PSP_BUILD) || defined(ARM_ARCH)) && !defined(_WIN32_WCE) - sprintf(config_path, "%s/%s", main_path, GPSP_CONFIG_FILENAME); - #else + #if defined(_WIN32) || defined(_WIN32_WCE) sprintf(config_path, "%s\\%s", main_path, GPSP_CONFIG_FILENAME); + #else + sprintf(config_path, "%s/%s", main_path, GPSP_CONFIG_FILENAME); #endif file_open(config_file, config_path, read); @@ -776,7 +852,8 @@ s32 load_config_file() s32 menu_button = -1; file_read_array(config_file, file_options); - screen_scale = file_options[0] % 3; + screen_scale = file_options[0] % + (sizeof(scale_options) / sizeof(scale_options[0])); screen_filter = file_options[1] % 2; global_enable_audio = file_options[2] % 2; @@ -948,7 +1025,7 @@ void get_savestate_snapshot(u8 *savestate_filename) { memset(snapshot_buffer, 0, 240 * 160 * 2); print_string_ext("No savestate exists for this slot.", - 0xFFFF, 0x0000, 15, 75, snapshot_buffer, 240, 0); + 0xFFFF, 0x0000, 15, 75, snapshot_buffer, 240, 0, 0, FONT_HEIGHT); print_string("---------- --/--/---- --:--:-- ", COLOR_HELP_TEXT, COLOR_BG, 10, 40); } @@ -985,9 +1062,8 @@ void get_savestate_filename_noshot(u32 slot, u8 *name_buffer) u32 menu(u16 *original_screen) { - u32 clock_speed_number; - static u32 clock_speed_old = default_clock_speed; u8 print_buffer[81]; + u32 clock_speed_number; u32 _current_option = 0; gui_action_type gui_action; menu_enum _current_menu = MAIN_MENU; @@ -1034,6 +1110,17 @@ u32 menu(u16 *original_screen) "Does nothing." }; + void menu_update_clock() + { + get_clock_speed_number(); + if (clock_speed_number < 0 || clock_speed_number >= + sizeof(clock_speed_options) / sizeof(clock_speed_options[0])) + { + clock_speed = default_clock_speed; + get_clock_speed_number(); + } + } + void menu_exit() { if(!first_load) @@ -1042,7 +1129,7 @@ u32 menu(u16 *original_screen) void menu_quit() { - get_clock_speed(); + menu_get_clock_speed(); save_config_file(); quit(); } @@ -1062,6 +1149,7 @@ u32 menu(u16 *original_screen) return_value = 1; repeat = 0; reg[CHANGED_PC_STATUS] = 1; + menu_update_clock(); } else { @@ -1173,18 +1261,6 @@ u32 menu(u16 *original_screen) u8 *yes_no_options[] = { "no", "yes" }; u8 *enable_disable_options[] = { "disabled", "enabled" }; - u8 *scale_options[] = - { -#ifdef WIZ_BUILD - "unscaled 3:2", "scaled 3:2 (slower)" -#else - "unscaled 3:2", "scaled 3:2", "fullscreen" -#ifdef PSP_BUILD - " 16:9" -#endif -#endif - }; - u8 *frameskip_options[] = { "automatic", "manual", "off" }; u8 *frameskip_variation_options[] = { "uniform", "random" }; @@ -1206,29 +1282,6 @@ u32 menu(u16 *original_screen) u8 *update_backup_options[] = { "Exit only", "Automatic" }; -#ifdef WIZ_BUILD - u8 *clock_speed_options[] = - { - "300MHz", "333MHz", "366MHz", "400MHz", "433MHz", - "466MHz", "500MHz", "533MHz", "566MHz", "600MHz", - "633MHz", "666MHz", "700MHz", "733MHz", "766MHz", - "800MHz", "833MHz", "866MHz", "900MHz" - }; -#elif defined(GP2X_BUILD) - u8 *clock_speed_options[] = - { - "150MHz", "160MHz", "170MHz", "180MHz", "190MHz", - "200MHz", "210MHz", "220MHz", "230MHz", "240MHz", - "250MHz", "260MHz", "270MHz", "280MHz", "290MHz" - }; -#else - u8 *clock_speed_options[] = - { - "33MHz", "66MHz", "100MHz", "133MHz", "166MHz", "200MHz", "233MHz", - "266MHz", "300MHz", "333MHz" - }; -#endif - u8 *gamepad_config_buttons[] = { "UP", @@ -1260,11 +1313,7 @@ u32 menu(u16 *original_screen) { string_selection_option(NULL, "Display scaling", scale_options, (u32 *)(&screen_scale), -#ifdef WIZ_BUILD - 2, -#else - 3, -#endif + sizeof(scale_options) / sizeof(scale_options[0]), #ifndef GP2X_BUILD "Determines how the GBA screen is resized in relation to the entire\n" "screen. Select unscaled 3:2 for GBA resolution, scaled 3:2 for GBA\n" @@ -1554,14 +1603,7 @@ u32 menu(u16 *original_screen) } } - get_clock_speed_number(); - if (clock_speed_number < 0 || clock_speed_number >= - sizeof(clock_speed_options) / sizeof(clock_speed_options[0])) - { - clock_speed = default_clock_speed; - get_clock_speed_number(); - } - + menu_update_clock(); video_resolution_large(); #ifndef GP2X_BUILD @@ -1578,7 +1620,7 @@ u32 menu(u16 *original_screen) first_load = 1; memset(original_screen, 0x00, 240 * 160 * 2); print_string_ext("No game loaded yet.", 0xFFFF, 0x0000, - 60, 75,original_screen, 240, 0); + 60, 75,original_screen, 240, 0, 0, FONT_HEIGHT); } choose_menu(&main_menu); @@ -1624,12 +1666,12 @@ u32 menu(u16 *original_screen) if(display_option == current_option) { print_string_pad(line_buffer, COLOR_ACTIVE_ITEM, COLOR_BG, 10, - (display_option->line_number * 10) + 40, 36); + (display_option->line_number * 10) + 40, 41); } else { print_string_pad(line_buffer, COLOR_INACTIVE_ITEM, COLOR_BG, 10, - (display_option->line_number * 10) + 40, 36); + (display_option->line_number * 10) + 40, 41); } } @@ -1710,20 +1752,11 @@ u32 menu(u16 *original_screen) set_gba_resolution(screen_scale); video_resolution_small(); - - get_clock_speed(); - if (clock_speed != clock_speed_old) - { - printf("about to set CPU clock to %iMHz\n", clock_speed); - #ifdef PSP_BUILD - scePowerSetClockFrequency(clock_speed, clock_speed, clock_speed / 2); - #elif defined(GP2X_BUILD) - set_FCLK(clock_speed); - #endif - clock_speed_old = clock_speed; - } + menu_get_clock_speed(); + set_clock_speed(); SDL_PauseAudio(0); + num_skipped_frames = 100; return return_value; }