diff --git a/Readme.txt b/Readme.txt index 21fedb1..f6c434a 100755 --- a/Readme.txt +++ b/Readme.txt @@ -111,6 +111,11 @@ Square = Backspace Triangle = Toggle Shift CHANGELOG: +1.54 + +- more choices for setting mouse speeds in steps of 0.25 now +- a button can be mapped to "slow mouse" in custom controls. When that button is held down, the mouse pointer speed is greatly reduced. This is useful for precisely positioning the cursor. + 1.53 - fix analog stick angular zone sizes (22.5 degrees now) diff --git a/src/gp2x/menu/menu.h b/src/gp2x/menu/menu.h index c469a55..7f0c0ef 100755 --- a/src/gp2x/menu/menu.h +++ b/src/gp2x/menu/menu.h @@ -69,7 +69,7 @@ enum { MEMDISK_MENU_CASE_MAIN, MEMDISK_MENU_CASE_MISC }; #define M68020 020 #define DEFAULT_STATUSLN 0 -#define DEFAULT_MOUSEMULTIPLIER 2 +#define DEFAULT_MOUSEMULTIPLIER 100 #define DEFAULT_SOUND 1 #define DEFAULT_AUTOSAVE 1 #define DEFAULT_SYSTEMCLOCK 0 diff --git a/src/gp2x/menu/menu_config.cpp b/src/gp2x/menu/menu_config.cpp index b0eed0d..d9108f8 100755 --- a/src/gp2x/menu/menu_config.cpp +++ b/src/gp2x/menu/menu_config.cpp @@ -1351,7 +1351,16 @@ void loadconfig(int general) #endif fscanf(f,"showstatus=%d\n",&mainMenu_showStatus); fscanf(f,"background=%d\n",&mainMenu_background); - fscanf(f,"mousemultiplier=%d\n",&mainMenu_mouseMultiplier ); + fscanf(f,"mousemultiplier=%d\n",&mainMenu_mouseMultiplier); + //remain compatible with old configuration versions + if (mainMenu_mouseMultiplier < 10) { + if (mainMenu_mouseMultiplier == 1 || mainMenu_mouseMultiplier == 2 || mainMenu_mouseMultiplier == 4) { + mainMenu_mouseMultiplier *= 100; + } + else { + mainMenu_mouseMultiplier = DEFAULT_MOUSEMULTIPLIER; + } + } fscanf(f,"mouseemulation=%d\n",&mainMenu_mouseEmulation ); #if defined(PANDORA) || defined(ANDROIDSDL) fscanf(f,"systemclock=%d\n",&dummy); // mainMenu_throttle never changes -> removed diff --git a/src/gp2x/menu/menu_controls.cpp b/src/gp2x/menu/menu_controls.cpp index cc8fb0c..17d4ef0 100755 --- a/src/gp2x/menu/menu_controls.cpp +++ b/src/gp2x/menu/menu_controls.cpp @@ -28,7 +28,7 @@ #endif #define MAX_CUSTOM_ID 96 -#define MIN_CUSTOM_ID -12 +#define MIN_CUSTOM_ID -13 const char *text_str_controls_separator="----------------------------------"; const char *text_str_controls_title= " Custom Controls -"; @@ -70,6 +70,7 @@ static void getMapping(int customId) { switch(customId) { + case -13: strcpy(mapping, "Slow Down Mouse"); break; case -12: strcpy(mapping, "2nd Joystick RIGHT"); break; case -11: strcpy(mapping, "2nd Joystick LEFT"); break; case -10: strcpy(mapping, "2nd Joystick DOWN"); break; @@ -181,6 +182,7 @@ static void getMapping(int customId) case 96: strcpy(mapping, "F10"); } /* + -13 slow mouse modifier -12 2nd joy right -11 2nd joy left -10 2nd joy down diff --git a/src/gp2x/menu/menu_misc.cpp b/src/gp2x/menu/menu_misc.cpp index f4aba49..bcbb5c7 100755 --- a/src/gp2x/menu/menu_misc.cpp +++ b/src/gp2x/menu/menu_misc.cpp @@ -41,11 +41,6 @@ static const char *text_str_normal="normal"; static const char *text_str_short="short"; static const char *text_str_none="no"; static const char *text_str_mouse_multiplier="Mouse Speed"; -static const char *text_str_025x=".25"; -static const char *text_str_05x=".5"; -static const char *text_str_1x="1x"; -static const char *text_str_2x="2x"; -static const char *text_str_4x="4x"; int menuMisc = 0; extern int kickstart; @@ -411,30 +406,12 @@ static void draw_miscMenu(int c) menuLine+=2; write_text(leftMargin,menuLine,text_str_mouse_multiplier); - if ((mainMenu_mouseMultiplier==25)&&((menuMisc!=MENUMISC_MOUSEMULTIPLIER)||(bb))) - write_text_inv(tabstop2,menuLine,text_str_025x); - else - write_text(tabstop2,menuLine,text_str_025x); - - if ((mainMenu_mouseMultiplier==50)&&((menuMisc!=MENUMISC_MOUSEMULTIPLIER)||(bb))) - write_text_inv(tabstop4,menuLine,text_str_05x); - else - write_text(tabstop4,menuLine,text_str_05x); - - if ((mainMenu_mouseMultiplier==1)&&((menuMisc!=MENUMISC_MOUSEMULTIPLIER)||(bb))) - write_text_inv(tabstop6,menuLine,text_str_1x); - else - write_text(tabstop6,menuLine,text_str_1x); - - if ((mainMenu_mouseMultiplier==2)&&((menuMisc!=MENUMISC_MOUSEMULTIPLIER)||(bb))) - write_text_inv(tabstop8,menuLine,text_str_2x); + snprintf((char*)cpuSpeed, 8, "%4.2f", mainMenu_mouseMultiplier/100.0f); + if ((menuMisc!=MENUMISC_MOUSEMULTIPLIER)||(bb)) + write_text_inv(tabstop2,menuLine,cpuSpeed); else - write_text(tabstop8,menuLine,text_str_2x); + write_text(tabstop2,menuLine,cpuSpeed); - if ((mainMenu_mouseMultiplier==4)&&((menuMisc!=MENUMISC_MOUSEMULTIPLIER)||(bb))) - write_text_inv(tabstop9+2,menuLine,text_str_4x); - else - write_text(tabstop9+2,menuLine,text_str_4x); #ifndef __PSP2__ // MENUMISC_STYLUSOFFSET menuLine+=2; @@ -789,29 +766,17 @@ static int key_miscMenu(int *c) case MENUMISC_MOUSEMULTIPLIER: if (left) { - if (mainMenu_mouseMultiplier == 4) - mainMenu_mouseMultiplier = 2; - else if (mainMenu_mouseMultiplier == 2) - mainMenu_mouseMultiplier = 1; - else if (mainMenu_mouseMultiplier == 1) - mainMenu_mouseMultiplier = 50; - else if (mainMenu_mouseMultiplier == 50) + if (mainMenu_mouseMultiplier <= 50) mainMenu_mouseMultiplier = 25; else - mainMenu_mouseMultiplier = 4; + mainMenu_mouseMultiplier -= 25; } else if (right) { - if (mainMenu_mouseMultiplier == 4) - mainMenu_mouseMultiplier = 25; - else if (mainMenu_mouseMultiplier == 2) - mainMenu_mouseMultiplier = 4; - else if (mainMenu_mouseMultiplier == 1) - mainMenu_mouseMultiplier = 2; - else if (mainMenu_mouseMultiplier == 50) - mainMenu_mouseMultiplier = 1; + if (mainMenu_mouseMultiplier >= 375) + mainMenu_mouseMultiplier = 400; else - mainMenu_mouseMultiplier = 50; + mainMenu_mouseMultiplier += 25; } break; #ifndef __PSP2__ diff --git a/src/menu_guichan/menuTabControl.cpp b/src/menu_guichan/menuTabControl.cpp index e0d3325..59765d2 100755 --- a/src/menu_guichan/menuTabControl.cpp +++ b/src/menu_guichan/menuTabControl.cpp @@ -177,11 +177,11 @@ class MouseMultActionListener : public gcn::ActionListener else if (actionEvent.getSource() == radioButton_mouseMultiplier_50) mainMenu_mouseMultiplier=50; else if (actionEvent.getSource() == radioButton_mouseMultiplier_1) - mainMenu_mouseMultiplier=1; + mainMenu_mouseMultiplier=100; else if (actionEvent.getSource() == radioButton_mouseMultiplier_2) - mainMenu_mouseMultiplier=2; + mainMenu_mouseMultiplier=200; else if (actionEvent.getSource() == radioButton_mouseMultiplier_4) - mainMenu_mouseMultiplier=4; + mainMenu_mouseMultiplier=400; } }; MouseMultActionListener* mouseMultActionListener; @@ -482,11 +482,11 @@ void show_settings_TabControl() radioButton_mouseMultiplier_25->setSelected(true); else if (mainMenu_mouseMultiplier==50) radioButton_mouseMultiplier_50->setSelected(true); - else if (mainMenu_mouseMultiplier==1) + else if (mainMenu_mouseMultiplier==100) radioButton_mouseMultiplier_1->setSelected(true); - else if (mainMenu_mouseMultiplier==2) + else if (mainMenu_mouseMultiplier==200) radioButton_mouseMultiplier_2->setSelected(true); - else if (mainMenu_mouseMultiplier==4) + else if (mainMenu_mouseMultiplier==400) radioButton_mouseMultiplier_4->setSelected(true); if (mainMenu_tapDelay==10) diff --git a/src/od-joy.cpp b/src/od-joy.cpp index 5f514d7..2ff62dc 100755 --- a/src/od-joy.cpp +++ b/src/od-joy.cpp @@ -86,8 +86,11 @@ void read_joystick(int nr, unsigned int *dir, int *button) // are we trying to figure out the regular GP2X controls for the primary (or both) joysticks? int usingRegularControls = (!mainMenu_customControls) && ((mainMenu_joyPort == 0) || (nr == 1 && mainMenu_joyPort == 2) || (nr == 0 && mainMenu_joyPort == 1)); - + //In every frame, UAE calls this function twice, once with nr=0, then again with nr=1 + //only update all joysticks on first call + if (nr==0) { SDL_JoystickUpdate (); + } /* Temporary disabled #ifdef ANDROIDSDL if (nr_joysticks > 2) @@ -105,9 +108,37 @@ void read_joystick(int nr, unsigned int *dir, int *button) } #endif */ - int mouseScale = mainMenu_mouseMultiplier * 4 * 16; - if (mouseScale > (99*16)) - mouseScale /= 100; + int mouseScale = mainMenu_mouseMultiplier * 8 * 16; + mouseScale /= 100; + //slow down mouse motion if custom "slow mouse" button is held + if(mainMenu_customControls) + { + for (int i=0; i= deadZone) + { + scalingFactor=1.0f/magnitude*(magnitude-deadZone)/(32769.0f-deadZone); + analogX = analogX * scalingFactor; + analogY = analogY * scalingFactor; + lastmx += (int) (analogX * mouseScale); + lastmy += (int) (analogY * mouseScale); + newmousecounters=1; + } } else { - analogX=(float) rAnalogX; - analogY=(float) rAnalogY; - } - //radial and scaled deadzone - //http://www.third-helix.com/2013/04/12/doing-thumbstick-dead-zones-right.html - //max movement is mouseScale. - //that way, when in one of the other mouse modes, - //the Y button to change scale still works - magnitude=sqrt(analogX*analogX+analogY*analogY); - if (magnitude >= deadZone) - { - scalingFactor=1.0f/magnitude*(magnitude-deadZone)/(32769.0f-deadZone); - analogX = analogX * scalingFactor; - analogY = analogY * scalingFactor; - lastmx += (int) (analogX * mouseScale); - lastmy += (int) (analogY * mouseScale); - newmousecounters=1; + newmousecounters=0; } } - else - { - newmousecounters=0; - } #endif //__PSP2__ -#ifdef USE_UAE4ALL_VKBD - } -#endif #ifdef USE_UAE4ALL_VKBD if(mainMenu_customControls && !vkbd_mode) @@ -424,7 +458,6 @@ void read_joystick(int nr, unsigned int *dir, int *button) *button |= 1 << 1; } } - delay++; } } } diff --git a/src/sdlgfx.cpp b/src/sdlgfx.cpp index f1c7d6a..6edfc53 100755 --- a/src/sdlgfx.cpp +++ b/src/sdlgfx.cpp @@ -794,9 +794,8 @@ void handle_events (void) } else { - int mouseScale = mainMenu_mouseMultiplier * 4 *16; - if (mouseScale > 99*16) - mouseScale /= 100; + int mouseScale = mainMenu_mouseMultiplier * 8 * 16; + mouseScale /= 100; lastmx += rEvent.motion.xrel * mouseScale; lastmy += rEvent.motion.yrel * mouseScale;