Add the ability to invert mouse buttons for OrbitalNavigator (closes #697)

This commit is contained in:
Alexander Bock
2020-04-27 15:08:01 +02:00
parent 822de97f02
commit 0fcd71be71
4 changed files with 34 additions and 5 deletions

View File

@@ -34,6 +34,11 @@ public:
MouseCameraStates(double sensitivity, double velocityScaleFactor);
void updateStateFromInput(const InputState& inputState, double deltaTime) override;
void setInvertMouseButton(bool value);
private:
bool _isMouseButtonInverted = false;
};
} // namespace openspace::interaction

View File

@@ -160,6 +160,8 @@ private:
properties::FloatProperty _stereoInterpolationTime;
properties::FloatProperty _followRotationInterpolationTime;
properties::BoolProperty _invertMouseButtons;
MouseCameraStates _mouseStates;
JoystickCameraStates _joystickStates;
WebsocketCameraStates _websocketStates;

View File

@@ -40,10 +40,15 @@ MouseCameraStates::MouseCameraStates(double sensitivity, double velocityScaleFac
void MouseCameraStates::updateStateFromInput(const InputState& inputState,
double deltaTime)
{
MouseButton primary =
_isMouseButtonInverted ? MouseButton::Button2 : MouseButton::Button1;
MouseButton secondary =
_isMouseButtonInverted ? MouseButton::Button1 : MouseButton::Button2;
glm::dvec2 mousePosition = inputState.mousePosition();
bool button1Pressed = inputState.isMouseButtonPressed(MouseButton::Button1);
bool button2Pressed = inputState.isMouseButtonPressed(MouseButton::Button2);
bool primaryPressed = inputState.isMouseButtonPressed(primary);
bool secondaryPressed = inputState.isMouseButtonPressed(secondary);
bool button3Pressed = inputState.isMouseButtonPressed(MouseButton::Button3);
bool keyCtrlPressed = inputState.isKeyPressed(Key::LeftControl) |
inputState.isKeyPressed(Key::RightControl);
@@ -53,7 +58,7 @@ void MouseCameraStates::updateStateFromInput(const InputState& inputState,
inputState.isKeyPressed(Key::RightAlt);
// Update the mouse states
if (button1Pressed && !keyShiftPressed && !keyAltPressed) {
if (primaryPressed && !keyShiftPressed && !keyAltPressed) {
if (keyCtrlPressed) {
glm::dvec2 mousePositionDelta = _localRotationState.previousPosition -
mousePosition;
@@ -84,7 +89,7 @@ void MouseCameraStates::updateStateFromInput(const InputState& inputState,
_globalRotationState.previousPosition = mousePosition;
_globalRotationState.velocity.decelerate(deltaTime);
}
if (button2Pressed || (keyAltPressed && button1Pressed)) {
if (secondaryPressed || (keyAltPressed && primaryPressed)) {
glm::dvec2 mousePositionDelta = _truckMovementState.previousPosition -
mousePosition;
@@ -105,7 +110,7 @@ void MouseCameraStates::updateStateFromInput(const InputState& inputState,
_truckMovementState.previousPosition = mousePosition;
_truckMovementState.velocity.decelerate(deltaTime);
}
if (button3Pressed || (keyShiftPressed && button1Pressed)) {
if (button3Pressed || (keyShiftPressed && primaryPressed)) {
if (keyCtrlPressed) {
glm::dvec2 mousePositionDelta = _localRollState.previousPosition -
mousePosition;
@@ -138,4 +143,8 @@ void MouseCameraStates::updateStateFromInput(const InputState& inputState,
}
}
void MouseCameraStates::setInvertMouseButton(bool value) {
_isMouseButtonInverted = value;
}
} // namespace openspace::interaction

View File

@@ -185,6 +185,14 @@ namespace {
"The interpolation time when toggling following focus node rotation."
};
constexpr openspace::properties::Property::PropertyInfo InvertMouseButtons = {
"InvertMouseButtons",
"Invert left and right mouse buttons",
"If this value is 'false', the left mouse button causes the camera to rotate "
"around the object and the right mouse button causes the zooming motion. If this "
"value is 'true', these two functionalities are reversed."
};
constexpr openspace::properties::Property::PropertyInfo
UseAdaptiveStereoscopicDepthInfo = {
"UseAdaptiveStereoscopicDepth",
@@ -249,6 +257,7 @@ OrbitalNavigator::OrbitalNavigator()
, _retargetInterpolationTime(RetargetInterpolationTimeInfo, 2.0, 0.0, 10.0)
, _stereoInterpolationTime(StereoInterpolationTimeInfo, 8.0, 0.0, 10.0)
, _followRotationInterpolationTime(FollowRotationInterpTimeInfo, 1.0, 0.0, 10.0)
, _invertMouseButtons(InvertMouseButtons, false)
, _mouseStates(_mouseSensitivity * 0.0001, 1 / (_friction.friction + 0.0000001))
, _joystickStates(_joystickSensitivity * 0.1, 1 / (_friction.friction + 0.0000001))
, _websocketStates(_websocketSensitivity, 1 / (_friction.friction + 0.0000001))
@@ -380,6 +389,10 @@ OrbitalNavigator::OrbitalNavigator()
addProperty(_retargetInterpolationTime);
addProperty(_stereoInterpolationTime);
addProperty(_followRotationInterpolationTime);
_invertMouseButtons.onChange(
[this]() { _mouseStates.setInvertMouseButton(_invertMouseButtons); }
);
addProperty(_invertMouseButtons);
addProperty(_mouseSensitivity);
addProperty(_joystickSensitivity);