From 3e98b9b6e641910913fbba43f70dafeeb86b2373 Mon Sep 17 00:00:00 2001 From: rsn8887 Date: Wed, 28 Dec 2016 17:33:27 -0600 Subject: [PATCH] Vita: - virtual keyboard transparency adjust now toggles between four values, two of which cause zero slow-down when keyboard is displayed. - resolution quick switch with R+Start+Dpad left/right is now more responsive --- CMakeLists.txt | 22 ++++++++ psp2data/data/vkbdLargeShift_German.bmp | Bin 21976 -> 0 bytes psp2data/data/vkbdLarge_German.bmp | Bin 21976 -> 0 bytes src/gui.cpp | 72 ++++++++++++++---------- src/od-joy.cpp | 14 ++++- src/vkbd/vkbd.cpp | 64 +++++++++++++++++---- 6 files changed, 129 insertions(+), 43 deletions(-) delete mode 100644 psp2data/data/vkbdLargeShift_German.bmp delete mode 100644 psp2data/data/vkbdLarge_German.bmp diff --git a/CMakeLists.txt b/CMakeLists.txt index 10fdcac..c4690b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,20 @@ set(CMAKE_CXX_COMPILER "${VITASDK}/bin/arm-vita-eabi-g++") set(CMAKE_C_FLAGS "-Wl,-q" CACHE STRING "C flags") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "C++ flags") +#There are two optional assembler optimizations that were used on the Pandora: +#-DUSE_ARMV7 +#(use assembler-optimized "arm_memset" and "arm_memcpy" routines +#in "gp2x/memset.s" and "gp2x/memcpy.s") +#-DUSE_ARMNEON +#(use assembler-optimized drawing routines for the line drawing of Amiga screens +#in "neon_helper.s") +#Currently, these compile for the Vita but cause a crash on first leaving the menu +#I suspect these have to be re-written for the Vita CPU to make use of asm-optimization +# +#enable_language(ASM) +#set(CMAKE_ASM_COMPILER "${VITASDK}/bin/arm-vita-eabi-g++") +#set(CMAKE_ASM_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "ASM flags") + execute_process(COMMAND "date" "+%Y.%m.%d" OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) project(uae4all2) @@ -41,6 +55,8 @@ set(FLAGS -DUSE_UAE4ALL_VKBD -DVKBD_ALWAYS -DLARGEKEYBOARD +#-DUSE_ARMV7 +#-DUSE_ARMNEON -fomit-frame-pointer -Wno-unused -Wno-format -ffast-math -fstrict-aliasing -mstructure-size-boundary=32 -fexpensive-optimizations -fweb -frename-registers -fomit-frame-pointer @@ -56,6 +72,9 @@ set(DEBUG_FLAGS -DUSE_SDL -DGCCCONSTFUNC="__attribute__\(\(const\)\)" -DUSE_UNDERSCORE -DSHM_SUPPORT_LINKS=0 -DUNALIGNED_PROFITABLE -DOPTIMIZED_FLAGS -DOS_WITHOUT_MEMORY_MANAGEMENT -DROM_PATH_PREFIX=\"ux0:/data/uae4all/roms/\" -DDATA_PREFIX=\"app0:/data/\" -DSAVE_PREFIX=\"ux0:/data/uae4all/saves/\" +-DUSE_UAE4ALL_VKBD +-DVKBD_ALWAYS +-DLARGEKEYBOARD -DDEBUG -DDEBUG_UAE4ALL -DUAE_CONSOLE ) @@ -64,6 +83,9 @@ set(SRC_FILES src/psp2/psp2_input.c src/psp2/psp2-dirent.c src/vkbd/vkbd.cpp +# src/neon_helper.s +# src/gp2x/memset.s +# src/gp2x/memcpy.s src/audio.cpp src/autoconf.cpp src/blitfunc.cpp diff --git a/psp2data/data/vkbdLargeShift_German.bmp b/psp2data/data/vkbdLargeShift_German.bmp deleted file mode 100644 index 7faa00c8221d7428130cf2a9fb6fb3b4bacd508a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21976 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 diff --git a/src/gui.cpp b/src/gui.cpp index c0863c3..c7ca175 100755 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -76,13 +76,14 @@ extern SDL_Joystick *uae4all_joy0, *uae4all_joy1; #ifdef __PSP2__ //Predefined quick switch resolutions to select via TRIGGER R+START+DPAD LEFT/RIGHT -int quickSwitchModeID=8; +static int can_change_quickSwitchModeID = 1; +static int quickSwitchModeID=1; struct myRes { int num_lines; int top_pos; }; -myRes quickSwitchModes[] = { +static myRes quickSwitchModes[] = { {192, 0}, {200, 0}, {216, 0}, @@ -758,21 +759,25 @@ if(!vkbd_mode) #ifdef __PSP2__ // Change zoom: // quickSwitch resolution presets - if (quickSwitchModeID==0) + if (can_change_quickSwitchModeID) { - quickSwitchModeID=sizeof(quickSwitchModes)/sizeof(quickSwitchModes[0])-1; - } - else - { - quickSwitchModeID--; + if (quickSwitchModeID==0) + { + quickSwitchModeID=sizeof(quickSwitchModes)/sizeof(quickSwitchModes[0])-1; + } + else + { + quickSwitchModeID--; + } + mainMenu_displayedLines = + quickSwitchModes[quickSwitchModeID].num_lines; + moveY = + quickSwitchModes[quickSwitchModeID].top_pos; + getChanges(); + check_all_prefs(); + update_display(); + can_change_quickSwitchModeID=0; } - mainMenu_displayedLines = - quickSwitchModes[quickSwitchModeID].num_lines; - moveY = - quickSwitchModes[quickSwitchModeID].top_pos; - getChanges(); - check_all_prefs(); - update_display(); #else screenWidth -=10; if(screenWidth<200) @@ -784,21 +789,26 @@ if(!vkbd_mode) else if(dpadRight) { #ifdef __PSP2__ - if (quickSwitchModeID==sizeof(quickSwitchModes)/sizeof(quickSwitchModes[0])-1) - { - quickSwitchModeID=0; - } - else - { - quickSwitchModeID++; + if (can_change_quickSwitchModeID) + { + + if (quickSwitchModeID==sizeof(quickSwitchModes)/sizeof(quickSwitchModes[0])-1) + { + quickSwitchModeID=0; + } + else + { + quickSwitchModeID++; + } + mainMenu_displayedLines = + quickSwitchModes[quickSwitchModeID].num_lines; + moveY = + quickSwitchModes[quickSwitchModeID].top_pos; + getChanges(); + check_all_prefs(); + update_display(); + can_change_quickSwitchModeID = 0; } - mainMenu_displayedLines = - quickSwitchModes[quickSwitchModeID].num_lines; - moveY = - quickSwitchModes[quickSwitchModeID].top_pos; - getChanges(); - check_all_prefs(); - update_display(); #else screenWidth +=10; if(screenWidth>800) @@ -806,6 +816,10 @@ if(!vkbd_mode) update_display(); #endif } + else if (!can_change_quickSwitchModeID) + { + can_change_quickSwitchModeID = 1; + } //1 else if(keystate[SDLK_1]) { diff --git a/src/od-joy.cpp b/src/od-joy.cpp index 68edc88..ca249e6 100755 --- a/src/od-joy.cpp +++ b/src/od-joy.cpp @@ -23,6 +23,7 @@ #ifdef USE_UAE4ALL_VKBD #include "vkbd.h" +static int can_change_vkbd_transparency=1; #endif #ifdef ANDROIDSDL @@ -339,7 +340,11 @@ void read_joystick(int nr, unsigned int *dir, int *button) else if (buttonStart && (dpadLeft || left)) #endif { - vkbd_transparency_up(); + if (can_change_vkbd_transparency) + { + vkbd_transparency_up(); + can_change_vkbd_transparency=0; + } } #ifdef __PSP2__ else if (rAnalogX > 1024*10) @@ -347,10 +352,15 @@ void read_joystick(int nr, unsigned int *dir, int *button) else if (buttonStart && (dpadRight || right)) #endif { - vkbd_transparency_down(); + if (can_change_vkbd_transparency) + { + vkbd_transparency_down(); + can_change_vkbd_transparency=0; + } } else { + can_change_vkbd_transparency=1; if (left || dpadLeft) vkbd_move |= VKBD_LEFT; else diff --git a/src/vkbd/vkbd.cpp b/src/vkbd/vkbd.cpp index 8f79f08..ad70413 100755 --- a/src/vkbd/vkbd.cpp +++ b/src/vkbd/vkbd.cpp @@ -437,32 +437,72 @@ void vkbd_redraw(void) void vkbd_transparency_up(void) { - if (vkbd_transparency>53) - vkbd_transparency-=4; - else - vkbd_transparency=50; - SDL_SetAlpha(ksur, SDL_SRCALPHA | SDL_RLEACCEL, vkbd_transparency); + switch (vkbd_transparency) + { + case 255: + vkbd_transparency=192; + break; + case 192: + vkbd_transparency=128; + break; + case 128: + vkbd_transparency=64; + break; + case 64: + vkbd_transparency=255; + break; + default: + vkbd_transparency=64; + break; + } + if (vkbd_transparency != 255) + { + SDL_SetAlpha(ksur, SDL_SRCALPHA | SDL_RLEACCEL, vkbd_transparency); #ifdef LARGEKEYBOARD - SDL_SetAlpha(ksurShift, SDL_SRCALPHA | SDL_RLEACCEL, vkbd_transparency); + SDL_SetAlpha(ksurShift, SDL_SRCALPHA | SDL_RLEACCEL, vkbd_transparency); #endif + } + else //fully opague + { + SDL_SetAlpha(ksur, 0, 255); +#ifdef LARGEKEYBOARD + SDL_SetAlpha(ksurShift, 0, 255); +#endif + } } void vkbd_transparency_down(void) { - if (vkbd_transparency<252) + switch (vkbd_transparency) + { + case 255: + vkbd_transparency=64; + break; + case 192: + vkbd_transparency=255; + break; + case 128: + vkbd_transparency=192; + break; + case 64: + vkbd_transparency=128; + break; + default: + vkbd_transparency=255; + break; + } + if (vkbd_transparency != 255) { - vkbd_transparency+=4; //some transparency SDL_SetAlpha(ksur, SDL_SRCALPHA | SDL_RLEACCEL, vkbd_transparency); #ifdef LARGEKEYBOARD SDL_SetAlpha(ksurShift, SDL_SRCALPHA | SDL_RLEACCEL, vkbd_transparency); #endif } - else + else //fully opague { - vkbd_transparency=255; //fully opaque - SDL_SetAlpha(ksur, 0, vkbd_transparency); + SDL_SetAlpha(ksur, 0, 255); #ifdef LARGEKEYBOARD - SDL_SetAlpha(ksurShift, 0, vkbd_transparency); + SDL_SetAlpha(ksurShift, 0, 255); #endif } }