diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index eb03e1f592..5aafd9f4a6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2573,20 +2573,40 @@ void Application::saveAction(QSettings* set, QAction* action) { set->setValue(action->text(), action->isChecked()); } -void Application::loadSettings(QSettings* set) { - if (!set) set = getSettings(); +void Application::loadSettings(QSettings* settings) { + if (!settings) settings = getSettings(); - _headCameraPitchYawScale = set->value("headCameraPitchYawScale", 0.0f).toFloat(); - scanMenuBar(&Application::loadAction, set); - getAvatar()->loadData(set); + _headCameraPitchYawScale = settings->value("headCameraPitchYawScale", 0.0f).toFloat(); + + settings->beginGroup("View Frustum Offset Camera"); + // in case settings is corrupt or missing loadSetting() will check for NaN + _viewFrustumOffsetYaw = loadSetting(settings, "viewFrustumOffsetYaw" , 0.0f); + _viewFrustumOffsetPitch = loadSetting(settings, "viewFrustumOffsetPitch" , 0.0f); + _viewFrustumOffsetRoll = loadSetting(settings, "viewFrustumOffsetRoll" , 0.0f); + _viewFrustumOffsetDistance = loadSetting(settings, "viewFrustumOffsetDistance", 0.0f); + _viewFrustumOffsetUp = loadSetting(settings, "viewFrustumOffsetUp" , 0.0f); + settings->endGroup(); + + scanMenuBar(&Application::loadAction, settings); + getAvatar()->loadData(settings); } -void Application::saveSettings(QSettings* set) { - if (!set) set = getSettings(); - set->setValue("headCameraPitchYawScale", _headCameraPitchYawScale); - scanMenuBar(&Application::saveAction, set); - getAvatar()->saveData(set); +void Application::saveSettings(QSettings* settings) { + if (!settings) settings = getSettings(); + + settings->setValue("headCameraPitchYawScale", _headCameraPitchYawScale); + + settings->beginGroup("View Frustum Offset Camera"); + settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffsetYaw); + settings->setValue("viewFrustumOffsetPitch", _viewFrustumOffsetPitch); + settings->setValue("viewFrustumOffsetRoll", _viewFrustumOffsetRoll); + settings->setValue("viewFrustumOffsetDistance", _viewFrustumOffsetDistance); + settings->setValue("viewFrustumOffsetUp", _viewFrustumOffsetUp); + settings->endGroup(); + + scanMenuBar(&Application::saveAction, settings); + getAvatar()->saveData(settings); } void Application::importSettings() { diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index e5c5a76a70..32b35aebac 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -1212,22 +1212,20 @@ void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { } +void Avatar::loadData(QSettings* settings) { + settings->beginGroup("Avatar"); - -void Avatar::loadData(QSettings* set) { - set->beginGroup("Avatar"); + // in case settings is corrupt or missing loadSetting() will check for NaN + _bodyYaw = loadSetting(settings, "bodyYaw" , 0.0f); + _bodyPitch = loadSetting(settings, "bodyPitch", 0.0f); + _bodyRoll = loadSetting(settings, "bodyRoll" , 0.0f); + _position.x = loadSetting(settings, "position_x", 0.0f); + _position.y = loadSetting(settings, "position_y", 0.0f); + _position.z = loadSetting(settings, "position_z", 0.0f); - _bodyYaw = set->value("bodyYaw", _bodyYaw).toFloat(); - _bodyPitch = set->value("bodyPitch", _bodyPitch).toFloat(); - _bodyRoll = set->value("bodyRoll", _bodyRoll).toFloat(); + _voxels.setVoxelURL(settings->value("voxelURL").toUrl()); - _position.x = set->value("position_x", _position.x).toFloat(); - _position.y = set->value("position_y", _position.y).toFloat(); - _position.z = set->value("position_z", _position.z).toFloat(); - - _voxels.setVoxelURL(set->value("voxelURL").toUrl()); - - set->endGroup(); + settings->endGroup(); } void Avatar::getBodyBallTransform(AvatarJointID jointID, glm::vec3& position, glm::quat& rotation) const { diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 9a31af93f4..5c9d0c8984 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -498,6 +498,16 @@ void runTimingTests() { } +float loadSetting(QSettings* settings, const char* name, float defaultValue) { + float value = settings->value(name, 0.0f).toFloat(); + if (isnan(value)) { + value = defaultValue; + } + return value; +} + + + diff --git a/interface/src/Util.h b/interface/src/Util.h index 3e084fd16d..6cac785956 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -17,6 +17,7 @@ #include #include +#include // the standard sans serif font family #define SANS_FONT_FAMILY "Helvetica" @@ -66,4 +67,7 @@ void renderCircle(glm::vec3 position, float radius, glm::vec3 surfaceNormal, int void runTimingTests(); + +float loadSetting(QSettings* settings, const char* name, float defaultValue); + #endif