Mercurial > hg > orthanc-stone
diff Applications/Generic/GuiAdapter.cpp @ 1020:ac88989817e3 toa2019093001
TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
+ added DeleteMeasureCommand + moved the various concrete measuring tool-related
classes to their pre-assigned file locations (everything was crammed into
MeasureCommands.* files up to this commit) + added double-click handler to
GuiAdapter (for TOA implementation of "delete measuring tool on double-click")
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 30 Sep 2019 10:41:06 +0200 |
parents | 1091b2adeb5a |
children | 4383382db01d 2d8ab34c8c91 |
line wrap: on
line diff
--- a/Applications/Generic/GuiAdapter.cpp Fri Sep 27 13:32:05 2019 +0200 +++ b/Applications/Generic/GuiAdapter.cpp Mon Sep 30 10:41:06 2019 +0200 @@ -78,6 +78,9 @@ case EMSCRIPTEN_EVENT_MOUSEDOWN: dest.type = GUIADAPTER_EVENT_MOUSEDOWN; break; + case EMSCRIPTEN_EVENT_DBLCLICK: + dest.type = GUIADAPTER_EVENT_MOUSEDBLCLICK; + break; case EMSCRIPTEN_EVENT_MOUSEMOVE: dest.type = GUIADAPTER_EVENT_MOUSEMOVE; break; @@ -287,6 +290,19 @@ func); } + + void GuiAdapter::SetMouseDblClickCallback( + std::string canvasId, void* userData, bool capture, OnMouseEventFunc func) + { + SetCallback<OnMouseEventFunc, GuiAdapterMouseEvent, EmscriptenMouseEvent>( + &emscripten_set_dblclick_callback_on_thread, + canvasId, + userData, + capture, + func); + } + + void GuiAdapter::SetMouseDownCallback( std::string canvasId, void* userData, bool capture, OnMouseEventFunc func) { @@ -401,7 +417,14 @@ switch (source.type) { case SDL_MOUSEBUTTONDOWN: - dest.type = GUIADAPTER_EVENT_MOUSEDOWN; + if (source.button.clicks == 1) { + dest.type = GUIADAPTER_EVENT_MOUSEDOWN; + } else if (source.button.clicks == 2) { + dest.type = GUIADAPTER_EVENT_MOUSEDBLCLICK; + } else { + dest.type = GUIADAPTER_EVENT_MOUSEDBLCLICK; + LOG(WARNING) << "Multiple-click ignored."; + } break; case SDL_MOUSEMOTION: dest.type = GUIADAPTER_EVENT_MOUSEMOVE; @@ -513,6 +536,13 @@ } // SDL ONLY + void GuiAdapter::SetMouseDblClickCallback( + std::string canvasId, void* userData, bool capture, OnMouseEventFunc func) + { + mouseDblCickHandlers_.push_back(EventHandlerData<OnMouseEventFunc>(canvasId, func, userData)); + } + + // SDL ONLY void GuiAdapter::SetMouseMoveCallback( std::string canvasId, void* userData, bool capture, OnMouseEventFunc func) { @@ -674,6 +704,13 @@ (*(mouseDownHandlers_[i].func))(windowTitle, &event, mouseDownHandlers_[i].userData); } break; + case GUIADAPTER_EVENT_MOUSEDBLCLICK: + for (size_t i = 0; i < mouseDblCickHandlers_.size(); i++) + { + if (mouseDblCickHandlers_[i].canvasName == windowTitle) + (*(mouseDblCickHandlers_[i].func))(windowTitle, &event, mouseDblCickHandlers_[i].userData); + } + break; case GUIADAPTER_EVENT_MOUSEMOVE: for (size_t i = 0; i < mouseMoveHandlers_.size(); i++) {