apple, mouse overlay: fix relative mouse deltas (#17602)
makes sure that relative mouse movement deltas are based on last poll, not last state check; checking state should not reset state
This commit is contained in:
parent
6c08bf003b
commit
6ec4ffb2fa
|
@ -401,6 +401,32 @@ static void cocoa_input_poll(void *data)
|
||||||
if (!apple)
|
if (!apple)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#ifdef IOS
|
||||||
|
#ifdef HAVE_IOS_TOUCHMOUSE
|
||||||
|
if (apple->window_pos_x > 0 || apple->mouse_grabbed)
|
||||||
|
{
|
||||||
|
apple->mouse_rel_x = apple->window_pos_x - apple->mouse_x_last;
|
||||||
|
apple->mouse_x_last = apple->window_pos_x;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
apple->mouse_rel_x = apple->window_pos_x - apple->mouse_x_last;
|
||||||
|
apple->mouse_x_last = apple->window_pos_x;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef IOS
|
||||||
|
#ifdef HAVE_IOS_TOUCHMOUSE
|
||||||
|
if (apple->window_pos_y > 0 || apple->mouse_grabbed)
|
||||||
|
{
|
||||||
|
apple->mouse_rel_y = apple->window_pos_y - apple->mouse_y_last;
|
||||||
|
apple->mouse_y_last = apple->window_pos_y;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
apple->mouse_rel_y = apple->window_pos_y - apple->mouse_y_last;
|
||||||
|
apple->mouse_y_last = apple->window_pos_y;
|
||||||
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < apple->touch_count || i == 0; i++)
|
for (i = 0; i < apple->touch_count || i == 0; i++)
|
||||||
{
|
{
|
||||||
struct video_viewport vp;
|
struct video_viewport vp;
|
||||||
|
@ -573,75 +599,40 @@ static int16_t cocoa_input_state(
|
||||||
return (id && id < RETROK_LAST) && apple_key_state[rarch_keysym_lut[(enum retro_key)id]];
|
return (id && id < RETROK_LAST) && apple_key_state[rarch_keysym_lut[(enum retro_key)id]];
|
||||||
case RETRO_DEVICE_MOUSE:
|
case RETRO_DEVICE_MOUSE:
|
||||||
case RARCH_DEVICE_MOUSE_SCREEN:
|
case RARCH_DEVICE_MOUSE_SCREEN:
|
||||||
|
switch (id)
|
||||||
{
|
{
|
||||||
int16_t val = 0;
|
case RETRO_DEVICE_ID_MOUSE_X:
|
||||||
switch (id)
|
if (device == RARCH_DEVICE_MOUSE_SCREEN)
|
||||||
{
|
{
|
||||||
case RETRO_DEVICE_ID_MOUSE_X:
|
|
||||||
if (device == RARCH_DEVICE_MOUSE_SCREEN)
|
|
||||||
{
|
|
||||||
#ifdef IOS
|
#ifdef IOS
|
||||||
return apple->window_pos_x;
|
return apple->window_pos_x;
|
||||||
#else
|
#else
|
||||||
return apple->window_pos_x * cocoa_screen_get_backing_scale_factor();
|
return apple->window_pos_x * cocoa_screen_get_backing_scale_factor();
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
#ifdef IOS
|
|
||||||
#ifdef HAVE_IOS_TOUCHMOUSE
|
|
||||||
if (apple->window_pos_x > 0 || apple->mouse_grabbed)
|
|
||||||
{
|
|
||||||
val = apple->window_pos_x - apple->mouse_x_last;
|
|
||||||
apple->mouse_x_last = apple->window_pos_x;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
val = apple->mouse_rel_x;
|
|
||||||
#else
|
|
||||||
val = apple->mouse_rel_x;
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
val = apple->window_pos_x - apple->mouse_x_last;
|
|
||||||
apple->mouse_x_last = apple->window_pos_x;
|
|
||||||
#endif
|
|
||||||
return val;
|
|
||||||
case RETRO_DEVICE_ID_MOUSE_Y:
|
|
||||||
if (device == RARCH_DEVICE_MOUSE_SCREEN)
|
|
||||||
{
|
|
||||||
#ifdef IOS
|
|
||||||
return apple->window_pos_y;
|
|
||||||
#else
|
|
||||||
return apple->window_pos_y * cocoa_screen_get_backing_scale_factor();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#ifdef IOS
|
|
||||||
#ifdef HAVE_IOS_TOUCHMOUSE
|
|
||||||
if (apple->window_pos_y > 0 || apple->mouse_grabbed)
|
|
||||||
{
|
|
||||||
val = apple->window_pos_y - apple->mouse_y_last;
|
|
||||||
apple->mouse_y_last = apple->window_pos_y;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
val = apple->mouse_rel_y;
|
|
||||||
#else
|
|
||||||
val = apple->mouse_rel_y;
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
val = apple->window_pos_y - apple->mouse_y_last;
|
|
||||||
apple->mouse_y_last = apple->window_pos_y;
|
|
||||||
#endif
|
|
||||||
return val;
|
|
||||||
case RETRO_DEVICE_ID_MOUSE_LEFT:
|
|
||||||
return apple->mouse_buttons & 1;
|
|
||||||
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
|
||||||
return apple->mouse_buttons & 2;
|
|
||||||
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
|
||||||
return apple->mouse_wu;
|
|
||||||
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
|
||||||
return apple->mouse_wd;
|
|
||||||
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
|
|
||||||
return apple->mouse_wl;
|
|
||||||
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
|
|
||||||
return apple->mouse_wr;
|
|
||||||
}
|
}
|
||||||
|
return apple->mouse_rel_x;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_Y:
|
||||||
|
if (device == RARCH_DEVICE_MOUSE_SCREEN)
|
||||||
|
{
|
||||||
|
#ifdef IOS
|
||||||
|
return apple->window_pos_y;
|
||||||
|
#else
|
||||||
|
return apple->window_pos_y * cocoa_screen_get_backing_scale_factor();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return apple->mouse_rel_y;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_LEFT:
|
||||||
|
return apple->mouse_buttons & 1;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_RIGHT:
|
||||||
|
return apple->mouse_buttons & 2;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_WHEELUP:
|
||||||
|
return apple->mouse_wu;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
|
||||||
|
return apple->mouse_wd;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
|
||||||
|
return apple->mouse_wl;
|
||||||
|
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
|
||||||
|
return apple->mouse_wr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RETRO_DEVICE_POINTER:
|
case RETRO_DEVICE_POINTER:
|
||||||
|
|
|
@ -1199,12 +1199,10 @@ static int16_t input_overlay_device_mouse_state(
|
||||||
ptr_st->device_mask |= (1 << RETRO_DEVICE_MOUSE);
|
ptr_st->device_mask |= (1 << RETRO_DEVICE_MOUSE);
|
||||||
res = (ptr_st->mouse.scale_x)
|
res = (ptr_st->mouse.scale_x)
|
||||||
* (ptr_st->screen_x - ptr_st->mouse.prev_screen_x);
|
* (ptr_st->screen_x - ptr_st->mouse.prev_screen_x);
|
||||||
ptr_st->mouse.prev_screen_x = ptr_st->screen_x;
|
|
||||||
return res;
|
return res;
|
||||||
case RETRO_DEVICE_ID_MOUSE_Y:
|
case RETRO_DEVICE_ID_MOUSE_Y:
|
||||||
res = (ptr_st->mouse.scale_y)
|
res = (ptr_st->mouse.scale_y)
|
||||||
* (ptr_st->screen_y - ptr_st->mouse.prev_screen_y);
|
* (ptr_st->screen_y - ptr_st->mouse.prev_screen_y);
|
||||||
ptr_st->mouse.prev_screen_y = ptr_st->screen_y;
|
|
||||||
return res;
|
return res;
|
||||||
case RETRO_DEVICE_ID_MOUSE_LEFT:
|
case RETRO_DEVICE_ID_MOUSE_LEFT:
|
||||||
return (ptr_st->mouse.click & 0x1)
|
return (ptr_st->mouse.click & 0x1)
|
||||||
|
@ -3468,11 +3466,13 @@ static void input_overlay_update_pointer_coords(
|
||||||
if ( !ptr_st->count
|
if ( !ptr_st->count
|
||||||
&& (ptr_st->device_mask & (1 << RETRO_DEVICE_MOUSE)))
|
&& (ptr_st->device_mask & (1 << RETRO_DEVICE_MOUSE)))
|
||||||
{
|
{
|
||||||
|
ptr_st->mouse.prev_screen_x = ptr_st->screen_x;
|
||||||
ptr_st->screen_x = current_input->input_state(
|
ptr_st->screen_x = current_input->input_state(
|
||||||
input_data, NULL, NULL, NULL, NULL, true, 0,
|
input_data, NULL, NULL, NULL, NULL, true, 0,
|
||||||
RARCH_DEVICE_POINTER_SCREEN,
|
RARCH_DEVICE_POINTER_SCREEN,
|
||||||
touch_idx,
|
touch_idx,
|
||||||
RETRO_DEVICE_ID_POINTER_X);
|
RETRO_DEVICE_ID_POINTER_X);
|
||||||
|
ptr_st->mouse.prev_screen_y = ptr_st->screen_y;
|
||||||
ptr_st->screen_y = current_input->input_state(
|
ptr_st->screen_y = current_input->input_state(
|
||||||
input_data, NULL, NULL, NULL, NULL, true, 0,
|
input_data, NULL, NULL, NULL, NULL, true, 0,
|
||||||
RARCH_DEVICE_POINTER_SCREEN,
|
RARCH_DEVICE_POINTER_SCREEN,
|
||||||
|
|
Loading…
Reference in New Issue