mirror of
https://github.com/libretro/RetroArch
synced 2025-04-10 06:44:27 +00:00
Making mouse pointer working in X11 environment with no Display
This commit is contained in:
parent
5472f0bcf8
commit
c222e6674a
@ -224,8 +224,9 @@ static udev_input_mouse_t *udev_get_mouse(struct udev_input *udev, unsigned port
|
|||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
udev_input_mouse_t *mouse = NULL;
|
udev_input_mouse_t *mouse = NULL;
|
||||||
|
|
||||||
if (port >= MAX_USERS || !video_driver_has_focus())
|
if (port >= MAX_USERS || !video_driver_has_focus()) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < udev->num_devices; ++i)
|
for (i = 0; i < udev->num_devices; ++i)
|
||||||
{
|
{
|
||||||
@ -654,13 +655,47 @@ end:
|
|||||||
#ifdef HAVE_X11
|
#ifdef HAVE_X11
|
||||||
static void udev_input_get_pointer_position(int *x, int *y)
|
static void udev_input_get_pointer_position(int *x, int *y)
|
||||||
{
|
{
|
||||||
Window w;
|
if (video_driver_display_type_get() == RARCH_DISPLAY_X11) {
|
||||||
int p;
|
Window w;
|
||||||
unsigned m;
|
int p;
|
||||||
Display *display = (Display*)video_driver_display_get();
|
unsigned m;
|
||||||
Window window = (Window)video_driver_window_get();
|
Display *display = (Display*)video_driver_display_get();
|
||||||
|
Window window = (Window)video_driver_window_get();
|
||||||
|
|
||||||
XQueryPointer(display, window, &w, &w, &p, &p, x, y, &m);
|
XQueryPointer(display, window, &w, &w, &p, &p, x, y, &m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void udev_input_adopt_rel_pointer_position_from_mouse(int *x, int *y, udev_input_mouse_t *mouse) {
|
||||||
|
static int noX11DispX = 0;
|
||||||
|
static int noX11DispY = 0;
|
||||||
|
|
||||||
|
struct video_viewport view;
|
||||||
|
bool r = video_driver_get_viewport_info(&view);
|
||||||
|
int dx = udev_mouse_get_x(mouse);
|
||||||
|
int dy = udev_mouse_get_y(mouse);
|
||||||
|
if (r && (dx || dy) && video_driver_display_type_get() != RARCH_DISPLAY_X11) {
|
||||||
|
int minX = view.x;
|
||||||
|
int maxX = view.x + view.width;
|
||||||
|
int minY = view.y;
|
||||||
|
int maxY = view.y + view.height;
|
||||||
|
|
||||||
|
// not running in a window
|
||||||
|
noX11DispX = noX11DispX + dx;
|
||||||
|
if (noX11DispX < minX)
|
||||||
|
noX11DispX = minX;
|
||||||
|
if (noX11DispX > maxX)
|
||||||
|
noX11DispX = maxX;
|
||||||
|
noX11DispY = noX11DispY + dy;
|
||||||
|
if (noX11DispY < minY)
|
||||||
|
noX11DispY = minY;
|
||||||
|
if (noX11DispY > maxY)
|
||||||
|
noX11DispY = maxY;
|
||||||
|
*x = noX11DispX;
|
||||||
|
*y = noX11DispY;
|
||||||
|
}
|
||||||
|
mouse->x_rel = 0;
|
||||||
|
mouse->y_rel = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -687,8 +722,7 @@ static void udev_input_poll(void *data)
|
|||||||
udev_input_t *udev = (udev_input_t*)data;
|
udev_input_t *udev = (udev_input_t*)data;
|
||||||
|
|
||||||
#ifdef HAVE_X11
|
#ifdef HAVE_X11
|
||||||
if (video_driver_display_type_get() == RARCH_DISPLAY_X11)
|
udev_input_get_pointer_position(&udev->pointer_x, &udev->pointer_y);
|
||||||
udev_input_get_pointer_position(&udev->pointer_x, &udev->pointer_y);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < udev->num_devices; ++i)
|
for (i = 0; i < udev->num_devices; ++i)
|
||||||
@ -697,9 +731,12 @@ static void udev_input_poll(void *data)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
mouse = &udev->devices[i]->mouse;
|
mouse = &udev->devices[i]->mouse;
|
||||||
|
#ifdef HAVE_X11
|
||||||
|
udev_input_adopt_rel_pointer_position_from_mouse(&udev->pointer_x, &udev->pointer_y, mouse);
|
||||||
|
#else
|
||||||
mouse->x_rel = 0;
|
mouse->x_rel = 0;
|
||||||
mouse->y_rel = 0;
|
mouse->y_rel = 0;
|
||||||
|
#endif
|
||||||
mouse->wu = false;
|
mouse->wu = false;
|
||||||
mouse->wd = false;
|
mouse->wd = false;
|
||||||
mouse->whu = false;
|
mouse->whu = false;
|
||||||
@ -759,7 +796,6 @@ static bool udev_pointer_is_off_window(const udev_input_t *udev)
|
|||||||
udev->pointer_x >= view.x + view.width ||
|
udev->pointer_x >= view.x + view.width ||
|
||||||
udev->pointer_y < view.y ||
|
udev->pointer_y < view.y ||
|
||||||
udev->pointer_y >= view.y + view.height;
|
udev->pointer_y >= view.y + view.height;
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user