Skip to content

Commit

Permalink
[3d] Allow exiting mouse lock mode with escape key press
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jan 16, 2021
1 parent df2c9ff commit cfdcae9
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 25 deletions.
68 changes: 45 additions & 23 deletions src/3d/qgscameracontroller.cpp
Expand Up @@ -62,7 +62,7 @@ QgsCameraController::QgsCameraController( Qt3DCore::QNode *parent )

mFpsNavTimer = new QTimer( this );
mFpsNavTimer->setInterval( 10 );
connect( mFpsNavTimer, &QTimer::timeout, this, &QgsCameraController::onKeyPressedFlyNavigation );
connect( mFpsNavTimer, &QTimer::timeout, this, &QgsCameraController::applyFlyModeKeyMovements );
mFpsNavTimer->start();
}

Expand Down Expand Up @@ -476,27 +476,7 @@ void QgsCameraController::onKeyPressed( Qt3DInput::QKeyEvent *event )
{
case WalkNavigation:
{
if ( event->key() == Qt::Key_QuoteLeft )
{
mCaptureFpsMouseMovements = !mCaptureFpsMouseMovements;
if ( mCaptureFpsMouseMovements )
{
mIgnoreNextMouseMove = true;
qApp->setOverrideCursor( QCursor( Qt::BlankCursor ) );
}
else
{
mIgnoreNextMouseMove = false;
qApp->restoreOverrideCursor();
}
return;
}

if ( event->isAutoRepeat() )
return;

mDepressedKeys.insert( event->key() );
onKeyPressedFlyNavigation();
onKeyPressedFlyNavigation( event );
break;
}

Expand Down Expand Up @@ -569,7 +549,49 @@ void QgsCameraController::onKeyPressedTerrainNavigation( Qt3DInput::QKeyEvent *e
}
}

void QgsCameraController::onKeyPressedFlyNavigation()
void QgsCameraController::onKeyPressedFlyNavigation( Qt3DInput::QKeyEvent *event )
{
switch ( event->key() )
{
case Qt::Key_QuoteLeft:
{
// toggle mouse lock mode
mCaptureFpsMouseMovements = !mCaptureFpsMouseMovements;
mIgnoreNextMouseMove = true;
if ( mCaptureFpsMouseMovements )
{
qApp->setOverrideCursor( QCursor( Qt::BlankCursor ) );
}
else
{
qApp->restoreOverrideCursor();
}
return;
}

case Qt::Key_Escape:
{
// always exit mouse lock mode
if ( mCaptureFpsMouseMovements )
{
mCaptureFpsMouseMovements = false;
mIgnoreNextMouseMove = true;
qApp->restoreOverrideCursor();
return;
}
}

default:
break;
}

if ( event->isAutoRepeat() )
return;

mDepressedKeys.insert( event->key() );
}

void QgsCameraController::applyFlyModeKeyMovements()
{
QVector3D cameraUp = mCamera->upVector().normalized();
QVector3D cameraFront = ( QVector3D( mCameraPose.centerPoint().x(), mCameraPose.centerPoint().y(), mCameraPose.centerPoint().z() ) - mCamera->position() ).normalized();
Expand Down
5 changes: 3 additions & 2 deletions src/3d/qgscameracontroller.h
Expand Up @@ -237,10 +237,11 @@ class _3D_EXPORT QgsCameraController : public Qt3DCore::QEntity
void onKeyPressed( Qt3DInput::QKeyEvent *event );
void onKeyReleased( Qt3DInput::QKeyEvent *event );
void onPickerMousePressed( Qt3DRender::QPickEvent *pick );
void applyFlyModeKeyMovements();

private:
void onKeyPressedFlyNavigation();
void onKeyPressedTerrainNavigation( Qt3DInput::QKeyEvent *mouse );
void onKeyPressedFlyNavigation( Qt3DInput::QKeyEvent *event );
void onKeyPressedTerrainNavigation( Qt3DInput::QKeyEvent *event );
void onPositionChangedFlyNavigation( Qt3DInput::QMouseEvent *mouse );
void onPositionChangedTerrainNavigation( Qt3DInput::QMouseEvent *mouse );

Expand Down

0 comments on commit cfdcae9

Please sign in to comment.