This commit is contained in:
twinaphex 2016-02-26 21:43:20 +01:00
parent 6aa2fbea47
commit 13a3bfeee7
2 changed files with 57 additions and 59 deletions

View File

@ -47,13 +47,15 @@
enum menu_mouse_action enum menu_mouse_action
{ {
MOUSE_ACTION_NONE = 0, MENU_MOUSE_ACTION_NONE = 0,
MOUSE_ACTION_BUTTON_L, MENU_MOUSE_ACTION_BUTTON_L,
MOUSE_ACTION_BUTTON_L_TOGGLE, MENU_MOUSE_ACTION_BUTTON_L_TOGGLE,
MOUSE_ACTION_BUTTON_L_SET_NAVIGATION, MENU_MOUSE_ACTION_BUTTON_L_SET_NAVIGATION,
MOUSE_ACTION_BUTTON_R, MENU_MOUSE_ACTION_BUTTON_R,
MOUSE_ACTION_WHEEL_UP, MENU_MOUSE_ACTION_WHEEL_UP,
MOUSE_ACTION_WHEEL_DOWN MENU_MOUSE_ACTION_WHEEL_DOWN,
MENU_MOUSE_ACTION_HORIZ_WHEEL_UP,
MENU_MOUSE_ACTION_HORIZ_WHEEL_DOWN
}; };
struct menu_bind_state_port struct menu_bind_state_port
@ -85,18 +87,14 @@ struct menu_bind_state
bool skip; bool skip;
}; };
typedef struct menu_input_mouse
{
bool hwheelup;
bool hwheeldown;
unsigned ptr;
} menu_input_mouse_t;
typedef struct menu_input typedef struct menu_input
{ {
struct menu_bind_state binds; struct menu_bind_state binds;
menu_input_mouse_t mouse; struct
{
unsigned ptr;
} mouse;
struct struct
{ {
@ -821,34 +819,6 @@ bool menu_input_ctl(enum menu_input_ctl_state state, void *data)
return true; return true;
} }
static int menu_input_mouse(unsigned *action)
{
menu_input_t *menu_input = menu_input_get_ptr();
if (menu_input->mouse.hwheeldown)
{
*action = MENU_ACTION_LEFT;
menu_input->mouse.hwheeldown = false;
return 0;
}
if (menu_input->mouse.hwheelup)
{
*action = MENU_ACTION_RIGHT;
menu_input->mouse.hwheelup = false;
return 0;
}
menu_input->mouse.hwheelup = input_driver_state(
NULL, 0, RETRO_DEVICE_MOUSE,
0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP);
menu_input->mouse.hwheeldown = input_driver_state(
NULL, 0, RETRO_DEVICE_MOUSE,
0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN);
return 0;
}
static int menu_input_pointer(unsigned *action) static int menu_input_pointer(unsigned *action)
{ {
unsigned fb_width, fb_height; unsigned fb_width, fb_height;
@ -892,7 +862,8 @@ static int menu_input_mouse_frame(
menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection); menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection);
if (BIT64_GET(input_mouse, MOUSE_ACTION_BUTTON_L))
if (BIT64_GET(input_mouse, MENU_MOUSE_ACTION_BUTTON_L))
{ {
menu_ctx_pointer_t point; menu_ctx_pointer_t point;
@ -908,24 +879,34 @@ static int menu_input_mouse_frame(
ret = point.retcode; ret = point.retcode;
} }
if (BIT64_GET(input_mouse, MOUSE_ACTION_BUTTON_R)) if (BIT64_GET(input_mouse, MENU_MOUSE_ACTION_BUTTON_R))
{ {
menu_entries_pop_stack(&selection, 0); menu_entries_pop_stack(&selection, 0);
menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &selection); menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &selection);
} }
if (BIT64_GET(input_mouse, MOUSE_ACTION_WHEEL_DOWN)) if (BIT64_GET(input_mouse, MENU_MOUSE_ACTION_WHEEL_DOWN))
{ {
unsigned increment_by = 1; unsigned increment_by = 1;
menu_navigation_ctl(MENU_NAVIGATION_CTL_INCREMENT, &increment_by); menu_navigation_ctl(MENU_NAVIGATION_CTL_INCREMENT, &increment_by);
} }
if (BIT64_GET(input_mouse, MOUSE_ACTION_WHEEL_UP)) if (BIT64_GET(input_mouse, MENU_MOUSE_ACTION_WHEEL_UP))
{ {
unsigned decrement_by = 1; unsigned decrement_by = 1;
menu_navigation_ctl(MENU_NAVIGATION_CTL_DECREMENT, &decrement_by); menu_navigation_ctl(MENU_NAVIGATION_CTL_DECREMENT, &decrement_by);
} }
if (BIT64_GET(input_mouse, MENU_MOUSE_ACTION_HORIZ_WHEEL_UP))
{
/* stub */
}
if (BIT64_GET(input_mouse, MENU_MOUSE_ACTION_HORIZ_WHEEL_DOWN))
{
/* stub */
}
return ret; return ret;
} }
@ -936,7 +917,8 @@ static int menu_input_mouse_post_iterate(uint64_t *input_mouse,
static bool mouse_oldleft = false; static bool mouse_oldleft = false;
static bool mouse_oldright = false; static bool mouse_oldright = false;
*input_mouse = MOUSE_ACTION_NONE; *input_mouse = MENU_MOUSE_ACTION_NONE;
if ( if (
!settings->menu.mouse.enable !settings->menu.mouse.enable
@ -961,7 +943,7 @@ static int menu_input_mouse_post_iterate(uint64_t *input_mouse,
menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection); menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection);
menu_display_ctl(MENU_DISPLAY_CTL_HEADER_HEIGHT, &header_height); menu_display_ctl(MENU_DISPLAY_CTL_HEADER_HEIGHT, &header_height);
BIT64_SET(*input_mouse, MOUSE_ACTION_BUTTON_L); BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_BUTTON_L);
mouse_oldleft = true; mouse_oldleft = true;
@ -974,11 +956,11 @@ static int menu_input_mouse_post_iterate(uint64_t *input_mouse,
} }
if ((menu_input->mouse.ptr == selection) && cbs && cbs->action_select) if ((menu_input->mouse.ptr == selection) && cbs && cbs->action_select)
{ {
BIT64_SET(*input_mouse, MOUSE_ACTION_BUTTON_L_TOGGLE); BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_BUTTON_L_TOGGLE);
} }
else if (menu_input->mouse.ptr <= (menu_entries_get_size() - 1)) else if (menu_input->mouse.ptr <= (menu_entries_get_size() - 1))
{ {
BIT64_SET(*input_mouse, MOUSE_ACTION_BUTTON_L_SET_NAVIGATION); BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_BUTTON_L_SET_NAVIGATION);
} }
} }
} }
@ -990,7 +972,7 @@ static int menu_input_mouse_post_iterate(uint64_t *input_mouse,
if (!mouse_oldright) if (!mouse_oldright)
{ {
mouse_oldright = true; mouse_oldright = true;
BIT64_SET(*input_mouse, MOUSE_ACTION_BUTTON_R); BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_BUTTON_R);
} }
} }
else else
@ -998,12 +980,22 @@ static int menu_input_mouse_post_iterate(uint64_t *input_mouse,
if (menu_input_mouse_state(MENU_MOUSE_WHEEL_DOWN)) if (menu_input_mouse_state(MENU_MOUSE_WHEEL_DOWN))
{ {
BIT64_SET(*input_mouse, MOUSE_ACTION_WHEEL_DOWN); BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_WHEEL_DOWN);
} }
if (menu_input_mouse_state(MENU_MOUSE_WHEEL_UP)) if (menu_input_mouse_state(MENU_MOUSE_WHEEL_UP))
{ {
BIT64_SET(*input_mouse, MOUSE_ACTION_WHEEL_UP); BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_WHEEL_UP);
}
if (menu_input_mouse_state(MENU_MOUSE_HORIZ_WHEEL_DOWN))
{
BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_HORIZ_WHEEL_DOWN);
}
if (menu_input_mouse_state(MENU_MOUSE_HORIZ_WHEEL_UP))
{
BIT64_SET(*input_mouse, MENU_MOUSE_ACTION_HORIZ_WHEEL_UP);
} }
return 0; return 0;
@ -1064,6 +1056,12 @@ int16_t menu_input_mouse_state(enum menu_input_mouse_state state)
case MENU_MOUSE_WHEEL_DOWN: case MENU_MOUSE_WHEEL_DOWN:
type = RETRO_DEVICE_ID_MOUSE_WHEELDOWN; type = RETRO_DEVICE_ID_MOUSE_WHEELDOWN;
break; break;
case MENU_MOUSE_HORIZ_WHEEL_UP:
type = RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP;
break;
case MENU_MOUSE_HORIZ_WHEEL_DOWN:
type = RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN;
break;
default: default:
return 0; return 0;
} }
@ -1229,10 +1227,8 @@ static unsigned menu_input_frame_pointer(unsigned *data)
&& input_overlay_is_alive()); && input_overlay_is_alive());
#endif #endif
if (mouse_enabled) if (!mouse_enabled)
menu_input_mouse(&ret); menu_input->mouse.ptr = 0;
else
memset(&menu_input->mouse, 0, sizeof(menu_input->mouse));
if (settings->menu.pointer.enable) if (settings->menu.pointer.enable)
menu_input_pointer(&ret); menu_input_pointer(&ret);

View File

@ -61,7 +61,9 @@ enum menu_input_mouse_state
MENU_MOUSE_LEFT_BUTTON, MENU_MOUSE_LEFT_BUTTON,
MENU_MOUSE_RIGHT_BUTTON, MENU_MOUSE_RIGHT_BUTTON,
MENU_MOUSE_WHEEL_UP, MENU_MOUSE_WHEEL_UP,
MENU_MOUSE_WHEEL_DOWN MENU_MOUSE_WHEEL_DOWN,
MENU_MOUSE_HORIZ_WHEEL_UP,
MENU_MOUSE_HORIZ_WHEEL_DOWN
}; };
enum menu_input_ctl_state enum menu_input_ctl_state