Change drag function of target and browser to callback function

This commit is contained in:
Ylva Selling
2021-03-11 16:12:23 +01:00
parent ebcbce56f5
commit c9fc1765ad
3 changed files with 68 additions and 60 deletions
+65 -53
View File
@@ -88,23 +88,34 @@ SkyBrowserModule::SkyBrowserModule()
, _skyBrowser(nullptr)
, _skyTarget(nullptr)
, _camIsSyncedWWT(true)
, mouseIsClickedPreviouslyLeft(false)
, currentlyDraggingBrowser(false)
, currentlyDraggingTarget(false)
, _listenForInteractions(true)
, mouseIsOnBrowser(false)
, mouseIsOnTarget(false)
{
addProperty(_testProperty);
addProperty(_zoomFactor);
global::callback::mousePosition->emplace_back(
[&](double x, double y) {
[&](double x, double y) {
glm::vec2 pos = glm::vec2(static_cast<float>(x), static_cast<float>(y));
_mousePosition = getMousePositionInScreenSpaceCoords(pos);
if (_skyBrowser) {
mouseIsOnBrowser = _skyBrowser->coordIsInsideCornersScreenSpace(_mousePosition);
}
if (_skyTarget) {
mouseIsOnTarget = _skyTarget->coordIsInsideCornersScreenSpace(_mousePosition);
mouseIsOnTarget = _skyTarget->coordIsInsideCornersScreenSpace(_mousePosition);
}
else {
mouseIsOnTarget = false;
}
if (_skyBrowser) {
mouseIsOnBrowser = _skyBrowser->coordIsInsideCornersScreenSpace(_mousePosition);
}
else {
mouseIsOnBrowser = false;
}
}
);
@@ -114,11 +125,49 @@ SkyBrowserModule::SkyBrowserModule()
if (mouseIsOnBrowser) {
float zoom = scroll > 0.0 ? -2.0f : 2.0f;
_zoomFactor = std::clamp(_zoomFactor + zoom, 0.001f, 70.0f);
return true;
}
return true;
return false;
}
);
global::callback::mouseButton->emplace_back(
[&](MouseButton button, MouseAction action, KeyModifier modifier) -> bool {
if (action == MouseAction::Press) {
if (mouseIsOnBrowser && button == MouseButton::Left) {
startDragMousePosBrowser = _mousePosition;
startDragObjectPosBrowser = _skyBrowser->getScreenSpacePosition();
currentlyDraggingBrowser = true;
return true;
}
else if (mouseIsOnTarget && button == MouseButton::Left) {
startDragMousePosTarget = _mousePosition;
startDragObjectPosTarget = _skyTarget->getScreenSpacePosition();
currentlyDraggingTarget = true;
return true;
}
}
else if (action == MouseAction::Release) {
if (currentlyDraggingBrowser) {
currentlyDraggingBrowser = false;
return true;
}
if (currentlyDraggingTarget) {
currentlyDraggingTarget = false;
return true;
}
}
return false;
}
);
}
void SkyBrowserModule::internalDeinitialize() {
@@ -210,32 +259,18 @@ bool SkyBrowserModule::sendMessageToWWT(const ghoul::Dictionary& msg) {
}
void SkyBrowserModule::handleInteractions() {
/*
float scroll = global::navigationHandler->inputState().mouseScrollDelta();
bool mouseIsOverBrowser = _skyBrowser->coordIsInsideBrowserScreenSpace(getMousePositionInScreenSpaceCoords());
LINFO(std::to_string(mouseIsOverBrowser));
_zoomFactor = std::clamp(_zoomFactor - scroll, 0.001f, 70.0f);
/*
CefStructBase<CefMouseEventTraits> event;
_skyBrowser->sendMouseEvent(event, scroll, scroll);
*/
_threadHandleInteractions = std::thread([&] {
while (_listenForInteractions) {
bool mouseIsClickedLeft = global::navigationHandler->inputState().isMouseButtonPressed(MouseButton::Left);
bool mouseIsClickedRight = global::navigationHandler->inputState().isMouseButtonPressed(MouseButton::Right);
if (mouseIsClickedLeft && !mouseIsClickedRight) {
dragBrowser();
if (currentlyDraggingBrowser) {
_skyBrowser->translate(_mousePosition - startDragMousePosTarget, startDragObjectPosTarget);
}
else {
mouseIsClickedPreviouslyLeft = false;
}
if (mouseIsClickedRight && !mouseIsClickedLeft) {
moveTarget();
}
else {
mouseIsClickedPreviouslyRight = false;
if (currentlyDraggingTarget) {
_skyTarget->translate(_mousePosition - startDragMousePosTarget, startDragObjectPosTarget);
}
}
});
@@ -248,31 +283,6 @@ glm::vec2 SkyBrowserModule::getMousePositionInScreenSpaceCoords(glm::vec2& mouse
return glm::vec2((mousePos - (size / 2.0f)) * glm::vec2(1.0f,-1.0f) / (size / 2.0f));
}
void SkyBrowserModule::dragBrowser() {
// First click on browser - user is not holding down the button since last frame
if (mouseIsOnBrowser && !mouseIsClickedPreviouslyLeft) {
mouseIsClickedPreviouslyLeft = true;
startDragMousePosBrowser = _mousePosition;
startDragObjectPosBrowser = _skyBrowser->getScreenSpacePosition();
}
else if (mouseIsClickedPreviouslyLeft) {
_skyBrowser->translate(_mousePosition - startDragMousePosBrowser, startDragObjectPosBrowser);
}
}
void SkyBrowserModule::moveTarget() {
// First click on browser - user is not holding down the button since last frame
if (mouseIsOnTarget && !mouseIsClickedPreviouslyRight) {
mouseIsClickedPreviouslyRight = true;
startDragMousePosTarget = _mousePosition;
startDragObjectPosTarget = _skyTarget->getScreenSpacePosition();
LINFO(glm::to_string(startDragObjectPosTarget));
}
else if (mouseIsClickedPreviouslyRight) {
_skyTarget->translate(_mousePosition - startDragMousePosTarget, startDragObjectPosTarget);
}
}
void SkyBrowserModule::WWTfollowCamera() {
// Start a thread to enable user interaction while sending the calls to WWT
@@ -289,8 +299,10 @@ void SkyBrowserModule::WWTfollowCamera() {
// Sleep so we don't bombard WWT with too many messages
std::this_thread::sleep_for(std::chrono::milliseconds(50));
sendMessageToWWT(message);
}
});
}
ghoul::Dictionary SkyBrowserModule::createMessageForMovingWWTCamera(const glm::dvec2 celestCoords, const float fov, const bool moveInstantly) const {
@@ -323,6 +335,7 @@ ghoul::Dictionary SkyBrowserModule::createMessageForPausingWWTTime() const {
return msg;
}
void SkyBrowserModule::initializeBrowser(ScreenSpaceSkyBrowser* skyBrowser, ScreenSpaceSkyTarget* skyTarget) {
_skyBrowser = skyBrowser;
_skyTarget = skyTarget;
@@ -371,8 +384,7 @@ void SkyBrowserModule::createTarget() {
"Type = 'ScreenSpaceSkyTarget',"
"Identifier = 'ScreenSpaceTarget',"
"Name = 'Screen Space Target',"
"FaceCamera = false ,"
"Scale = 0.25"
"FaceCamera = false"
"}";
openspace::global::scriptEngine->queueScript(
+2 -5
View File
@@ -62,8 +62,6 @@ public:
bool sendMessageToWWT(const ghoul::Dictionary& msg);
void handleInteractions();
glm::vec2 getMousePositionInScreenSpaceCoords(glm::vec2& mousePos);
void dragBrowser();
void moveTarget();
void initializeBrowser(ScreenSpaceSkyBrowser* skyBrowser, ScreenSpaceSkyTarget* skyTarget);
ScreenSpaceSkyBrowser* skyBrowser();
@@ -86,13 +84,12 @@ protected:
glm::vec2 startDragObjectPosBrowser;
glm::vec2 startDragMousePosTarget;
glm::vec2 startDragObjectPosTarget;
bool mouseIsClickedPreviouslyLeft;
bool mouseIsClickedPreviouslyRight;
bool currentlyDraggingBrowser;
bool currentlyDraggingTarget;
glm::vec2 _mousePosition;
double _mouseScroll;
bool mouseIsOnBrowser;
bool mouseIsOnTarget;
};
} // namespace openspace
+1 -2
View File
@@ -44,8 +44,7 @@ namespace openspace::skybrowser::luascriptfunctions {
ghoul::lua::checkArgumentsAndThrow(L, 0, "lua::followCamera");
SkyBrowserModule* module = global::moduleEngine->module<SkyBrowserModule>();
//ghoul::Dictionary message = module->createMessageForPausingWWTTime();
//module->sendMessageToWWT(message);
module->WWTfollowCamera();
module->handleInteractions();