Skip to content

Commit

Permalink
more mouse speeds, add "slow mouse" modifier to custom controls
Browse files Browse the repository at this point in the history
  • Loading branch information
rsn8887 committed Dec 14, 2017
1 parent 3af1ace commit 31853a7
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 103 deletions.
5 changes: 5 additions & 0 deletions Readme.txt
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion src/gp2x/menu/menu.h
Expand Up @@ -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
Expand Down
11 changes: 10 additions & 1 deletion src/gp2x/menu/menu_config.cpp
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion src/gp2x/menu/menu_controls.cpp
Expand Up @@ -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 -";
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
53 changes: 9 additions & 44 deletions src/gp2x/menu/menu_misc.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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__
Expand Down
12 changes: 6 additions & 6 deletions src/menu_guichan/menuTabControl.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down
127 changes: 80 additions & 47 deletions src/od-joy.cpp
Expand Up @@ -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)
Expand All @@ -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<nr_joysticks; i++)
{
if(
(
(mainMenu_custom_A[i]==-13 && buttonA[i]) ||
(mainMenu_custom_B[i]==-13 && buttonB[i]) ||
(mainMenu_custom_X[i]==-13 && buttonX[i]) ||
(mainMenu_custom_Y[i]==-13 && buttonY[i]) ||
(mainMenu_custom_L[i]==-13 && triggerL[i]) ||
(mainMenu_custom_R[i]==-13 && triggerR[i])
) ||
(
(mainMenu_custom_dpad == 0) &&
(
(mainMenu_custom_up[i]==-13 && dpadUp[i]) ||
(mainMenu_custom_down[i]==-13 && dpadDown[i]) ||
(mainMenu_custom_left[i]==-13 && dpadLeft[i]) ||
(mainMenu_custom_right[i]==-13 && dpadRight[i]))
)
)
{
mouseScale/=8;
break;
}
}
}

//Digital mouseemu hotkeys: Triangle changes mouse speed etc.
#if !defined(__PSP2__) && defined(USE_UAE4ALL_VKBD)
Expand All @@ -126,8 +157,10 @@ void read_joystick(int nr, unsigned int *dir, int *button)
#endif
#endif
{
if (buttonY[0])
if (buttonY[0]) {
mouseScale = mainMenu_mouseMultiplier * 16;
mouseScale /= 100;
}
#if defined(PANDORA) || defined(ANDROIDSDL)
if (dpadLeft[0])
#else
Expand Down Expand Up @@ -244,57 +277,58 @@ void read_joystick(int nr, unsigned int *dir, int *button)
}
}


//Analog Mouse
//Analog Mouse on PSP2, only update once per frame (when nr==1)
#ifdef __PSP2__
#ifdef USE_UAE4ALL_VKBD
if (!vkbd_mode) {
if (!vkbd_mode && nr)
#else
if (nr)
#endif
#ifdef __PSP2__
//VITA: always use an analog stick (default: right stick) for mouse pointer movements
//here we are using a small deadzone
//This can be disabled in the menu because it interferes with Joystick Port 0
if (mainMenu_mouseEmulation)
{
float analogX=0.0f;
float analogY=0.0f;
float deadZone=(float) mainMenu_deadZone;
float scalingFactor=1.0f;
float magnitude=0.0f;

if (mainMenu_leftStickMouse)
//VITA: always use an analog stick (default: right stick) for mouse pointer movements
//here we are using a small deadzone
//This can be disabled in the menu because it interferes with Joystick Port 0
if (mainMenu_mouseEmulation)
{
analogX=(float) lAnalogX;
analogY=(float) lAnalogY;
float analogX=0.0f;
float analogY=0.0f;
float deadZone=(float) mainMenu_deadZone;
float scalingFactor=1.0f;
float magnitude=0.0f;
float slowdownFactor=1.0f;

if (mainMenu_leftStickMouse)
{
analogX=(float) lAnalogX;
analogY=(float) lAnalogY;
}
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;
}
}
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)
Expand Down Expand Up @@ -424,7 +458,6 @@ void read_joystick(int nr, unsigned int *dir, int *button)
*button |= 1 << 1;
}
}
delay++;
}
}
}
Expand Down
5 changes: 2 additions & 3 deletions src/sdlgfx.cpp
Expand Up @@ -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;
Expand Down

0 comments on commit 31853a7

Please sign in to comment.