Move "Advanced Camera View" into Preferences -> Move & View -> View and make things work properly

meow-7.2.2
Ansariel 2018-06-05 16:13:26 +02:00
parent efa8baca1d
commit 0f20304d76
7 changed files with 328 additions and 38 deletions

View File

@ -1010,6 +1010,9 @@ void LLFloaterPreference::apply()
// <FS:Ansariel> Fix resetting graphics preset on cancel; Save preset here because cancel() gets called in either way!
saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive"));
// <FS:Ansariel> Fix resetting camera preset on cancel
saveCameraPreset(gSavedSettings.getString("PresetCameraActive"));
}
void LLFloaterPreference::cancel()
@ -1069,6 +1072,14 @@ void LLFloaterPreference::cancel()
gSavedSettings.setString("PresetGraphicActive", mSavedGraphicsPreset);
LLPresetsManager::getInstance()->triggerChangeSignal();
}
// <FS:Ansariel> Fix resetting camera preset on cancel
if (mSavedCameraPreset != gSavedSettings.getString("PresetCameraActive"))
{
gSavedSettings.setString("PresetCameraActive", mSavedCameraPreset);
LLPresetsManager::getInstance()->triggerChangeCameraSignal();
}
// </FS:Ansariel>
}
void LLFloaterPreference::onOpen(const LLSD& key)
@ -1230,6 +1241,9 @@ void LLFloaterPreference::onOpen(const LLSD& key)
// <FS:Ansariel> Fix resetting graphics preset on cancel
saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive"));
// <FS:Ansariel> Fix resetting camera preset on cancel
saveCameraPreset(gSavedSettings.getString("PresetCameraActive"));
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//bool started = (LLStartUp::getStartupState() == STATE_STARTED);
@ -4154,6 +4168,27 @@ BOOL LLPanelPreferenceView::postBuild()
presetsMgr->createMissingDefault(PRESETS_CAMERA); // a no-op after the first time, but that's ok
}
// <FS:Ansariel> Hook up camera and focus spin controls
mSpinnerCameraX = getChild<LLSpinCtrl>("camera_x");
mSpinnerCameraY = getChild<LLSpinCtrl>("camera_y");
mSpinnerCameraZ = getChild<LLSpinCtrl>("camera_z");
mSpinnerFocusX = getChild<LLSpinCtrl>("focus_x");
mSpinnerFocusY = getChild<LLSpinCtrl>("focus_y");
mSpinnerFocusZ = getChild<LLSpinCtrl>("focus_z");
mSpinnerCameraX->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraX, this));
mSpinnerCameraY->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraY, this));
mSpinnerCameraZ->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraZ, this));
mSpinnerFocusX->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusX, this));
mSpinnerFocusY->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusY, this));
mSpinnerFocusZ->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusZ, this));
gSavedSettings.getControl("CameraOffsetRearView")->getSignal()->connect(boost::bind(&LLPanelPreferenceView::refreshCameraSettings, this));
gSavedSettings.getControl("FocusOffsetRearView")->getSignal()->connect(boost::bind(&LLPanelPreferenceView::refreshCameraSettings, this));
refreshCameraSettings();
// </FS:Ansariel>
return LLPanelPreference::postBuild();
}
@ -4167,42 +4202,47 @@ void LLPanelPreferenceView::onPresetsListChangeCamera()
setPresetText();
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance && !gSavedSettings.getString("PresetCameraActive").empty())
{
instance->saveSettings(); //make cancel work correctly after changing the preset
}
// <FS:Ansariel> Fix resetting camera preset on cancel
//LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
//if (instance && !gSavedSettings.getString("PresetCameraActive").empty())
//{
// instance->saveSettings(); //make cancel work correctly after changing the preset
//}
// </FS:Ansariel>
}
void LLPanelPreferenceView::draw()
{
setPresetText();
// <FS:Ansariel> Fix resetting camera preset on cancel
//setPresetText();
LLPanelPreference::draw();
}
void LLPanelPreferenceView::setPresetText()
{
LLTextBox* preset_text = getChild<LLTextBox>("preset_camera_text");
static LLTextBox* preset_text = getChild<LLTextBox>("preset_camera_text");
std::string preset_camera_active = gSavedSettings.getString("PresetCameraActive");
if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText())
{
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance)
{
instance->saveCameraPreset(preset_camera_active);
}
}
// <FS:Ansariel> Fix resetting camera preset on cancel
//if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText())
//{
// LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
// if (instance)
// {
// instance->saveCameraPreset(preset_camera_active);
// }
//}
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
if (presetsMgr)
{
if (presetsMgr->isCameraDirty() && !preset_camera_active.empty())
{
preset_camera_active.clear();
}
}
//LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
//if (presetsMgr)
//{
// if (presetsMgr->isCameraDirty() && !preset_camera_active.empty())
// {
// preset_camera_active.clear();
// }
//}
// </FS:Ansariel>
if (!preset_camera_active.empty())
{
@ -4218,6 +4258,69 @@ void LLPanelPreferenceView::setPresetText()
}
}
// <FS:Ansariel> Hook up camera and focus spin controls
void LLPanelPreferenceView::onChangeCameraX()
{
LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView");
camera.mV[VX] = mSpinnerCameraX->getValueF32();
mSpinnerCameraX->setValue(camera.mV[VX]);
gSavedSettings.setVector3("CameraOffsetRearView", camera);
}
void LLPanelPreferenceView::onChangeCameraY()
{
LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView");
camera.mV[VY] = mSpinnerCameraY->getValueF32();
mSpinnerCameraY->setValue(camera.mV[VY]);
gSavedSettings.setVector3("CameraOffsetRearView", camera);
}
void LLPanelPreferenceView::onChangeCameraZ()
{
LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView");
camera.mV[VZ] = mSpinnerCameraZ->getValueF32();
mSpinnerCameraZ->setValue(camera.mV[VZ]);
gSavedSettings.setVector3("CameraOffsetRearView", camera);
}
void LLPanelPreferenceView::onChangeFocusX()
{
LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView");
focus.mdV[VX] = mSpinnerFocusX->getValueF32();
mSpinnerFocusX->setValue(focus.mdV[VX]);
gSavedSettings.setVector3d("FocusOffsetRearView", focus);
}
void LLPanelPreferenceView::onChangeFocusY()
{
LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView");
focus.mdV[VY] = mSpinnerFocusY->getValueF32();
mSpinnerFocusY->setValue(focus.mdV[VY]);
gSavedSettings.setVector3d("FocusOffsetRearView", focus);
}
void LLPanelPreferenceView::onChangeFocusZ()
{
LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView");
focus.mdV[VZ] = mSpinnerFocusZ->getValueF32();
mSpinnerFocusZ->setValue(focus.mdV[VZ]);
gSavedSettings.setVector3d("FocusOffsetRearView", focus);
}
void LLPanelPreferenceView::refreshCameraSettings()
{
LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView");
mSpinnerCameraX->setValue(camera.mV[VX]);
mSpinnerCameraY->setValue(camera.mV[VY]);
mSpinnerCameraZ->setValue(camera.mV[VZ]);
LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView");
mSpinnerFocusX->setValue(focus.mdV[VX]);
mSpinnerFocusY->setValue(focus.mdV[VY]);
mSpinnerFocusZ->setValue(focus.mdV[VZ]);
}
// </FS:Ansariel>
BOOL LLPanelPreferenceGraphics::postBuild()
{
// <FS:Ansariel> Improved graphics preferences

View File

@ -57,6 +57,7 @@ class LLSD;
class LLTextBox;
class LLComboBox;
class LLLineEditor;
class LLSpinCtrl;
typedef std::map<std::string, std::string> notifications_map;
@ -368,6 +369,24 @@ public:
private:
void onPresetsListChangeCamera();
LOG_CLASS(LLPanelPreferenceView);
// <FS:Ansariel> Hook up camera and focus spin controls
LLSpinCtrl* mSpinnerCameraX;
LLSpinCtrl* mSpinnerCameraY;
LLSpinCtrl* mSpinnerCameraZ;
LLSpinCtrl* mSpinnerFocusX;
LLSpinCtrl* mSpinnerFocusY;
LLSpinCtrl* mSpinnerFocusZ;
void onChangeCameraX();
void onChangeCameraY();
void onChangeCameraZ();
void onChangeFocusX();
void onChangeFocusY();
void onChangeFocusZ();
void refreshCameraSettings();
// </FS:Ansariel>
};
class LLPanelPreferenceGraphics : public LLPanelPreference

View File

@ -66,7 +66,8 @@ BOOL LLPanelPresetsCameraPulldown::postBuild()
// Make sure there is a default preference file
presetsMgr->createMissingDefault(PRESETS_CAMERA);
presetsMgr->startWatching(PRESETS_CAMERA);
// <FS:Ansariel> Done in LLPresetsManager ctor
//presetsMgr->startWatching(PRESETS_CAMERA);
presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this));
}

View File

@ -52,6 +52,10 @@ LLPresetsManager::LLPresetsManager()
// This works, because the LLPresetsManager instance is created in the
// STATE_WORLD_INIT phase during startup when the status bar is initialized
initGraphicPresetControls();
// <FS:Ansariel> Start watching camera controls as soon as the preset
// manager gets initialized
startWatching(PRESETS_CAMERA);
}
LLPresetsManager::~LLPresetsManager()
@ -280,7 +284,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
}
else if(PRESETS_CAMERA == subdirectory)
{
gSavedSettings.setString("PresetGraphicActive", name);
gSavedSettings.setString("PresetCameraActive", name);
name_list.clear();
getControlNames(name_list);

View File

@ -3,10 +3,19 @@
<tab_container label="Move and View" name="tabs">
<!--View-->
<panel label="Ansicht" name="tab-view">
<text name="preset_camera_label" width="130">
Aktuelle Voreinstellung:
</text>
<slider label="Sichtwinkel" name="camera_fov"/>
<slider label="Abstand" name="camera_offset_scale"/>
<slider label="Übergangszeit" name="camera_transition_time"/>
<slider label="Glättung" name="camera_position_smoothing"/>
<text name="camera_offset_label" tool_tip="Initialer Kamera-Abstand vom Avatar in der Rückansicht">
Kamera-Abstand:
</text>
<text name="camera_focus_offset_label" tool_tip="Initialer Fokuspunkt-Abstand relativ zum Avatar für die Kamera in der Rückansicht (X-Achse ist vorwärts)">
Fokus-Abstand:
</text>
<check_box label="Kamerabeschränkungen aufheben" name="DisableCameraConstraints" tool_tip="Erlaubt die Bewegungen der Kamera außerhalb der normalen Grenzen und der Erdoberfläche"/>
<check_box label="Mausrad nicht zum Zoomen verwenden" name="FSDisableMouseWheelCameraZoom"/>
<text name="heading2">
@ -16,6 +25,12 @@
<check_box label="Aussehen" name="appearance_camera_movement" tool_tip="Automatische Kamerapositionierung im Bearbeitenmodus verwenden"/>
<check_box label="Zusätzliche Beleuchtung" name="EditAppearanceLighting" tool_tip="Aktiviert die zusätzliche Beleuchtung, wenn die Form des Avatars bearbeitet wird."/>
<check_box label="Visuelle Hilfen" name="FSAppearanceShowHints" tool_tip="Aktiviert die visuellen Hilfen, die die Teile des Avatars anzeigen, die modifiziert werden."/>
<text name="presets_buttons_label" width="100">
Voreinstellungen:
</text>
<button label="Speichern" name="PrefCameraSaveButton"/>
<button label="Laden" name="PrefCameraLoadButton"/>
<button label="Löschen" name="PrefCameraDeleteButton"/>
<check_box label="Klick auf Avatar hält Kameraposition" name="clickonavatarkeepscamera" tool_tip="Normalerweise wird die Kameraposition beim Anklicken des Avatars zurückgesetzt. Diese Option verhindert dieses Verhalten."/>
<check_box label="Kameraposition nach Teleport zurücksetzen (innerhalb einer Region)" name="FSResetCameraOnTP" tool_tip="Normalerweise wird die Kameraposition beim Teleportieren zurückgesetzt. Diese Option verhindert dieses Verhalten."/>
<check_box label="Kameraposition bei Avatarbewegung zurücksetzen" name="FSResetCameraOnMovement"/>

View File

@ -146,13 +146,6 @@ https://accounts.secondlife.com/change_email/
layout="topleft"
help_topic="preferences_move_tab"
name="move" />
<panel
class="panel_preference_view"
filename="panel_preferences_view.xml"
label="View"
layout="topleft"
help_topic="preferences_view_tab"
name="view" />
<panel
class="panel_preference"
filename="panel_preferences_alerts.xml"

View File

@ -39,8 +39,27 @@
mouse_opaque="false"
visible="true"
width="18"
left="20"
left="10"
top="10"/>
<text
follows="top|left|right"
height="16"
layout="topleft"
left="38"
name="preset_camera_label"
top_delta="0"
width="75">
Preset in use:
</text>
<text
follows="top|left|right"
height="16"
layout="topleft"
left_pad="10"
name="preset_camera_text"
width="120">
(None)
</text>
<slider
can_edit_text="true"
control_name="CameraAngle"
@ -52,11 +71,12 @@
layout="topleft"
label_width="100"
label="View angle"
left_pad="20"
left="38"
max_val="2.97"
min_val="0.17"
name="camera_fov"
show_text="true"
top_pad="5"
width="275" />
<slider
can_edit_text="true"
@ -112,13 +132,99 @@
show_text="true"
width="275"
top_pad="5"/>
<text
follows="top|left|right"
height="16"
layout="topleft"
left="322"
name="camera_offset_label"
tool_tip="Initial camera offset from avatar in Rear View"
top="10"
width="100">
Camera offset:
</text>
<spinner
height="20"
label="X"
label_width="10"
follows="top|left"
left="322"
name="camera_x"
top_pad="5"
min_val="-1e+007"
max_val="1e+007"
width="67"/>
<spinner
height="20"
label="Y"
label_width="10"
follows="top|left"
name="camera_y"
left_pad="4"
min_val="-1e+007"
max_val="1e+007"
width="67"/>
<spinner
height="20"
label="Z"
label_width="10"
follows="top|left"
name="camera_z"
left_pad="4"
min_val="-1e+007"
max_val="1e+007"
width="67"/>
<text
follows="top|left|right"
height="16"
layout="topleft"
left="322"
name="camera_focus_offset_label"
tool_tip="Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward)"
top_pad="18"
width="100">
Focus offset:
</text>
<spinner
height="20"
label="X"
label_width="10"
follows="top|left"
left="322"
name="focus_x"
top_pad="5"
min_val="-1e+007"
max_val="1e+007"
width="67"/>
<spinner
height="20"
label="Y"
label_width="10"
follows="top|left"
name="focus_y"
left_pad="4"
min_val="-1e+007"
max_val="1e+007"
width="67"/>
<spinner
height="20"
label="Z"
label_width="10"
follows="top|left"
name="focus_z"
left_pad="4"
min_val="-1e+007"
max_val="1e+007"
width="67"/>
<check_box
control_name="DisableCameraConstraints"
height="16"
initial_value="true"
label="Disable camera constraints"
layout="topleft"
left_delta="0"
left="35"
name="DisableCameraConstraints"
tool_tip="Set this to move your camera beyond its normal bounds and below land level. If you are not good at moving the camera, more of your shots may be at bad angles."
top_pad="10"
@ -136,10 +242,10 @@
type="string"
length="1"
height="10"
left="80"
left="55"
name="heading2"
width="300"
top_pad="10">
top_pad="8">
Automatically pose avatar during (select one or more):
</text>
<check_box
@ -183,7 +289,56 @@
name="FSAppearanceShowHints"
tool_tip="Enable or disable the visual hints showing the avatar parts being modified."
width="150" />
<text
follows="left|top"
type="string"
length="1"
height="10"
left="38"
name="presets_buttons_label"
width="50"
top_pad="10">
Presets:
</text>
<button
follows="top|left"
height="23"
label="Save"
layout="topleft"
left_pad="5"
name="PrefCameraSaveButton"
top_delta="-4"
width="115">
<button.commit_callback
function="Pref.PrefSave"
parameter="camera" />
</button>
<button
follows="top|left"
height="23"
label="Load"
layout="topleft"
left_pad="10"
name="PrefCameraLoadButton"
top_delta="0"
width="115">
<button.commit_callback
function="Pref.PrefLoad"
parameter="camera"/>
</button>
<button
follows="top|left"
height="23"
label="Delete"
layout="topleft"
left_pad="10"
name="PrefCameraDeleteButton"
top_delta="0"
width="115">
<button.commit_callback
function="Pref.PrefDelete"
parameter="camera"/>
</button>
<check_box
top_pad="10"
follows="left|top"