From 9b9dc2b870b433d11017201562480361e0a94a73 Mon Sep 17 00:00:00 2001 From: Michael Zhou Date: Fri, 2 Aug 2019 14:45:07 -0700 Subject: [PATCH] Added mouse click events for feature selection --- src/ui/selection_plugin.cpp | 22 ++++++++++++++++++++++ src/ui/selection_plugin.h | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/src/ui/selection_plugin.cpp b/src/ui/selection_plugin.cpp index 0e5df37..a1aeaf5 100644 --- a/src/ui/selection_plugin.cpp +++ b/src/ui/selection_plugin.cpp @@ -203,6 +203,28 @@ bool Selection_Menu::key_down(int key, int modifiers) { return false; } +bool Selection_Menu::mouse_down(int button, int modifier) { + double current_press_time = glfwGetTime(); + bool left_mouse = glfwGetMouseButton(viewer->window, GLFW_MOUSE_BUTTON_1) == GLFW_PRESS; + bool right_mouse = glfwGetMouseButton(viewer->window, GLFW_MOUSE_BUTTON_2) == GLFW_PRESS; + if (left_mouse || right_mouse) { + if (!is_first_button_down) { + is_first_button_down = left_mouse || right_mouse; + mouse_down_time = current_press_time; + } + else { + double delta_time = current_press_time - mouse_down_time; + mouse_down_time = 0.0; + is_first_button_down = false; + if (delta_time < mouse_click_threshold) { // CLICK + should_select = true; + return true; + } + } + } + return false; +} + bool Selection_Menu::post_draw() { bool ret = FishUIViewerPlugin::post_draw(); diff --git a/src/ui/selection_plugin.h b/src/ui/selection_plugin.h index 9abca9d..5c95211 100644 --- a/src/ui/selection_plugin.h +++ b/src/ui/selection_plugin.h @@ -17,6 +17,7 @@ class Selection_Menu : public FishUIViewerPlugin { void deinitialize(); bool key_down(int key, int modifiers) override; + bool mouse_down(int button, int modifier) override; bool post_draw() override; private: @@ -30,6 +31,10 @@ class Selection_Menu : public FishUIViewerPlugin { Parameters rendering_params; SelectionRenderer selection_renderer; + double mouse_down_time = 0.0; + double mouse_click_threshold = 0.2; + bool is_first_button_down = false; + glm::vec2 clicked_mouse_position = { 0.f, 0.f }; bool is_currently_interacting = false; int current_interaction_index = -1;