Gui: Reset navigation flags when the new mode is not IDLE or when the mouse buttons are released

This commit is contained in:
Bas Ruigrok
2025-08-09 18:54:51 +02:00
committed by Chris Hennes
parent 96d9cd3739
commit ac3b441cba
10 changed files with 71 additions and 6 deletions

View File

@@ -299,6 +299,13 @@ SbBool BlenderNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -315,6 +315,13 @@ SbBool CADNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -297,6 +297,13 @@ SbBool InventorNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -1591,6 +1591,14 @@ void NavigationStyle::syncModifierKeys(const SoEvent * const ev)
void NavigationStyle::setViewingMode(const ViewerMode newmode)
{
const ViewerMode oldmode = this->currentmode;
// Reset flags when changing from IDLE to another mode or if the mode is IDLE and the buttons are released
if ((oldmode == IDLE && newmode != IDLE) || (newmode == IDLE && !button1down && !button2down && !button3down)) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode == oldmode) {
// The rotation center could have been changed even if the mode has not changed
@@ -1601,12 +1609,6 @@ void NavigationStyle::setViewingMode(const ViewerMode newmode)
return;
}
if (newmode == NavigationStyle::IDLE) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
switch (newmode) {
case DRAGGING:
// Set up initial projection point for the projector object when

View File

@@ -273,6 +273,13 @@ SbBool OpenCascadeNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -268,6 +268,13 @@ SbBool OpenSCADNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -296,6 +296,13 @@ SbBool RevitNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -295,6 +295,13 @@ SbBool SolidWorksNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -245,6 +245,13 @@ SbBool TinkerCADNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}

View File

@@ -272,6 +272,13 @@ SbBool TouchpadNavigationStyle::processSoEvent(const SoEvent * const ev)
processed = false;
}
// Reset flags when newmode is IDLE and the buttons are released
if (newmode == IDLE && !button1down && !button2down && !button3down) {
hasPanned = false;
hasDragged = false;
hasZoomed = false;
}
if (newmode != curmode) {
this->setViewingMode(newmode);
}