mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-06 11:39:49 -06:00
Add the ability to invert mouse buttons for OrbitalNavigator (closes #697)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -160,6 +160,8 @@ private:
|
||||
properties::FloatProperty _stereoInterpolationTime;
|
||||
properties::FloatProperty _followRotationInterpolationTime;
|
||||
|
||||
properties::BoolProperty _invertMouseButtons;
|
||||
|
||||
MouseCameraStates _mouseStates;
|
||||
JoystickCameraStates _joystickStates;
|
||||
WebsocketCameraStates _websocketStates;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user