diff options
author | Brad Hughes <bradhugh@outlook.com> | 2016-09-07 09:17:27 -0400 |
---|---|---|
committer | Brad Hughes <bradhugh@outlook.com> | 2016-09-07 11:37:32 -0400 |
commit | db54570694ef09be3a313b299aeee51ea55898c1 (patch) | |
tree | b5f980376e1dfae846a1a41bf98d1f6ee146d77e /src/osd/modules/input | |
parent | 0c0c086268128d2fbac5028f2e2591e9123c0bf3 (diff) |
Each mouse should track its own double-click status (nw)
Diffstat (limited to 'src/osd/modules/input')
-rw-r--r-- | src/osd/modules/input/input_sdl.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/osd/modules/input/input_sdl.cpp b/src/osd/modules/input/input_sdl.cpp index 20a08beb216..b234efee7c4 100644 --- a/src/osd/modules/input/input_sdl.cpp +++ b/src/osd/modules/input/input_sdl.cpp @@ -192,11 +192,19 @@ public: class sdl_mouse_device : public sdl_device { +private: + const std::chrono::milliseconds double_click_speed = std::chrono::milliseconds(250); + std::chrono::system_clock::time_point last_click; + int last_x; + int last_y; + public: mouse_state mouse; sdl_mouse_device(running_machine &machine, const char* name, input_module &module) : sdl_device(machine, name, DEVICE_CLASS_MOUSE, module), + last_x(0), + last_y(0), mouse({0}) { } @@ -235,22 +243,18 @@ public: //printf("But down %d %d %d %d %s\n", event.button.which, event.button.button, event.button.x, event.button.y, devinfo->name.c_str()); if (sdlevent.button.button == 1) { - // FIXME Move static declaration - static osd_ticks_t last_click = 0; - static int last_x = 0; - static int last_y = 0; int cx, cy; - osd_ticks_t click = osd_ticks() * 1000 / osd_ticks_per_second(); + auto click = std::chrono::system_clock::now(); auto window = GET_FOCUS_WINDOW(&sdlevent.button); if (window != nullptr && window->xy_to_render_target(sdlevent.button.x, sdlevent.button.y, &cx, &cy)) { machine().ui_input().push_mouse_down_event(window->target(), cx, cy); - // FIXME Parameter ? - if ((click - last_click < 250) + + if (click - last_click < double_click_speed && (cx >= last_x - 4 && cx <= last_x + 4) && (cy >= last_y - 4 && cy <= last_y + 4)) { - last_click = 0; + last_click = std::chrono::time_point<std::chrono::system_clock>::min(); machine().ui_input().push_mouse_double_click_event(window->target(), cx, cy); } else |