comparison io.c @ 1396:aca496957999

Only capture mouse if an emulated mouse is attached
author Michael Pavone <pavone@retrodev.com>
date Mon, 12 Jun 2017 21:12:28 -0700
parents 65f1d6558e9e
children 08116cb5ffaa
comparison
equal deleted inserted replaced
1395:efa7225e0f07 1396:aca496957999
79 UI_SCREENSHOT, 79 UI_SCREENSHOT,
80 UI_EXIT 80 UI_EXIT
81 } ui_action; 81 } ui_action;
82 82
83 typedef enum { 83 typedef enum {
84 MOUSE_NONE, //mouse is ignored
84 MOUSE_ABSOLUTE, //really only useful for menu ROM 85 MOUSE_ABSOLUTE, //really only useful for menu ROM
85 MOUSE_RELATIVE, //for full screen 86 MOUSE_RELATIVE, //for full screen
86 MOUSE_CAPTURE //for windowed mode 87 MOUSE_CAPTURE //for windowed mode
87 } mouse_modes; 88 } mouse_modes;
88 89
608 if (mouse >= MAX_MICE || !mice[mouse].motion_port) { 609 if (mouse >= MAX_MICE || !mice[mouse].motion_port) {
609 return; 610 return;
610 } 611 }
611 switch(current_io->mouse_mode) 612 switch(current_io->mouse_mode)
612 { 613 {
614 case MOUSE_NONE:
615 break;
613 case MOUSE_ABSOLUTE: { 616 case MOUSE_ABSOLUTE: {
614 float scale_x = 640.0 / ((float)render_width()); 617 float scale_x = 640.0 / ((float)render_width());
615 float scale_y = 480.0 / ((float)render_height()); 618 float scale_y = 480.0 / ((float)render_height());
616 float scale = scale_x > scale_y ? scale_y : scale_x; 619 float scale = scale_x > scale_y ? scale_y : scale_x;
617 mice[mouse].motion_port->device.mouse.cur_x = x * scale_x; 620 mice[mouse].motion_port->device.mouse.cur_x = x * scale_x;
893 896
894 process_device(io_1, ports); 897 process_device(io_1, ports);
895 process_device(io_2, ports+1); 898 process_device(io_2, ports+1);
896 process_device(io_ext, ports+2); 899 process_device(io_ext, ports+2);
897 900
898 if (render_fullscreen()) { 901 if (ports[0].device_type == IO_MOUSE || ports[1].device_type == IO_MOUSE || ports[2].device_type == IO_MOUSE) {
899 current_io->mouse_mode = MOUSE_RELATIVE; 902 if (render_fullscreen()) {
900 render_relative_mouse(1); 903 current_io->mouse_mode = MOUSE_RELATIVE;
904 render_relative_mouse(1);
905 } else {
906 if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) {
907 current_io->mouse_mode = MOUSE_ABSOLUTE;
908 } else {
909 current_io->mouse_mode = MOUSE_CAPTURE;
910 }
911 }
901 } else { 912 } else {
902 if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) { 913 current_io->mouse_mode = MOUSE_NONE;
903 current_io->mouse_mode = MOUSE_ABSOLUTE;
904 } else {
905 current_io->mouse_mode = MOUSE_CAPTURE;
906 }
907 } 914 }
908 915
909 for (int i = 0; i < 3; i++) 916 for (int i = 0; i < 3; i++)
910 { 917 {
911 #ifndef _WIN32 918 #ifndef _WIN32