summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2017-06-12 21:12:28 -0700
committerMichael Pavone <pavone@retrodev.com>2017-06-12 21:12:28 -0700
commite591e6333eb073c557e0c827bc132f6568017677 (patch)
treece2985ed5eaf49e30ed305bc2c891d2d79b582a9 /io.c
parentfe57a3c58febaad9c9469fcf7e63073c43a35d29 (diff)
Only capture mouse if an emulated mouse is attached
Diffstat (limited to 'io.c')
-rw-r--r--io.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/io.c b/io.c
index 1fd6b12..70a80c8 100644
--- a/io.c
+++ b/io.c
@@ -81,6 +81,7 @@ typedef enum {
} ui_action;
typedef enum {
+ MOUSE_NONE, //mouse is ignored
MOUSE_ABSOLUTE, //really only useful for menu ROM
MOUSE_RELATIVE, //for full screen
MOUSE_CAPTURE //for windowed mode
@@ -610,6 +611,8 @@ void handle_mouse_moved(int mouse, uint16_t x, uint16_t y, int16_t deltax, int16
}
switch(current_io->mouse_mode)
{
+ case MOUSE_NONE:
+ break;
case MOUSE_ABSOLUTE: {
float scale_x = 640.0 / ((float)render_width());
float scale_y = 480.0 / ((float)render_height());
@@ -895,15 +898,19 @@ void setup_io_devices(tern_node * config, rom_info *rom, sega_io *io)
process_device(io_2, ports+1);
process_device(io_ext, ports+2);
- if (render_fullscreen()) {
- current_io->mouse_mode = MOUSE_RELATIVE;
- render_relative_mouse(1);
- } else {
- if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) {
- current_io->mouse_mode = MOUSE_ABSOLUTE;
+ if (ports[0].device_type == IO_MOUSE || ports[1].device_type == IO_MOUSE || ports[2].device_type == IO_MOUSE) {
+ if (render_fullscreen()) {
+ current_io->mouse_mode = MOUSE_RELATIVE;
+ render_relative_mouse(1);
} else {
- current_io->mouse_mode = MOUSE_CAPTURE;
+ if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) {
+ current_io->mouse_mode = MOUSE_ABSOLUTE;
+ } else {
+ current_io->mouse_mode = MOUSE_CAPTURE;
+ }
}
+ } else {
+ current_io->mouse_mode = MOUSE_NONE;
}
for (int i = 0; i < 3; i++)