Check if our main window is our application window within Application's event handling functions.

This commit is contained in:
Geenz 2013-06-06 19:58:33 -04:00
parent 51340452df
commit 7cefa3fe7b

View file

@ -104,39 +104,27 @@ void GLCanvas::resizeGL(int width, int height) {
} }
void GLCanvas::keyPressEvent(QKeyEvent* event) { void GLCanvas::keyPressEvent(QKeyEvent* event) {
if (Application::activeWindow() != 0) { Application::getInstance()->keyPressEvent(event);
Application::getInstance()->keyPressEvent(event);
}
} }
void GLCanvas::keyReleaseEvent(QKeyEvent* event) { void GLCanvas::keyReleaseEvent(QKeyEvent* event) {
if (Application::activeWindow() != 0) { Application::getInstance()->keyReleaseEvent(event);
Application::getInstance()->keyReleaseEvent(event);
}
} }
void GLCanvas::mouseMoveEvent(QMouseEvent* event) { void GLCanvas::mouseMoveEvent(QMouseEvent* event) {
if (Application::activeWindow() != 0) { Application::getInstance()->mouseMoveEvent(event);
Application::getInstance()->mouseMoveEvent(event);
}
} }
void GLCanvas::mousePressEvent(QMouseEvent* event) { void GLCanvas::mousePressEvent(QMouseEvent* event) {
if (Application::activeWindow() != 0) { Application::getInstance()->mousePressEvent(event);
Application::getInstance()->mousePressEvent(event);
}
} }
void GLCanvas::mouseReleaseEvent(QMouseEvent* event) { void GLCanvas::mouseReleaseEvent(QMouseEvent* event) {
if (Application::activeWindow() != 0) { Application::getInstance()->mouseReleaseEvent(event);
Application::getInstance()->mouseReleaseEvent(event);
}
} }
void GLCanvas::wheelEvent(QWheelEvent* event) { void GLCanvas::wheelEvent(QWheelEvent* event) {
if (Application::activeWindow() != 0) { Application::getInstance()->wheelEvent(event);
Application::getInstance()->wheelEvent(event);
}
} }
Application::Application(int& argc, char** argv, timeval &startup_time) : Application::Application(int& argc, char** argv, timeval &startup_time) :
@ -433,314 +421,326 @@ static void sendVoxelServerAddScene() {
} }
void Application::keyPressEvent(QKeyEvent* event) { void Application::keyPressEvent(QKeyEvent* event) {
if (_chatEntryOn) { if (activeWindow() == _window) {
if (_chatEntry.keyPressEvent(event)) { if (_chatEntryOn) {
_myAvatar.setKeyState(event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete ? if (_chatEntry.keyPressEvent(event)) {
DELETE_KEY_DOWN : INSERT_KEY_DOWN); _myAvatar.setKeyState(event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete ?
_myAvatar.setChatMessage(string(_chatEntry.getContents().size(), SOLID_BLOCK_CHAR)); DELETE_KEY_DOWN : INSERT_KEY_DOWN);
_myAvatar.setChatMessage(string(_chatEntry.getContents().size(), SOLID_BLOCK_CHAR));
} else {
_myAvatar.setChatMessage(_chatEntry.getContents()); } else {
_chatEntry.clear(); _myAvatar.setChatMessage(_chatEntry.getContents());
_chatEntryOn = false; _chatEntry.clear();
setMenuShortcutsEnabled(true); _chatEntryOn = false;
setMenuShortcutsEnabled(true);
}
return;
} }
return;
}
bool shifted = event->modifiers().testFlag(Qt::ShiftModifier);
switch (event->key()) {
case Qt::Key_BracketLeft:
_viewFrustumOffsetYaw -= 0.5;
break;
case Qt::Key_BracketRight:
_viewFrustumOffsetYaw += 0.5;
break;
case Qt::Key_BraceLeft: bool shifted = event->modifiers().testFlag(Qt::ShiftModifier);
_viewFrustumOffsetPitch -= 0.5; switch (event->key()) {
break; case Qt::Key_BracketLeft:
_viewFrustumOffsetYaw -= 0.5;
case Qt::Key_BraceRight: break;
_viewFrustumOffsetPitch += 0.5;
break; case Qt::Key_BracketRight:
_viewFrustumOffsetYaw += 0.5;
case Qt::Key_ParenLeft: break;
_viewFrustumOffsetRoll -= 0.5;
break; case Qt::Key_BraceLeft:
_viewFrustumOffsetPitch -= 0.5;
case Qt::Key_ParenRight: break;
_viewFrustumOffsetRoll += 0.5;
break; case Qt::Key_BraceRight:
_viewFrustumOffsetPitch += 0.5;
case Qt::Key_Less: break;
_viewFrustumOffsetDistance -= 0.5;
break; case Qt::Key_ParenLeft:
_viewFrustumOffsetRoll -= 0.5;
case Qt::Key_Greater: break;
_viewFrustumOffsetDistance += 0.5;
break; case Qt::Key_ParenRight:
_viewFrustumOffsetRoll += 0.5;
case Qt::Key_Comma: break;
_viewFrustumOffsetUp -= 0.05;
break; case Qt::Key_Less:
_viewFrustumOffsetDistance -= 0.5;
case Qt::Key_Period: break;
_viewFrustumOffsetUp += 0.05;
break; case Qt::Key_Greater:
_viewFrustumOffsetDistance += 0.5;
case Qt::Key_Ampersand: break;
_paintOn = !_paintOn;
setupPaintingVoxel(); case Qt::Key_Comma:
break; _viewFrustumOffsetUp -= 0.05;
break;
case Qt::Key_AsciiCircum:
shiftPaintingColor(); case Qt::Key_Period:
break; _viewFrustumOffsetUp += 0.05;
break;
case Qt::Key_Percent:
sendVoxelServerAddScene(); case Qt::Key_Ampersand:
break; _paintOn = !_paintOn;
setupPaintingVoxel();
case Qt::Key_Semicolon: break;
_audio.startEchoTest();
break; case Qt::Key_AsciiCircum:
shiftPaintingColor();
case Qt::Key_L: break;
_displayLevels = !_displayLevels;
break; case Qt::Key_Percent:
sendVoxelServerAddScene();
case Qt::Key_E: break;
_myAvatar.setDriveKeys(UP, 1);
break; case Qt::Key_Semicolon:
_audio.startEchoTest();
case Qt::Key_C: break;
_myAvatar.setDriveKeys(DOWN, 1);
break; case Qt::Key_L:
_displayLevels = !_displayLevels;
case Qt::Key_W: break;
_myAvatar.setDriveKeys(FWD, 1);
break; case Qt::Key_E:
_myAvatar.setDriveKeys(UP, 1);
case Qt::Key_S: break;
_myAvatar.setDriveKeys(BACK, 1);
break; case Qt::Key_C:
_myAvatar.setDriveKeys(DOWN, 1);
case Qt::Key_Space: break;
resetSensors();
break; case Qt::Key_W:
_myAvatar.setDriveKeys(FWD, 1);
case Qt::Key_G: break;
goHome();
break; case Qt::Key_S:
_myAvatar.setDriveKeys(BACK, 1);
case Qt::Key_A: break;
_myAvatar.setDriveKeys(ROT_LEFT, 1);
break; case Qt::Key_Space:
resetSensors();
case Qt::Key_D: break;
_myAvatar.setDriveKeys(ROT_RIGHT, 1);
break; case Qt::Key_G:
goHome();
case Qt::Key_Return: break;
case Qt::Key_Enter:
_chatEntryOn = true; case Qt::Key_A:
_myAvatar.setKeyState(NO_KEY_DOWN); _myAvatar.setDriveKeys(ROT_LEFT, 1);
_myAvatar.setChatMessage(string()); break;
setMenuShortcutsEnabled(false);
break; case Qt::Key_D:
_myAvatar.setDriveKeys(ROT_RIGHT, 1);
case Qt::Key_Up: break;
_myAvatar.setDriveKeys(shifted ? UP : FWD, 1);
break; case Qt::Key_Return:
case Qt::Key_Enter:
case Qt::Key_Down: _chatEntryOn = true;
_myAvatar.setDriveKeys(shifted ? DOWN : BACK, 1); _myAvatar.setKeyState(NO_KEY_DOWN);
break; _myAvatar.setChatMessage(string());
setMenuShortcutsEnabled(false);
case Qt::Key_Left: break;
_myAvatar.setDriveKeys(shifted ? LEFT : ROT_LEFT, 1);
break; case Qt::Key_Up:
_myAvatar.setDriveKeys(shifted ? UP : FWD, 1);
case Qt::Key_Right: break;
_myAvatar.setDriveKeys(shifted ? RIGHT : ROT_RIGHT, 1);
break; case Qt::Key_Down:
_myAvatar.setDriveKeys(shifted ? DOWN : BACK, 1);
case Qt::Key_I: break;
if (shifted) {
_myCamera.setEyeOffsetOrientation(glm::normalize( case Qt::Key_Left:
glm::quat(glm::vec3(0.002f, 0, 0)) * _myCamera.getEyeOffsetOrientation())); _myAvatar.setDriveKeys(shifted ? LEFT : ROT_LEFT, 1);
} else { break;
_myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, 0.001, 0));
} case Qt::Key_Right:
resizeGL(_glWidget->width(), _glWidget->height()); _myAvatar.setDriveKeys(shifted ? RIGHT : ROT_RIGHT, 1);
break; break;
case Qt::Key_K: case Qt::Key_I:
if (shifted) { if (shifted) {
_myCamera.setEyeOffsetOrientation(glm::normalize( _myCamera.setEyeOffsetOrientation(glm::normalize(
glm::quat(glm::vec3(-0.002f, 0, 0)) * _myCamera.getEyeOffsetOrientation())); glm::quat(glm::vec3(0.002f, 0, 0)) * _myCamera.getEyeOffsetOrientation()));
} else { } else {
_myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, -0.001, 0)); _myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, 0.001, 0));
} }
resizeGL(_glWidget->width(), _glWidget->height()); resizeGL(_glWidget->width(), _glWidget->height());
break; break;
case Qt::Key_J: case Qt::Key_K:
if (shifted) { if (shifted) {
_myCamera.setEyeOffsetOrientation(glm::normalize( _myCamera.setEyeOffsetOrientation(glm::normalize(
glm::quat(glm::vec3(0, 0.002f, 0)) * _myCamera.getEyeOffsetOrientation())); glm::quat(glm::vec3(-0.002f, 0, 0)) * _myCamera.getEyeOffsetOrientation()));
} else { } else {
_myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(-0.001, 0, 0)); _myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, -0.001, 0));
} }
resizeGL(_glWidget->width(), _glWidget->height()); resizeGL(_glWidget->width(), _glWidget->height());
break; break;
case Qt::Key_M: case Qt::Key_J:
if (shifted) { if (shifted) {
_myCamera.setEyeOffsetOrientation(glm::normalize( _myCamera.setEyeOffsetOrientation(glm::normalize(
glm::quat(glm::vec3(0, -0.002f, 0)) * _myCamera.getEyeOffsetOrientation())); glm::quat(glm::vec3(0, 0.002f, 0)) * _myCamera.getEyeOffsetOrientation()));
} else { } else {
_myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0.001, 0, 0)); _myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(-0.001, 0, 0));
} }
resizeGL(_glWidget->width(), _glWidget->height()); resizeGL(_glWidget->width(), _glWidget->height());
break; break;
case Qt::Key_U: case Qt::Key_M:
if (shifted) { if (shifted) {
_myCamera.setEyeOffsetOrientation(glm::normalize( _myCamera.setEyeOffsetOrientation(glm::normalize(
glm::quat(glm::vec3(0, 0, -0.002f)) * _myCamera.getEyeOffsetOrientation())); glm::quat(glm::vec3(0, -0.002f, 0)) * _myCamera.getEyeOffsetOrientation()));
} else { } else {
_myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, 0, -0.001)); _myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0.001, 0, 0));
} }
resizeGL(_glWidget->width(), _glWidget->height()); resizeGL(_glWidget->width(), _glWidget->height());
break; break;
case Qt::Key_Y: case Qt::Key_U:
if (shifted) { if (shifted) {
_myCamera.setEyeOffsetOrientation(glm::normalize( _myCamera.setEyeOffsetOrientation(glm::normalize(
glm::quat(glm::vec3(0, 0, 0.002f)) * _myCamera.getEyeOffsetOrientation())); glm::quat(glm::vec3(0, 0, -0.002f)) * _myCamera.getEyeOffsetOrientation()));
} else { } else {
_myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, 0, 0.001)); _myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, 0, -0.001));
} }
resizeGL(_glWidget->width(), _glWidget->height()); resizeGL(_glWidget->width(), _glWidget->height());
break; break;
case Qt::Key_Backspace:
case Qt::Key_Delete: case Qt::Key_Y:
if (_selectVoxelMode->isChecked()) { if (shifted) {
deleteVoxelUnderCursor(); _myCamera.setEyeOffsetOrientation(glm::normalize(
} glm::quat(glm::vec3(0, 0, 0.002f)) * _myCamera.getEyeOffsetOrientation()));
break; } else {
_myCamera.setEyeOffsetPosition(_myCamera.getEyeOffsetPosition() + glm::vec3(0, 0, 0.001));
default: }
event->ignore(); resizeGL(_glWidget->width(), _glWidget->height());
break; break;
case Qt::Key_Backspace:
case Qt::Key_Delete:
if (_selectVoxelMode->isChecked()) {
deleteVoxelUnderCursor();
}
break;
default:
event->ignore();
break;
}
} }
} }
void Application::keyReleaseEvent(QKeyEvent* event) { void Application::keyReleaseEvent(QKeyEvent* event) {
if (_chatEntryOn) { if (activeWindow() == _window) {
_myAvatar.setKeyState(NO_KEY_DOWN); if (_chatEntryOn) {
return; _myAvatar.setKeyState(NO_KEY_DOWN);
} return;
}
switch (event->key()) {
case Qt::Key_E:
_myAvatar.setDriveKeys(UP, 0);
break;
case Qt::Key_C: switch (event->key()) {
_myAvatar.setDriveKeys(DOWN, 0); case Qt::Key_E:
break; _myAvatar.setDriveKeys(UP, 0);
break;
case Qt::Key_W:
_myAvatar.setDriveKeys(FWD, 0);
break;
case Qt::Key_S:
_myAvatar.setDriveKeys(BACK, 0);
break;
case Qt::Key_A:
_myAvatar.setDriveKeys(ROT_LEFT, 0);
break;
case Qt::Key_D: case Qt::Key_C:
_myAvatar.setDriveKeys(ROT_RIGHT, 0); _myAvatar.setDriveKeys(DOWN, 0);
break; break;
case Qt::Key_Up: case Qt::Key_W:
_myAvatar.setDriveKeys(FWD, 0); _myAvatar.setDriveKeys(FWD, 0);
_myAvatar.setDriveKeys(UP, 0); break;
break;
case Qt::Key_S:
case Qt::Key_Down: _myAvatar.setDriveKeys(BACK, 0);
_myAvatar.setDriveKeys(BACK, 0); break;
_myAvatar.setDriveKeys(DOWN, 0);
break; case Qt::Key_A:
_myAvatar.setDriveKeys(ROT_LEFT, 0);
case Qt::Key_Left: break;
_myAvatar.setDriveKeys(LEFT, 0);
_myAvatar.setDriveKeys(ROT_LEFT, 0); case Qt::Key_D:
break; _myAvatar.setDriveKeys(ROT_RIGHT, 0);
break;
case Qt::Key_Right:
_myAvatar.setDriveKeys(RIGHT, 0); case Qt::Key_Up:
_myAvatar.setDriveKeys(ROT_RIGHT, 0); _myAvatar.setDriveKeys(FWD, 0);
break; _myAvatar.setDriveKeys(UP, 0);
break;
default:
event->ignore(); case Qt::Key_Down:
break; _myAvatar.setDriveKeys(BACK, 0);
_myAvatar.setDriveKeys(DOWN, 0);
break;
case Qt::Key_Left:
_myAvatar.setDriveKeys(LEFT, 0);
_myAvatar.setDriveKeys(ROT_LEFT, 0);
break;
case Qt::Key_Right:
_myAvatar.setDriveKeys(RIGHT, 0);
_myAvatar.setDriveKeys(ROT_RIGHT, 0);
break;
default:
event->ignore();
break;
}
} }
} }
void Application::mouseMoveEvent(QMouseEvent* event) { void Application::mouseMoveEvent(QMouseEvent* event) {
_mouseX = event->x(); if (activeWindow() == _window) {
_mouseY = event->y(); _mouseX = event->x();
_mouseY = event->y();
// detect drag
glm::vec3 mouseVoxelPos(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z); // detect drag
if (!_justEditedVoxel && mouseVoxelPos != _lastMouseVoxelPos) { glm::vec3 mouseVoxelPos(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z);
if (event->buttons().testFlag(Qt::LeftButton)) { if (!_justEditedVoxel && mouseVoxelPos != _lastMouseVoxelPos) {
maybeEditVoxelUnderCursor(); if (event->buttons().testFlag(Qt::LeftButton)) {
maybeEditVoxelUnderCursor();
} else if (event->buttons().testFlag(Qt::RightButton) && checkedVoxelModeAction() != 0) { } else if (event->buttons().testFlag(Qt::RightButton) && checkedVoxelModeAction() != 0) {
deleteVoxelUnderCursor(); deleteVoxelUnderCursor();
}
} }
} }
} }
void Application::mousePressEvent(QMouseEvent* event) { void Application::mousePressEvent(QMouseEvent* event) {
if (event->button() == Qt::LeftButton) { if (activeWindow() == _window) {
_mouseX = event->x(); if (event->button() == Qt::LeftButton) {
_mouseY = event->y(); _mouseX = event->x();
_mousePressed = true; _mouseY = event->y();
maybeEditVoxelUnderCursor(); _mousePressed = true;
maybeEditVoxelUnderCursor();
} else if (event->button() == Qt::RightButton && checkedVoxelModeAction() != 0) {
deleteVoxelUnderCursor(); } else if (event->button() == Qt::RightButton && checkedVoxelModeAction() != 0) {
deleteVoxelUnderCursor();
}
} }
} }
void Application::mouseReleaseEvent(QMouseEvent* event) { void Application::mouseReleaseEvent(QMouseEvent* event) {
if (event->button() == Qt::LeftButton) { if (activeWindow() == _window) {
_mouseX = event->x(); if (event->button() == Qt::LeftButton) {
_mouseY = event->y(); _mouseX = event->x();
_mousePressed = false; _mouseY = event->y();
_mousePressed = false;
}
} }
} }
void Application::wheelEvent(QWheelEvent* event) { void Application::wheelEvent(QWheelEvent* event) {
if (checkedVoxelModeAction() == 0) { if (activeWindow() == _window) {
event->ignore(); if (checkedVoxelModeAction() == 0) {
return; event->ignore();
} return;
if (event->delta() > 0) { }
increaseVoxelSize(); if (event->delta() > 0) {
} else { increaseVoxelSize();
decreaseVoxelSize(); } else {
decreaseVoxelSize();
}
} }
} }
@ -888,7 +888,7 @@ void Application::idle() {
// Update from Mouse // Update from Mouse
if (_mouseLook->isChecked()) { if (_mouseLook->isChecked()) {
QPoint mouse = QPoint(_mouseX, _mouseY); QPoint mouse(_mouseX, _mouseY);
_myAvatar.updateFromMouse(_glWidget->mapFromGlobal(mouse).x(), _myAvatar.updateFromMouse(_glWidget->mapFromGlobal(mouse).x(),
_glWidget->mapFromGlobal(mouse).y(), _glWidget->mapFromGlobal(mouse).y(),
_glWidget->width(), _glWidget->width(),