History

Merge pull request #3937 from Atlante45/mouse_pick_in_oculus

Mouse pick improvments

Brad Hefta-Gaub committed 11 years ago

Commit 69f7a892 parents d54d7c7 dc4c9cd5 files · +40 −120Browse files

Showing the changes to interface/src/Application.cpp (1 of 5 files). Show all

Unified · Split

interface/src/Application.cpp+34−63
@@ -167,8 +167,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 166 unmodified lines
167 _raiseMirror(0.0f),167 _raiseMirror(0.0f),
168 _lastMouseMove(usecTimestampNow()),168 _lastMouseMove(usecTimestampNow()),
169 _lastMouseMoveWasSimulated(false),169 _lastMouseMoveWasSimulated(false),
170 _mouseHidden(false),
171 _seenMouseMove(false),
172 _touchAvgX(0.0f),170 _touchAvgX(0.0f),
173 _touchAvgY(0.0f),171 _touchAvgY(0.0f),
174 _isTouchPressed(false),172 _isTouchPressed(false),
@@ -1130,7 +1128,8 @@ void Application::keyPressEvent(QKeyEvent* event) { · 955 unmodified lines
1130 if (!event->isAutoRepeat()) {1128 if (!event->isAutoRepeat()) {
1131 // this starts an HFActionEvent1129 // this starts an HFActionEvent
1132 HFActionEvent startActionEvent(HFActionEvent::startType(),1130 HFActionEvent startActionEvent(HFActionEvent::startType(),
1133 _myCamera.computeViewPickRay(0.5f, 0.5f));1131 _myCamera.computePickRay(getTrueMouseX(),
1132 getTrueMouseY()));
1134 sendEvent(this, &startActionEvent);1133 sendEvent(this, &startActionEvent);
1135 }1134 }
1136 1135
@@ -1221,10 +1220,11 @@ void Application::keyReleaseEvent(QKeyEvent* event) { · 84 unmodified lines
1221 case Qt::Key_Space: {1220 case Qt::Key_Space: {
1222 if (!event->isAutoRepeat()) {1221 if (!event->isAutoRepeat()) {
1223 // this ends the HFActionEvent1222 // this ends the HFActionEvent
1224 HFActionEvent endActionEvent(HFActionEvent::endType(), _myCamera.computeViewPickRay(0.5f, 0.5f));1223 HFActionEvent endActionEvent(HFActionEvent::endType(),
1224 _myCamera.computePickRay(getTrueMouseX(),
1225 getTrueMouseY()));
1225 sendEvent(this, &endActionEvent);1226 sendEvent(this, &endActionEvent);
1226 }1227 }
1227
1228 break;1228 break;
1229 }1229 }
1230 case Qt::Key_Escape: {1230 case Qt::Key_Escape: {
@@ -1233,7 +1233,6 @@ void Application::keyReleaseEvent(QKeyEvent* event) { · 2 unmodified lines
1233 HFBackEvent endBackEvent(HFBackEvent::endType());1233 HFBackEvent endBackEvent(HFBackEvent::endType());
1234 sendEvent(this, &endBackEvent);1234 sendEvent(this, &endBackEvent);
1235 }1235 }
1236
1237 break;1236 break;
1238 }1237 }
1239 default:1238 default:
@@ -1252,34 +1251,24 @@ void Application::focusOutEvent(QFocusEvent* event) { · 12 unmodified lines
1252}1251}
1253 1252
1254void Application::mouseMoveEvent(QMouseEvent* event, unsigned int deviceID) {1253void Application::mouseMoveEvent(QMouseEvent* event, unsigned int deviceID) {
1255 bool showMouse = true;
1256
1257 // Used by application overlay to determine how to draw cursor(s)1254 // Used by application overlay to determine how to draw cursor(s)
1258 _lastMouseMoveWasSimulated = deviceID > 0;1255 _lastMouseMoveWasSimulated = deviceID > 0;
1259 1256 if (!_lastMouseMoveWasSimulated) {
1260 // If this mouse move event is emitted by a controller, dont show the mouse cursor1257 _lastMouseMove = usecTimestampNow();
1261 if (_lastMouseMoveWasSimulated) {
1262 showMouse = false;
1263 }1258 }
1264 1259
1265 if (!_aboutToQuit) {1260 if (_aboutToQuit) {
1266 _entities.mouseMoveEvent(event, deviceID);1261 return;
1267 }1262 }
1268 1263
1264 _entities.mouseMoveEvent(event, deviceID);
1265
1269 _controllerScriptingInterface.emitMouseMoveEvent(event, deviceID); // send events to any registered scripts1266 _controllerScriptingInterface.emitMouseMoveEvent(event, deviceID); // send events to any registered scripts
1270
1271 // if one of our scripts have asked to capture this event, then stop processing it1267 // if one of our scripts have asked to capture this event, then stop processing it
1272 if (_controllerScriptingInterface.isMouseCaptured()) {1268 if (_controllerScriptingInterface.isMouseCaptured()) {
1273 return;1269 return;
1274 }1270 }
1275 1271
1276 _lastMouseMove = usecTimestampNow();
1277
1278 if (_mouseHidden && showMouse && !OculusManager::isConnected() && !TV3DManager::isConnected()) {
1279 getGLWidget()->setCursor(Qt::ArrowCursor);
1280 _mouseHidden = false;
1281 _seenMouseMove = true;
1282 }
1283}1272}
1284 1273
1285void Application::mousePressEvent(QMouseEvent* event, unsigned int deviceID) {1274void Application::mousePressEvent(QMouseEvent* event, unsigned int deviceID) {
@@ -2111,13 +2100,7 @@ void Application::updateMouseRay() { · 825 unmodified lines
2111 // make sure the frustum is up-to-date2100 // make sure the frustum is up-to-date
2112 loadViewFrustum(_myCamera, _viewFrustum);2101 loadViewFrustum(_myCamera, _viewFrustum);
2113 2102
2114 // if the mouse pointer isn't visible, act like it's at the center of the screen2103 PickRay pickRay = _myCamera.computePickRay(getTrueMouseX(), getTrueMouseY());
2115 float x = 0.5f, y = 0.5f;
2116 if (!_mouseHidden) {
2117 x = getTrueMouseX() / (float)_glWidget->width();
2118 y = getTrueMouseY() / (float)_glWidget->height();
2119 }
2120 PickRay pickRay = _myCamera.computeViewPickRay(x, y);
2121 _mouseRayOrigin = pickRay.origin;2104 _mouseRayOrigin = pickRay.origin;
2122 _mouseRayDirection = pickRay.direction;2105 _mouseRayDirection = pickRay.direction;
2123 2106
@@ -2313,22 +2296,29 @@ void Application::updateCursor(float deltaTime) { · 189 unmodified lines
2313 bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);2296 bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
2314 PerformanceWarning warn(showWarnings, "Application::updateCursor()");2297 PerformanceWarning warn(showWarnings, "Application::updateCursor()");
2315 2298
2316 // watch mouse position, if it hasn't moved, hide the cursor2299 bool hideMouse = false;
2317 bool underMouse = _glWidget->underMouse();2300 bool underMouse = _glWidget->underMouse();
2318 if (!_mouseHidden) {2301
2319 quint64 now = usecTimestampNow();2302 static const int HIDE_CURSOR_TIMEOUT = 3 * USECS_PER_SECOND; // 3 second
2320 int elapsed = now - _lastMouseMove;2303 int elapsed = usecTimestampNow() - _lastMouseMove;
2321 const int HIDE_CURSOR_TIMEOUT = 1 * 1000 * 1000; // 1 second2304 if ((elapsed > HIDE_CURSOR_TIMEOUT && underMouse) ||
2322 if (elapsed > HIDE_CURSOR_TIMEOUT && (underMouse || !_seenMouseMove)) {2305 (OculusManager::isConnected() && Menu::getInstance()->isOptionChecked(MenuOption::EnableVRMode))) {
2323 getGLWidget()->setCursor(Qt::BlankCursor);2306 hideMouse = true;
2324 _mouseHidden = true;2307 }
2308
2309 setCursorVisible(!hideMouse);
2310}
2311
2312void Application::setCursorVisible(bool visible) {
2313 if (visible) {
2314 if (overrideCursor() != NULL) {
2315 restoreOverrideCursor();
2325 }2316 }
2326 } else {2317 } else {
2327 // if the mouse is hidden, but we're not inside our window, then consider ourselves to be moving2318 if (overrideCursor() != NULL) {
2328 if (!underMouse && _seenMouseMove) {2319 changeOverrideCursor(Qt::BlankCursor);
2329 _lastMouseMove = usecTimestampNow();2320 } else {
2330 getGLWidget()->setCursor(Qt::ArrowCursor);2321 setOverrideCursor(Qt::BlankCursor);
2331 _mouseHidden = false;
2332 }2322 }
2333 }2323 }
2334}2324}
@@ -2350,17 +2340,6 @@ void Application::update(float deltaTime) { · 15 unmodified lines
2350 2340
2351 }2341 }
2352 2342
2353 static QCursor cursor;
2354 if (OculusManager::isConnected() &&
2355 Menu::getInstance()->isOptionChecked(MenuOption::EnableVRMode)){
2356 if (_window->cursor().shape() != Qt::BlankCursor) {
2357 cursor = _window->cursor();
2358 _window->setCursor(QCursor(Qt::BlankCursor));
2359 }
2360 } else if(_window->cursor().shape() == Qt::BlankCursor) {
2361 _window->setCursor(cursor);
2362 }
2363
2364 // Dispatch input events2343 // Dispatch input events
2365 _controllerScriptingInterface.updateInputControllers();2344 _controllerScriptingInterface.updateInputControllers();
2366 2345
@@ -4377,14 +4356,6 @@ void Application::skipVersion(QString latestVersion) { · 2010 unmodified lines
4377 skipFile.write(latestVersion.toStdString().c_str());4356 skipFile.write(latestVersion.toStdString().c_str());
4378}4357}
4379 4358
4380void Application::setCursorVisible(bool visible) {
4381 if (visible) {
4382 restoreOverrideCursor();
4383 } else {
4384 setOverrideCursor(Qt::BlankCursor);
4385 }
4386}
4387
4388void Application::takeSnapshot() {4359void Application::takeSnapshot() {
4389 QMediaPlayer* player = new QMediaPlayer();4360 QMediaPlayer* player = new QMediaPlayer();
4390 QFileInfo inf = QFileInfo(Application::resourcesPath() + "sounds/snap.wav");4361 QFileInfo inf = QFileInfo(Application::resourcesPath() + "sounds/snap.wav");

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t