From 1d5976fdeb7a3ffd9e58645c6ae7b11b56d6d16f Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Tue, 18 Jun 2024 15:45:13 +0200 Subject: [PATCH] Fix mouselook zoom --- indra/newview/llviewercamera.cpp | 26 ++++++++++++++++++++++++-- indra/newview/llviewercamera.h | 6 ++++++ indra/newview/llviewerwindow.cpp | 4 ++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 2813568c19..86c073582b 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -98,12 +98,18 @@ LLViewerCamera::LLViewerCamera() : LLCamera() mAverageSpeed = 0.f; mAverageAngularSpeed = 0.f; - mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); + // add a way to disconnect/reconnect the "CameraAngle" changed signal + // mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); + connectCameraAngleSignal(); + // } LLViewerCamera::~LLViewerCamera() { - mCameraAngleChangedSignal.disconnect(); + // add a way to disconnect/reconnect the "CameraAngle" changed signal + // mCameraAngleChangedSignal.disconnect(); + disconnectCameraAngleSignal(); + // } void LLViewerCamera::updateCameraLocation(const LLVector3 ¢er, const LLVector3 &up_direction, const LLVector3 &point_of_interest) @@ -920,3 +926,19 @@ void LLViewerCamera::updateCameraAngle(const LLSD& value) setDefaultFOV(value.asReal()); } +// add a way to disconnect/reconnect the "CameraAngle" changed signal +void LLViewerCamera::connectCameraAngleSignal() +{ + if (mCameraAngleChangedSignal.connected()) + { + mCameraAngleChangedSignal.disconnect(); + } + + mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); +} + +void LLViewerCamera::disconnectCameraAngleSignal() +{ + mCameraAngleChangedSignal.disconnect(); +} +// diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index 9394d20dfb..f21738c828 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -129,6 +129,12 @@ protected: boost::signals2::connection mCameraAngleChangedSignal; public: + // Enable external classes to disconnect and connect the "CameraAngle" settings + // changed signal, so classes can copy and overwrite the camera class and restore + // the signal handler + void connectCameraAngleSignal(); + void disconnectCameraAngleSignal(); + // }; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 515c8d3721..3f2fe3eb7b 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -6549,6 +6549,8 @@ BOOL LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea glh::matrix4f saved_proj = get_current_projection(); glh::matrix4f saved_mod = get_current_modelview(); + camera->disconnectCameraAngleSignal(); // disconnect the "CameraAngle" changed signal + // camera constants for the square, cube map capture image camera->setAspect(1.0); // must set aspect ratio first to avoid undesirable clamping of vertical FoV camera->setViewNoBroadcast(F_PI_BY_TWO); @@ -6683,6 +6685,8 @@ BOOL LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea setup3DViewport(); LLPipeline::sUseOcclusion = old_occlusion; + camera->connectCameraAngleSignal(); // reconnect the "CameraAngle" changed signal so mouselook zoom keeps working + // ==================================================== return true; }