Mercurial > repos > blastem
changeset 916:20c464dbae8f
Finished implementation of mouse capture mode
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 17 Dec 2015 20:03:50 -0800 |
parents | 9e882eca717e |
children | f057975212e9 |
files | default.cfg io.c |
diffstat | 2 files changed, 24 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/default.cfg Tue Dec 15 20:01:50 2015 -0800 +++ b/default.cfg Thu Dec 17 20:03:50 2015 -0800 @@ -14,6 +14,7 @@ f gamepads.1.mode enter gamepads.1.start + r ui.release_mouse [ ui.vdp_debug_mode ] ui.vdp_debug_pal u ui.enter_debugger
--- a/io.c Tue Dec 15 20:01:50 2015 -0800 +++ b/io.c Thu Dec 17 20:03:50 2015 -0800 @@ -65,6 +65,7 @@ UI_SET_SPEED, UI_NEXT_SPEED, UI_PREV_SPEED, + UI_RELEASE_MOUSE, UI_EXIT } ui_action; @@ -100,6 +101,7 @@ mousebinding mice[MAX_MICE]; const uint8_t dpadbits[] = {RENDER_DPAD_UP, RENDER_DPAD_DOWN, RENDER_DPAD_LEFT, RENDER_DPAD_RIGHT}; mouse_modes mouse_mode; +char mouse_captured; void bind_key(int keycode, uint8_t bind_type, uint8_t subtype_a, uint8_t subtype_b, uint8_t value) { @@ -265,6 +267,11 @@ void handle_mousedown(int mouse, int button) { + if (mouse_mode == MOUSE_CAPTURE && !mouse_captured) { + mouse_captured = 1; + render_relative_mouse(1); + return; + } if (mouse >= MAX_MICE || button > MAX_MOUSE_BUTTONS || button <= 0) { return; } @@ -359,6 +366,12 @@ set_speed_percent(genesis, binding->value); } break; + case UI_RELEASE_MOUSE: + if (mouse_captured) { + mouse_captured = 0; + render_relative_mouse(0); + } + break; case UI_EXIT: genesis->m68k->should_return = 1; } @@ -435,6 +448,10 @@ break; } case MOUSE_CAPTURE: { + if (mouse_captured) { + mice[mouse].motion_port->device.mouse.cur_x += deltax; + mice[mouse].motion_port->device.mouse.cur_y += deltay; + } } } } @@ -496,6 +513,8 @@ *ui_out = UI_NEXT_SPEED; } else if(!strcmp(target + 3, "prev_speed")) { *ui_out = UI_PREV_SPEED; + } else if(!strcmp(target + 3, "release_mouse")) { + *ui_out = UI_RELEASE_MOUSE; } else if(!strcmp(target + 3, "exit")) { *ui_out = UI_EXIT; } else { @@ -678,12 +697,12 @@ process_device(io_2, ports+1); process_device(io_ext, ports+2); - if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) { - mouse_mode = MOUSE_ABSOLUTE; - } else { - if (render_fullscreen()) { + if (render_fullscreen()) { mouse_mode = MOUSE_RELATIVE; render_relative_mouse(1); + } else { + if (rom->mouse_mode && !strcmp(rom->mouse_mode, "absolute")) { + mouse_mode = MOUSE_ABSOLUTE; } else { mouse_mode = MOUSE_CAPTURE; }