diff --git a/src/platform/macos/input.cpp b/src/platform/macos/input.cpp index 1401c169..66d0d130 100644 --- a/src/platform/macos/input.cpp +++ b/src/platform/macos/input.cpp @@ -3,16 +3,18 @@ * @brief todo */ #import +#include #include -#include #include "src/main.h" #include "src/platform/common.h" #include "src/utility.h" -// Delay for a double click -// FIXME: we probably want to make this configurable -#define MULTICLICK_DELAY_NS 500000000 +/** + * @brief Delay for a double click, in milliseconds. + * @todo Make this configurable. + */ +constexpr std::chrono::milliseconds MULTICLICK_DELAY_MS(500); namespace platf { using namespace std::literals; @@ -30,7 +32,7 @@ namespace platf { // mouse related stuff CGEventRef mouse_event; // mouse event source bool mouse_down[3]; // mouse button status - uint64_t last_mouse_event[3][2]; // timestamp of last mouse events + std::chrono::steady_clock::steady_clock::time_point last_mouse_event[3][2]; // timestamp of last mouse events }; // A struct to hold a Windows keycode to Mac virtual keycode mapping. @@ -384,17 +386,6 @@ const KeyCodeMap kKeyCodesMap[] = { post_mouse(input, kCGMouseButtonLeft, event_type_mouse(input), location, 0); } - uint64_t - time_diff(uint64_t start) { - uint64_t elapsed; - Nanoseconds elapsedNano; - - elapsed = mach_absolute_time() - start; - elapsedNano = AbsoluteToNanoseconds(*(AbsoluteTime *) &elapsed); - - return *(uint64_t *) &elapsedNano; - } - void button_mouse(input_t &input, int button, bool release) { CGMouseButton mac_button; @@ -422,15 +413,16 @@ const KeyCodeMap kKeyCodesMap[] = { mouse->mouse_down[mac_button] = !release; - // if the last mouse down was less than MULTICLICK_DELAY_NS, we send a double click event - if (time_diff(mouse->last_mouse_event[mac_button][release]) < MULTICLICK_DELAY_NS) { + // if the last mouse down was less than MULTICLICK_DELAY_MS, we send a double click event + auto now = std::chrono::steady_clock::now(); + if (now < mouse->last_mouse_event[mac_button][release] + MULTICLICK_DELAY_MS) { post_mouse(input, mac_button, event, get_mouse_loc(input), 2); } else { post_mouse(input, mac_button, event, get_mouse_loc(input), 1); } - mouse->last_mouse_event[mac_button][release] = mach_absolute_time(); + mouse->last_mouse_event[mac_button][release] = now; } void @@ -534,12 +526,6 @@ const KeyCodeMap kKeyCodesMap[] = { macos_input->mouse_down[0] = false; macos_input->mouse_down[1] = false; macos_input->mouse_down[2] = false; - macos_input->last_mouse_event[0][0] = 0; - macos_input->last_mouse_event[0][1] = 0; - macos_input->last_mouse_event[1][0] = 0; - macos_input->last_mouse_event[1][1] = 0; - macos_input->last_mouse_event[2][0] = 0; - macos_input->last_mouse_event[2][1] = 0; BOOST_LOG(debug) << "Display "sv << macos_input->display << ", pixel dimension: " << CGDisplayPixelsWide(macos_input->display) << "x"sv << CGDisplayPixelsHigh(macos_input->display);