Ansariel 2020-05-19 21:50:44 +02:00
commit 13086737cc
171 changed files with 4704 additions and 2289 deletions

View File

@ -221,6 +221,7 @@ Ansariel Hiller
STORM-2151
MAINT-6917
MAINT-8085
STORM-2145
MAINT-8723
SL-10385
SL-10891
@ -799,6 +800,7 @@ Jonathan Yap
STORM-2100
STORM-2104
STORM-2142
STORM-2145
SL-10089
Kadah Coba
STORM-1060
@ -1528,6 +1530,7 @@ Whirly Fizzle
STORM-1930
BUG-6659
STORM-2078
BUG-17349
Whoops Babii
VWR-631
VWR-1640

View File

@ -585,10 +585,10 @@ bool LLGLManager::initGL()
// Extract video card strings and convert to upper case to
// work around driver-to-driver variation in capitalization.
mGLVendor = std::string((const char *)glGetString(GL_VENDOR));
mGLVendor = ll_safe_string((const char *)glGetString(GL_VENDOR));
LLStringUtil::toUpper(mGLVendor);
mGLRenderer = std::string((const char *)glGetString(GL_RENDERER));
mGLRenderer = ll_safe_string((const char *)glGetString(GL_RENDERER));
LLStringUtil::toUpper(mGLRenderer);
parse_gl_version( &mDriverVersionMajor,
@ -892,9 +892,9 @@ void LLGLManager::getGLInfo(LLSD& info)
}
else
{
info["GLInfo"]["GLVendor"] = std::string((const char *)glGetString(GL_VENDOR));
info["GLInfo"]["GLRenderer"] = std::string((const char *)glGetString(GL_RENDERER));
info["GLInfo"]["GLVersion"] = std::string((const char *)glGetString(GL_VERSION));
info["GLInfo"]["GLVendor"] = ll_safe_string((const char *)glGetString(GL_VENDOR));
info["GLInfo"]["GLRenderer"] = ll_safe_string((const char *)glGetString(GL_RENDERER));
info["GLInfo"]["GLVersion"] = ll_safe_string((const char *)glGetString(GL_VERSION));
}
#if !LL_MESA_HEADLESS
@ -944,9 +944,9 @@ void LLGLManager::printGLInfoString()
}
else
{
LL_INFOS("RenderInit") << "GL_VENDOR: " << ((const char *)glGetString(GL_VENDOR)) << LL_ENDL;
LL_INFOS("RenderInit") << "GL_RENDERER: " << ((const char *)glGetString(GL_RENDERER)) << LL_ENDL;
LL_INFOS("RenderInit") << "GL_VERSION: " << ((const char *)glGetString(GL_VERSION)) << LL_ENDL;
LL_INFOS("RenderInit") << "GL_VENDOR: " << ll_safe_string((const char *)glGetString(GL_VENDOR)) << LL_ENDL;
LL_INFOS("RenderInit") << "GL_RENDERER: " << ll_safe_string((const char *)glGetString(GL_RENDERER)) << LL_ENDL;
LL_INFOS("RenderInit") << "GL_VERSION: " << ll_safe_string((const char *)glGetString(GL_VERSION)) << LL_ENDL;
}
#if !LL_MESA_HEADLESS

View File

@ -99,6 +99,7 @@ LLButton::Params::Params()
mouse_down_callback("mouse_down_callback"),
mouse_up_callback("mouse_up_callback"),
mouse_held_callback("mouse_held_callback"),
is_toggled_callback("is_toggled_callback"), // <FS:Ansariel> Toggle callback check
is_toggle("is_toggle", false),
scale_image("scale_image", true),
hover_glow_amount("hover_glow_amount"),
@ -183,8 +184,9 @@ LLButton::LLButton(const LLButton::Params& p)
//mFlashingTimer(NULL)
mFlashingTimer(NULL),
mCheckboxControl(p.checkbox_control),
mCheckboxControlPanel(NULL)
mCheckboxControlPanel(NULL),
// </FS:Zi>
mIsToggledSignal(NULL) // <FS:Ansariel> Toggle callback check
{
if (p.button_flash_enable)
{
@ -283,6 +285,12 @@ LLButton::LLButton(const LLButton::Params& p)
{
setHeldDownCallback(initCommitCallback(p.mouse_held_callback));
}
// <FS:Ansariel> Toggle callback check
if (p.is_toggled_callback.isProvided())
{
setIsToggledCallback(initEnableCallback(p.is_toggled_callback));
}
// <FS:Ansariel>
if (p.badge.isProvided())
{
@ -295,6 +303,7 @@ LLButton::~LLButton()
delete mMouseDownSignal;
delete mMouseUpSignal;
delete mHeldDownSignal;
delete mIsToggledSignal; // <FS:Ansariel> Toggle callback check
if (mFlashingTimer)
{
@ -372,6 +381,18 @@ boost::signals2::connection LLButton::setHeldDownCallback( const commit_signal_t
return mHeldDownSignal->connect(cb);
}
// <FS:Ansariel> Toggle callback check
boost::signals2::connection LLButton::setIsToggledCallback(const EnableCallbackParam& cb)
{
return setIsToggledCallback(initEnableCallback(cb));
}
boost::signals2::connection LLButton::setIsToggledCallback(const enable_signal_t::slot_type& cb)
{
if (!mIsToggledSignal) mIsToggledSignal = new enable_signal_t();
return mIsToggledSignal->connect(cb);
}
// <FS:Ansariel>
// *TODO: Deprecate (for backwards compatibility only)
boost::signals2::connection LLButton::setClickedCallback( button_callback_t cb, void* data )
@ -781,6 +802,13 @@ void LLButton::draw()
// Figure out appropriate color for the text
LLColor4 label_color;
// <FS:Ansariel> Toggle callback check
if (mIsToggledSignal)
{
setToggleState((*mIsToggledSignal)(this, LLSD()));
}
// </FS:Ansariel>
// label changes when button state changes, not when pressed
if ( enabled )
{

View File

@ -141,6 +141,8 @@ public:
Optional<std::string> checkbox_control; // <FS:Zi> Add checkbox control toggle
Optional<EnableCallbackParam> is_toggled_callback; // <FS:Ansariel> Toggle callback check
Params();
};
@ -188,6 +190,10 @@ public:
// Passes a 'count' parameter in the commit param payload, i.e. param["count"])
boost::signals2::connection setHeldDownCallback( const commit_signal_t::slot_type& cb ); // Mouse button held down and in button
// <FS:Ansariel> Toggle callback check
boost::signals2::connection setIsToggledCallback(const EnableCallbackParam& cb);
boost::signals2::connection setIsToggledCallback(const enable_signal_t::slot_type& cb);
// *TODO: Deprecate (for backwards compatability only)
boost::signals2::connection setClickedCallback( button_callback_t cb, void* data );
@ -307,6 +313,8 @@ protected:
commit_signal_t* mMouseDownSignal;
commit_signal_t* mMouseUpSignal;
commit_signal_t* mHeldDownSignal;
enable_signal_t* mIsToggledSignal; // <FS:Ansariel> Toggle callback check
const LLFontGL* mGLFont;

View File

@ -1,5 +1,4 @@
/**
* @file llfloater.cpp
* @brief LLFloater base class
*

View File

@ -228,7 +228,7 @@ public:
virtual void setColor(const LLColor4& color);
// Ansariel: Changed to virtual. We might want to change the transparency ourself!
virtual F32 getCurrentTransparency();
virtual F32 getCurrentTransparency();
void setTransparencyType(ETypeTransparency type);
ETypeTransparency getTransparencyType() const {return mTransparencyType;}

View File

@ -40,6 +40,7 @@
#include "v4coloru.h"
#include "v4color.h"
#include "v3color.h"
#include "llquaternion.h"
#include "llrect.h"
#include "llxmltree.h"
#include "llsdserialize.h"
@ -125,6 +126,9 @@ bool LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
case TYPE_VEC3D:
result = LLVector3d(a) == LLVector3d(b);
break;
case TYPE_QUAT:
result = LLQuaternion(a) == LLQuaternion(b);
break;
case TYPE_RECT:
result = LLRect(a) == LLRect(b);
break;
@ -432,6 +436,7 @@ const std::string LLControlGroup::mTypeString[TYPE_COUNT] = { "U32"
,"String"
,"Vector3"
,"Vector3D"
,"Quaternion"
,"Rect"
,"Color4"
,"Color3"
@ -625,6 +630,11 @@ LLControlVariable* LLControlGroup::declareVec3d(const std::string& name, const L
return declareControl(name, TYPE_VEC3D, initial_val.getValue(), comment, SANITY_TYPE_NONE, LLSD(), std::string(""), persist);
}
LLControlVariable* LLControlGroup::declareQuat(const std::string& name, const LLQuaternion &initial_val, const std::string& comment, LLControlVariable::ePersist persist)
{
return declareControl(name, TYPE_QUAT, initial_val.getValue(), comment, SANITY_TYPE_NONE, LLSD(), std::string(""), persist);
}
LLControlVariable* LLControlGroup::declareRect(const std::string& name, const LLRect &initial_val, const std::string& comment, LLControlVariable::ePersist persist)
{
return declareControl(name, TYPE_RECT, initial_val.getValue(), comment, SANITY_TYPE_NONE, LLSD(), std::string(""), persist);
@ -702,6 +712,11 @@ LLVector3d LLControlGroup::getVector3d(const std::string& name)
return get<LLVector3d>(name);
}
LLQuaternion LLControlGroup::getQuaternion(const std::string& name)
{
return get<LLQuaternion>(name);
}
LLRect LLControlGroup::getRect(const std::string& name)
{
return get<LLRect>(name);
@ -779,6 +794,11 @@ void LLControlGroup::setVector3d(const std::string& name, const LLVector3d &val)
set(name, val);
}
void LLControlGroup::setQuaternion(const std::string& name, const LLQuaternion &val)
{
set(name, val);
}
void LLControlGroup::setRect(const std::string& name, const LLRect &val)
{
set(name, val);
@ -961,6 +981,16 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require
validitems++;
}
break;
case TYPE_QUAT:
{
LLQuaternion quat;
child_nodep->getAttributeQuat("value", quat);
control->set(quat.getValue());
validitems++;
}
break;
case TYPE_RECT:
{
//RN: hack to support reading rectangles from a string
@ -1317,6 +1347,11 @@ template <> eControlType get_control_type<LLVector3d>()
return TYPE_VEC3D;
}
template <> eControlType get_control_type<LLQuaternion>()
{
return TYPE_QUAT;
}
template <> eControlType get_control_type<LLRect>()
{
return TYPE_RECT;
@ -1352,6 +1387,10 @@ template <> LLSD convert_to_llsd<LLVector3d>(const LLVector3d& in)
{
return in.getValue();
}
template <> LLSD convert_to_llsd<LLQuaternion>(const LLQuaternion& in)
{
return in.getValue();
}
template <> LLSD convert_to_llsd<LLRect>(const LLRect& in)
{
@ -1464,6 +1503,18 @@ LLVector3d convert_from_llsd<LLVector3d>(const LLSD& sd, eControlType type, cons
}
}
template<>
LLQuaternion convert_from_llsd<LLQuaternion>(const LLSD& sd, eControlType type, const std::string& control_name)
{
if (type == TYPE_QUAT)
return (LLQuaternion)sd;
else
{
CONTROL_ERRS << "Invalid LLQuaternion value for " << control_name << ": " << LLControlGroup::typeEnumToString(type) << " " << sd << LL_ENDL;
return LLQuaternion();
}
}
template<>
LLRect convert_from_llsd<LLRect>(const LLSD& sd, eControlType type, const std::string& control_name)
{

View File

@ -65,6 +65,7 @@
class LLVector3;
class LLVector3d;
class LLQuaternion;
class LLColor4;
class LLColor3;
@ -78,6 +79,7 @@ typedef enum e_control_type
TYPE_STRING,
TYPE_VEC3,
TYPE_VEC3D,
TYPE_QUAT,
TYPE_RECT,
TYPE_COL4,
TYPE_COL3,
@ -262,6 +264,7 @@ public:
LLControlVariable* declareString(const std::string& name, const std::string &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
LLControlVariable* declareVec3(const std::string& name, const LLVector3 &initial_val,const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
LLControlVariable* declareVec3d(const std::string& name, const LLVector3d &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
LLControlVariable* declareQuat(const std::string& name, const LLQuaternion &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
LLControlVariable* declareRect(const std::string& name, const LLRect &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
LLControlVariable* declareColor4(const std::string& name, const LLColor4 &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
LLControlVariable* declareColor3(const std::string& name, const LLColor3 &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
@ -276,10 +279,10 @@ public:
LLWString getWString(const std::string& name);
LLVector3 getVector3(const std::string& name);
LLVector3d getVector3d(const std::string& name);
LLVector3d getVector3d(const std::string& name);
LLRect getRect(const std::string& name);
LLSD getLLSD(const std::string& name);
LLQuaternion getQuaternion(const std::string& name);
LLColor4 getColor(const std::string& name);
LLColor4 getColor4(const std::string& name);
@ -312,6 +315,7 @@ public:
void setString(const std::string& name, const std::string& val);
void setVector3(const std::string& name, const LLVector3 &val);
void setVector3d(const std::string& name, const LLVector3d &val);
void setQuaternion(const std::string& name, const LLQuaternion &val);
void setRect(const std::string& name, const LLRect &val);
void setColor4(const std::string& name, const LLColor4 &val);
void setLLSD(const std::string& name, const LLSD& val);
@ -481,7 +485,8 @@ template <> eControlType get_control_type<bool>();
//template <> eControlType get_control_type<BOOL> ()
template <> eControlType get_control_type<std::string>();
template <> eControlType get_control_type<LLVector3>();
template <> eControlType get_control_type<LLVector3d>();
template <> eControlType get_control_type<LLVector3d>();
template <> eControlType get_control_type<LLQuaternion>();
template <> eControlType get_control_type<LLRect>();
template <> eControlType get_control_type<LLColor4>();
template <> eControlType get_control_type<LLColor3>();
@ -489,7 +494,8 @@ template <> eControlType get_control_type<LLSD>();
template <> LLSD convert_to_llsd<U32>(const U32& in);
template <> LLSD convert_to_llsd<LLVector3>(const LLVector3& in);
template <> LLSD convert_to_llsd<LLVector3d>(const LLVector3d& in);
template <> LLSD convert_to_llsd<LLVector3d>(const LLVector3d& in);
template <> LLSD convert_to_llsd<LLQuaternion>(const LLQuaternion& in);
template <> LLSD convert_to_llsd<LLRect>(const LLRect& in);
template <> LLSD convert_to_llsd<LLColor4>(const LLColor4& in);
template <> LLSD convert_to_llsd<LLColor3>(const LLColor3& in);
@ -498,6 +504,7 @@ template<> std::string convert_from_llsd<std::string>(const LLSD& sd, eControlTy
template<> LLWString convert_from_llsd<LLWString>(const LLSD& sd, eControlType type, const std::string& control_name);
template<> LLVector3 convert_from_llsd<LLVector3>(const LLSD& sd, eControlType type, const std::string& control_name);
template<> LLVector3d convert_from_llsd<LLVector3d>(const LLSD& sd, eControlType type, const std::string& control_name);
template<> LLQuaternion convert_from_llsd<LLQuaternion>(const LLSD& sd, eControlType type, const std::string& control_name);
template<> LLRect convert_from_llsd<LLRect>(const LLSD& sd, eControlType type, const std::string& control_name);
template<> bool convert_from_llsd<bool>(const LLSD& sd, eControlType type, const std::string& control_name);
template<> S32 convert_from_llsd<S32>(const LLSD& sd, eControlType type, const std::string& control_name);

View File

@ -342,6 +342,7 @@ set(viewer_SOURCE_FILES
llfloaterbuycurrencyhtml.cpp
llfloaterbuyland.cpp
llfloatercamera.cpp
llfloatercamerapresets.cpp
llfloaterchatvoicevolume.cpp
llfloatercolorpicker.cpp
llfloaterconversationlog.cpp
@ -403,12 +404,14 @@ set(viewer_SOURCE_FILES
llfloaterperms.cpp
llfloaterpostprocess.cpp
llfloaterpreference.cpp
llfloaterpreferenceviewadvanced.cpp
llfloaterpreviewtrash.cpp
llfloaterproperties.cpp
llfloaterregiondebugconsole.cpp
llfloaterregioninfo.cpp
llfloaterreporter.cpp
llfloaterregionrestarting.cpp
llfloatersavecamerapreset.cpp
llfloatersaveprefpreset.cpp
llfloatersceneloadstats.cpp
llfloaterscriptdebug.cpp
@ -599,6 +602,7 @@ set(viewer_SOURCE_FILES
llpanelplaceprofile.cpp
llpanelplaces.cpp
llpanelplacestab.cpp
llpanelpresetscamerapulldown.cpp
llpanelpresetspulldown.cpp
llpanelprimmediacontrols.cpp
llpanelprofile.cpp
@ -612,6 +616,7 @@ set(viewer_SOURCE_FILES
llpaneltiptoast.cpp
llpanelvoiceeffect.cpp
llpaneltopinfobar.cpp
llpanelpulldown.cpp
llpanelvoicedevicesettings.cpp
llpanelvolume.cpp
llpanelvolumepulldown.cpp
@ -1103,6 +1108,7 @@ set(viewer_HEADER_FILES
llfloaterbuycurrency.h
llfloaterbuycurrencyhtml.h
llfloaterbuyland.h
llfloatercamerapresets.h
llfloatercamera.h
llfloaterchatvoicevolume.h
llfloatercolorpicker.h
@ -1168,12 +1174,14 @@ set(viewer_HEADER_FILES
llfloaterperms.h
llfloaterpostprocess.h
llfloaterpreference.h
llfloaterpreferenceviewadvanced.h
llfloaterpreviewtrash.h
llfloaterproperties.h
llfloaterregiondebugconsole.h
llfloaterregioninfo.h
llfloaterreporter.h
llfloaterregionrestarting.h
llfloatersavecamerapreset.h
llfloatersaveprefpreset.h
llfloatersceneloadstats.h
llfloaterscriptdebug.h
@ -1354,12 +1362,14 @@ set(viewer_HEADER_FILES
llpanelplaceprofile.h
llpanelplaces.h
llpanelplacestab.h
llpanelpresetscamerapulldown.h
llpanelpresetspulldown.h
llpanelprimmediacontrols.h
llpanelprofile.h
llpanelsnapshot.h
llpanelteleporthistory.h
llpaneltiptoast.h
llpanelpulldown.h
llpanelvoicedevicesettings.h
llpanelvoiceeffect.h
llpaneltopinfobar.h

View File

@ -1 +1 @@
6.4.2
6.4.3

View File

@ -0,0 +1,142 @@
<llsd>
<map>
<key>AppearanceCameraMovement</key>
<map>
<key>Comment</key>
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>AvatarSitRotation</key>
<map>
<key>Comment</key>
<string>Avatar real sitting rotation used in preset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Quaternion</string>
<key>Value</key>
<array>
<real>0</real>
<real>0</real>
<real>0</real>
<real>1</real>
</array>
</map>
<key>CameraAngle</key>
<map>
<key>Comment</key>
<string>Camera field of view angle (Radians)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.047197551</real>
</map>
<key>CameraOffsetBuild</key>
<map>
<key>Comment</key>
<string>Default camera position relative to focus point when entering build mode</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>-6</real>
<real>0</real>
<real>6</real>
</array>
</map>
<key>CameraOffsetRearView</key>
<map>
<key>Comment</key>
<string>Initial camera offset from avatar in Front View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>2.2</real>
<real>0.0</real>
<real>0.0</real>
</array>
</map>
<key>CameraOffsetScale</key>
<map>
<key>Comment</key>
<string>Scales the default offset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1</real>
</map>
<key>CameraZoomFraction</key>
<map>
<key>Comment</key>
<string>Mousewheel driven fraction of zoom</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.90322577953338623</real>
</map>
<key>EditCameraMovement</key>
<map>
<key>Comment</key>
<string>When entering build mode, camera moves up above avatar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FocusOffsetRearView</key>
<map>
<key>Comment</key>
<string>Initial focus point offset relative to avatar for the camera preset Front View (x-axis is forward)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3D</string>
<key>Value</key>
<array>
<real>0.0</real>
<real>0.0</real>
<real>0.0</real>
</array>
</map>
<key>PresetCameraActive</key>
<map>
<key>Comment</key>
<string>Name of currently selected preference</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>Default</string>
</map>
<key>TrackFocusObject</key>
<map>
<key>Comment</key>
<string>Camera tracks last object zoomed on</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
</map>
</llsd>

View File

@ -0,0 +1,142 @@
<llsd>
<map>
<key>AppearanceCameraMovement</key>
<map>
<key>Comment</key>
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>AvatarSitRotation</key>
<map>
<key>Comment</key>
<string>Avatar real sitting rotation used in preset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Quaternion</string>
<key>Value</key>
<array>
<real>0</real>
<real>0</real>
<real>0</real>
<real>1</real>
</array>
</map>
<key>CameraAngle</key>
<map>
<key>Comment</key>
<string>Camera field of view angle (Radians)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.047197551</real>
</map>
<key>CameraOffsetBuild</key>
<map>
<key>Comment</key>
<string>Default camera position relative to focus point when entering build mode</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>-6</real>
<real>0</real>
<real>6</real>
</array>
</map>
<key>CameraOffsetRearView</key>
<map>
<key>Comment</key>
<string>Initial camera offset from avatar in Rear View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>-3</real>
<real>0</real>
<real>0.75</real>
</array>
</map>
<key>CameraOffsetScale</key>
<map>
<key>Comment</key>
<string>Scales the default offset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1</real>
</map>
<key>CameraZoomFraction</key>
<map>
<key>Comment</key>
<string>Mousewheel driven fraction of zoom</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.90322577953338623</real>
</map>
<key>EditCameraMovement</key>
<map>
<key>Comment</key>
<string>When entering build mode, camera moves up above avatar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FocusOffsetRearView</key>
<map>
<key>Comment</key>
<string>Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3D</string>
<key>Value</key>
<array>
<real>1.0</real>
<real>0.0</real>
<real>1.0</real>
</array>
</map>
<key>PresetCameraActive</key>
<map>
<key>Comment</key>
<string>Name of currently selected preference</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>Default</string>
</map>
<key>TrackFocusObject</key>
<map>
<key>Comment</key>
<string>Camera tracks last object zoomed on</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
</map>
</llsd>

View File

@ -0,0 +1,142 @@
<llsd>
<map>
<key>AppearanceCameraMovement</key>
<map>
<key>Comment</key>
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>AvatarSitRotation</key>
<map>
<key>Comment</key>
<string>Avatar real sitting rotation used in preset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Quaternion</string>
<key>Value</key>
<array>
<real>0</real>
<real>0</real>
<real>0</real>
<real>1</real>
</array>
</map>
<key>CameraAngle</key>
<map>
<key>Comment</key>
<string>Camera field of view angle (Radians)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.047197551</real>
</map>
<key>CameraOffsetBuild</key>
<map>
<key>Comment</key>
<string>Default camera position relative to focus point when entering build mode</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>-6</real>
<real>0</real>
<real>6</real>
</array>
</map>
<key>CameraOffsetRearView</key>
<map>
<key>Comment</key>
<string>Initial camera offset from avatar in Side View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>-1.0</real>
<real>0.7</real>
<real>0.5</real>
</array>
</map>
<key>CameraOffsetScale</key>
<map>
<key>Comment</key>
<string>Scales the default offset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1</real>
</map>
<key>CameraZoomFraction</key>
<map>
<key>Comment</key>
<string>Mousewheel driven fraction of zoom</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.90322577953338623</real>
</map>
<key>EditCameraMovement</key>
<map>
<key>Comment</key>
<string>When entering build mode, camera moves up above avatar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FocusOffsetRearView</key>
<map>
<key>Comment</key>
<string>Initial focus point offset relative to avatar for the camera preset Side View (x-axis is forward)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3D</string>
<key>Value</key>
<array>
<real>1.5</real>
<real>0.7</real>
<real>1.0</real>
</array>
</map>
<key>PresetCameraActive</key>
<map>
<key>Comment</key>
<string>Name of currently selected preference</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>Default</string>
</map>
<key>TrackFocusObject</key>
<map>
<key>Comment</key>
<string>Camera tracks last object zoomed on</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
</map>
</llsd>

View File

@ -3046,6 +3046,21 @@
<real>0.5</real>
</array>
</map>
<key>CameraOffsetCustomPreset</key>
<map>
<key>Comment</key>
<string>Initial camera offset from avatar for the custom camera preset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3</string>
<key>Value</key>
<array>
<real>-3.0</real>
<real>0.0</real>
<real>0.75</real>
</array>
</map>
<key>CameraOffsetScale</key>
<map>
<key>Comment</key>
@ -3057,6 +3072,17 @@
<key>Value</key>
<real>1.0</real>
</map>
<key>CameraZoomFraction</key>
<map>
<key>Comment</key>
<string>Mousewheel driven fraction of zoom</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.9</real>
</map>
<key>CameraPosOnLogout</key>
<map>
<key>Comment</key>
@ -3094,7 +3120,7 @@
<key>Value</key>
<real>1.0</real>
</map>
<key>CameraPreset</key>
<key>CameraPreset</key> <!-- deprecated (see SL-12429) -->
<map>
<key>Comment</key>
<string>Preset camera position - view (0 - rear, 1 - front, 2 - group)</string>
@ -6468,6 +6494,37 @@
<real>1.0</real>
</array>
</map>
<key>FocusOffsetCustomPreset</key>
<map>
<key>Comment</key>
<string>Initial focus point offset relative to avatar for the custom camera preset (x-axis is forward)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Vector3D</string>
<key>Value</key>
<array>
<real>1.0</real>
<real>0.0</real>
<real>1.0</real>
</array>
</map>
<key>AvatarSitRotation</key>
<map>
<key>Comment</key>
<string>Avatar real sitting rotation used in preset</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Quaternion</string>
<key>Value</key>
<array>
<real>0</real>
<real>0</real>
<real>0</real>
<real>1</real>
</array>
</map>
<key>FocusPosOnLogout</key>
<map>
<key>Comment</key>
@ -14275,6 +14332,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>1</integer>
</map>
<key>BasicUITooltips</key>
<map>
<key>Comment</key>
<string>Show tooltips for various 2D UI elements like buttons or checkboxes, won't supress tooltips like drag'n'drop, inworld, links or media</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowHoverTips</key>
<map>
<key>Comment</key>
@ -21580,6 +21648,50 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>CameraOpacity</key>
<map>
<key>Comment</key>
<string>Opacity of the Camera Controls floater</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.0</real>
</map>
<key>PresetCameraActive</key>
<map>
<key>Comment</key>
<string>Name of currently selected preference</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>Rear View</string>
</map>
<key>CameraPresetType</key>
<map>
<key>Comment</key>
<string>Preset camera position - view (0 - rear, 1 - front, 2 - group, 3 - custom)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>HoverHeightAffectsCamera</key>
<map>
<key>Comment</key>
<string>Camera view is affected by Hover Height setting</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>CefVerboseLog</key>
<map>
<key>Comment</key>
@ -22582,17 +22694,6 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAlwaysOpaqueCameraControls</key>
<map>
<key>Comment</key>
<string>Show Camera Controls always opaque</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSEnableVolumeControls</key>
<map>
<key>Comment</key>

View File

@ -193,6 +193,9 @@ LLAgentCamera::LLAgentCamera() :
clearGeneralKeys();
clearOrbitKeys();
clearPanKeys();
resetPanDiff();
resetOrbitDiff();
}
// Requires gSavedSettings to be initialized.
@ -214,23 +217,18 @@ void LLAgentCamera::init()
mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild"));
mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPresetType");
mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView");
mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView");
mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("CameraOffsetGroupView");
// [RLVa:KB] - Checked: RLVa-2.0.0
mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("CameraOffsetRLVaView", LLVector3(mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
// [/RLVa:KB]
mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView");
mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView");
mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView");
// [RLVa:KB] - Checked: RLVa-2.0.0
mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("FocusOffsetRLVaView", LLVector3(mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
// [/RLVa:KB]
mCameraOffsetInitial = gSavedSettings.getControl("CameraOffsetRearView");
mFocusOffsetInitial = gSavedSettings.getControl("FocusOffsetRearView");
//// [RLVa:KB] - Checked: RLVa-2.0.0
// mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("CameraOffsetRLVaView", LLVector3(mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
// mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
//// [/RLVa:KB]
//// [RLVa:KB] - Checked: RLVa-2.0.0
// mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("FocusOffsetRLVaView", LLVector3(mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
// mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
//// [/RLVa:KB]
mCameraCollidePlane.clearVec();
mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale");
@ -379,7 +377,8 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera, BOOL moveme
mCameraFOVZoomFactor = 0.f;
}
resetPanDiff();
resetOrbitDiff();
mHUDTargetZoom = 1.f;
// <FS:CR> FIRE-8798: Option to prevent camera reset on movement
}
@ -764,7 +763,7 @@ BOOL LLAgentCamera::calcCameraMinDistance(F32 &obj_min_distance)
return TRUE;
}
F32 LLAgentCamera::getCameraZoomFraction()
F32 LLAgentCamera::getCameraZoomFraction(bool get_third_person)
{
// 0.f -> camera zoomed all the way out
// 1.f -> camera zoomed all the way in
@ -774,7 +773,7 @@ F32 LLAgentCamera::getCameraZoomFraction()
// already [0,1]
return mHUDTargetZoom;
}
else if (mFocusOnAvatar && cameraThirdPerson())
else if (get_third_person || (mFocusOnAvatar && cameraThirdPerson()))
{
return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f);
}
@ -882,6 +881,7 @@ void LLAgentCamera::cameraOrbitAround(const F32 radians)
}
else
{
mOrbitAroundRadians += radians;
mCameraFocusOffsetTarget.rotVec(radians, 0.f, 0.f, 1.f);
cameraZoomIn(1.f);
@ -913,12 +913,34 @@ void LLAgentCamera::cameraOrbitOver(const F32 angle)
LLVector3d left_axis;
left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD);
mOrbitOverAngle += angle_from_up - new_angle;
mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis);
cameraZoomIn(1.f);
}
}
void LLAgentCamera::resetCameraOrbit()
{
LLVector3 camera_offset_unit(mCameraFocusOffsetTarget);
camera_offset_unit.normalize();
LLVector3d left_axis;
left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
mCameraFocusOffsetTarget.rotVec(-mOrbitOverAngle, left_axis);
mCameraFocusOffsetTarget.rotVec(-mOrbitAroundRadians, 0.f, 0.f, 1.f);
cameraZoomIn(1.f);
resetOrbitDiff();
}
void LLAgentCamera::resetOrbitDiff()
{
mOrbitAroundRadians = 0;
mOrbitOverAngle = 0;
}
//-----------------------------------------------------------------------------
// cameraZoomIn()
//-----------------------------------------------------------------------------
@ -1082,6 +1104,8 @@ void LLAgentCamera::cameraPanIn(F32 meters)
LLVector3d at_axis;
at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis());
mPanFocusDiff += meters * at_axis;
mFocusTargetGlobal += meters * at_axis;
mFocusGlobal = mFocusTargetGlobal;
// don't enforce zoom constraints as this is the only way for users to get past them easily
@ -1098,6 +1122,8 @@ void LLAgentCamera::cameraPanLeft(F32 meters)
LLVector3d left_axis;
left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
mPanFocusDiff += meters * left_axis;
mFocusTargetGlobal += meters * left_axis;
mFocusGlobal = mFocusTargetGlobal;
@ -1118,6 +1144,8 @@ void LLAgentCamera::cameraPanUp(F32 meters)
LLVector3d up_axis;
up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis());
mPanFocusDiff += meters * up_axis;
mFocusTargetGlobal += meters * up_axis;
mFocusGlobal = mFocusTargetGlobal;
@ -1130,6 +1158,26 @@ void LLAgentCamera::cameraPanUp(F32 meters)
mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
}
void LLAgentCamera::resetCameraPan()
{
mFocusTargetGlobal -= mPanFocusDiff;
mFocusGlobal = mFocusTargetGlobal;
mCameraSmoothingStop = true;
cameraZoomIn(1.f);
updateFocusOffset();
mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
resetPanDiff();
}
void LLAgentCamera::resetPanDiff()
{
mPanFocusDiff.clear();
}
//-----------------------------------------------------------------------------
// updateLookAt()
//-----------------------------------------------------------------------------
@ -1691,7 +1739,7 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()
agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation();
}
focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, "");
focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial->get(), TYPE_VEC3D, "");
return focus_offset * agent_rot;
}
@ -1769,10 +1817,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
F32 camera_land_height;
LLVector3d frame_center_global = !isAgentAvatarValid() ?
gAgent.getPositionGlobal() :
// <FS:Ansariel> FIRE-15772: Adjusting Hover Height changes camera view when camera view is at default
//gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot->getWorldPosition());
gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot->getWorldPosition() - gAgentAvatarp->getHoverOffset() );
// </FS:Ansariel>
gAgent.getPosGlobalFromAgent(getAvatarRootPosition());
BOOL isConstrained = FALSE;
LLVector3d head_offset;
@ -1846,7 +1891,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
at_axis.mV[VZ] = 0.f;
at_axis.normalize();
gAgent.resetAxes(at_axis * ~parent_rot);
local_camera_offset = local_camera_offset * gAgent.getFrameAgent().getQuaternion() * parent_rot;
}
else
@ -2112,9 +2157,38 @@ bool LLAgentCamera::clampCameraPosition(LLVector3d& posCamGlobal, const LLVector
}
// [/RLVa:KB]
LLVector3 LLAgentCamera::getCurrentCameraOffset()
{
return (LLViewerCamera::getInstance()->getOrigin() - getAvatarRootPosition() - mThirdPersonHeadOffset) * ~getCurrentAvatarRotation();
}
LLVector3d LLAgentCamera::getCurrentFocusOffset()
{
return (mFocusTargetGlobal - gAgent.getPositionGlobal()) * ~getCurrentAvatarRotation();
}
LLQuaternion LLAgentCamera::getCurrentAvatarRotation()
{
LLViewerObject* sit_object = (LLViewerObject*)gAgentAvatarp->getParent();
LLQuaternion av_rot = gAgent.getFrameAgent().getQuaternion();
LLQuaternion obj_rot = sit_object ? sit_object->getRenderRotation() : LLQuaternion::DEFAULT;
return av_rot * obj_rot;
}
bool LLAgentCamera::isJoystickCameraUsed()
{
return ((mOrbitAroundRadians != 0) || (mOrbitOverAngle != 0) || !mPanFocusDiff.isNull());
}
LLVector3 LLAgentCamera::getCameraOffsetInitial()
{
return convert_from_llsd<LLVector3>(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, "");
return convert_from_llsd<LLVector3>(mCameraOffsetInitial->get(), TYPE_VEC3, "");
}
LLVector3d LLAgentCamera::getFocusOffsetInitial()
{
return convert_from_llsd<LLVector3d>(mFocusOffsetInitial->get(), TYPE_VEC3D, "");
}
// <FS:Ansariel> FIRE-23470: Fix camera controls zoom glitch
@ -2130,6 +2204,12 @@ F32 LLAgentCamera::getCameraMaxZoomDistance(bool allow_disabled_constraints /* =
LLWorld::getInstance()->getRegionWidthInMeters() - CAMERA_FUDGE_FROM_OBJECT);
}
LLVector3 LLAgentCamera::getAvatarRootPosition()
{
static LLCachedControl<bool> use_hover_height(gSavedSettings, "HoverHeightAffectsCamera");
return use_hover_height ? gAgentAvatarp->mRoot->getWorldPosition() : gAgentAvatarp->mRoot->getWorldPosition() - gAgentAvatarp->getHoverOffset();
}
//-----------------------------------------------------------------------------
// handleScrollWheel()
//-----------------------------------------------------------------------------
@ -2457,15 +2537,7 @@ void LLAgentCamera::changeCameraToThirdPerson(BOOL animate)
}
// Remove any pitch from the avatar
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
{
LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
at_axis = LLViewerCamera::getInstance()->getAtAxis();
at_axis.mV[VZ] = 0.f;
at_axis.normalize();
gAgent.resetAxes(at_axis * ~obj_rot);
}
else
if (!isAgentAvatarValid() || !gAgentAvatarp->getParent())
{
at_axis = gAgent.getFrameAgent().getAtAxis();
at_axis.mV[VZ] = 0.f;
@ -2577,8 +2649,8 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
// Reset our view when switching away
if (CAMERA_RLV_SETCAM_VIEW != preset)
{
mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
//mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
//mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
}
}
// [/RLVa:KB]
@ -2591,7 +2663,10 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
mCameraPreset = preset;
gSavedSettings.setU32("CameraPreset", mCameraPreset);
resetPanDiff();
resetOrbitDiff();
gSavedSettings.setU32("CameraPresetType", mCameraPreset);
}
@ -2837,7 +2912,7 @@ void LLAgentCamera::setSitCamera(const LLUUID &object_id, const LLVector3 &camer
//-----------------------------------------------------------------------------
// setFocusOnAvatar()
//-----------------------------------------------------------------------------
void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)
void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate, BOOL reset_axes)
{
if (focus_on_avatar != mFocusOnAvatar)
{
@ -2854,22 +2929,14 @@ void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)
//RN: when focused on the avatar, we're not "looking" at it
// looking implies intent while focusing on avatar means
// you're just walking around with a camera on you...eesh.
if (!mFocusOnAvatar && focus_on_avatar)
if (!mFocusOnAvatar && focus_on_avatar && reset_axes)
{
setFocusGlobal(LLVector3d::zero);
mCameraFOVZoomFactor = 0.f;
if (mCameraMode == CAMERA_MODE_THIRD_PERSON)
{
LLVector3 at_axis;
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
{
LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
at_axis = LLViewerCamera::getInstance()->getAtAxis();
at_axis.mV[VZ] = 0.f;
at_axis.normalize();
gAgent.resetAxes(at_axis * ~obj_rot);
}
else
if (!isAgentAvatarValid() || !gAgentAvatarp->getParent())
{
at_axis = LLViewerCamera::getInstance()->getAtAxis();
at_axis.mV[VZ] = 0.f;
@ -3046,6 +3113,17 @@ BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object,
return mPointAt->setPointAt(target_type, object, position);
}
void LLAgentCamera::rotateToInitSitRot()
{
gAgent.rotate(~gAgent.getFrameAgent().getQuaternion());
gAgent.rotate(mInitSitRot);
}
void LLAgentCamera::resetCameraZoomFraction()
{
mCameraZoomFraction = INITIAL_ZOOM_FRACTION;
}
ELookAtType LLAgentCamera::getLookAtType()
{
if (mLookAt)

View File

@ -58,6 +58,9 @@ enum ECameraPreset
/** "Above and to the left, over the shoulder, pulled back a little on the zoom" */
CAMERA_PRESET_GROUP_VIEW,
/** Current view when a preset is saved */
CAMERA_PRESET_CUSTOM,
// [RLVa:KB] - Checked: RLVa-2.0.0
/* Used by RLVa */
CAMERA_RLV_SETCAM_VIEW
@ -114,9 +117,19 @@ private:
//--------------------------------------------------------------------
public:
void switchCameraPreset(ECameraPreset preset);
private:
/** Determines default camera offset depending on the current camera preset */
LLVector3 getCameraOffsetInitial();
/** Determines default focus offset depending on the current camera preset */
LLVector3d getFocusOffsetInitial();
LLVector3 getCurrentCameraOffset();
LLVector3d getCurrentFocusOffset();
LLQuaternion getCurrentAvatarRotation();
bool isJoystickCameraUsed();
void setInitSitRot(LLQuaternion sit_rot) { mInitSitRot = sit_rot; };
void rotateToInitSitRot();
private:
/** Determines maximum camera distance from target for mouselook, opposite to LAND_MIN_ZOOM */
// <FS:Ansariel> FIRE-23470: Fix camera controls zoom glitch
//F32 getCameraMaxZoomDistance();
@ -126,11 +139,13 @@ private:
/** Camera preset in Third Person Mode */
ECameraPreset mCameraPreset;
/** Initial camera offsets */
std::map<ECameraPreset, LLPointer<LLControlVariable> > mCameraOffsetInitial;
/** Initial camera offset */
LLPointer<LLControlVariable> mCameraOffsetInitial;
/** Initial focus offsets */
std::map<ECameraPreset, LLPointer<LLControlVariable> > mFocusOffsetInitial;
/** Initial focus offset */
LLPointer<LLControlVariable> mFocusOffsetInitial;
LLQuaternion mInitSitRot;
//--------------------------------------------------------------------
// Position
@ -145,6 +160,8 @@ public:
F32 getCurrentCameraBuildOffset() { return (F32)mCameraFocusOffset.length(); }
void clearCameraLag() { mCameraLag.clearVec(); }
private:
LLVector3 getAvatarRootPosition();
F32 mCurrentCameraDistance; // Current camera offset from avatar
F32 mTargetCameraDistance; // Target camera offset from avatar
F32 mCameraFOVZoomFactor; // Amount of fov zoom applied to camera when zeroing in on an object
@ -212,7 +229,7 @@ public:
void validateFocusObject();
void setFocusGlobal(const LLPickInfo& pick);
void setFocusGlobal(const LLVector3d &focus, const LLUUID &object_id = LLUUID::null);
void setFocusOnAvatar(BOOL focus, BOOL animate);
void setFocusOnAvatar(BOOL focus, BOOL animate, BOOL reset_axes = TRUE);
void setCameraPosAndFocusGlobal(const LLVector3d& pos, const LLVector3d& focus, const LLUUID &object_id);
void clearFocusObject();
void setFocusObject(LLViewerObject* object);
@ -266,26 +283,31 @@ public:
void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point
void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point
void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point
void resetCameraOrbit();
void resetOrbitDiff();
//--------------------------------------------------------------------
// Zoom
//--------------------------------------------------------------------
public:
void handleScrollWheel(S32 clicks); // Mousewheel driven zoom
void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance
F32 getCameraZoomFraction(); // Get camera zoom as fraction of minimum and maximum zoom
void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom
void handleScrollWheel(S32 clicks); // Mousewheel driven zoom
void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance
F32 getCameraZoomFraction(bool get_third_person = false); // Get camera zoom as fraction of minimum and maximum zoom
void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom
F32 calcCameraFOVZoomFactor();
F32 getAgentHUDTargetZoom();
void resetCameraZoomFraction();
F32 getCurrentCameraZoomFraction() { return mCameraZoomFraction; }
//--------------------------------------------------------------------
// Pan
//--------------------------------------------------------------------
public:
void cameraPanIn(const F32 meters);
void cameraPanLeft(const F32 meters);
void cameraPanUp(const F32 meters);
void cameraPanUp(const F32 meters);
void resetCameraPan();
void resetPanDiff();
//--------------------------------------------------------------------
// View
//--------------------------------------------------------------------
@ -387,6 +409,9 @@ private:
F32 mOrbitInKey;
F32 mOrbitOutKey;
F32 mOrbitAroundRadians;
F32 mOrbitOverAngle;
//--------------------------------------------------------------------
// Pan
//--------------------------------------------------------------------
@ -414,6 +439,8 @@ private:
F32 mPanInKey;
F32 mPanOutKey;
LLVector3d mPanFocusDiff;
/** Keys
** **
*******************************************************************************/

View File

@ -1303,7 +1303,10 @@ bool LLAppViewer::init()
gSimLastTime = gRenderStartTime.getElapsedTimeF32();
gSimFrames = (F32)gFrameCount;
LLViewerJoystick::getInstance()->init(false);
if (gSavedSettings.getBOOL("JoystickEnabled"))
{
LLViewerJoystick::getInstance()->init(false);
}
try {
initializeSecHandler();
@ -3781,8 +3784,8 @@ LLSD LLAppViewer::getViewerInfo() const
info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB().valueInUnits<LLUnits::Megabytes>());
// Moved hack adjustment to Windows memory size into llsys.cpp
info["OS_VERSION"] = LLOSInfo::instance().getOSString();
info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR));
info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER));
info["GRAPHICS_CARD_VENDOR"] = ll_safe_string((const char*)(glGetString(GL_VENDOR)));
info["GRAPHICS_CARD"] = ll_safe_string((const char*)(glGetString(GL_RENDERER)));
#if LL_WINDOWS
std::string drvinfo = gDXHardware.getDriverVersionWMI();
@ -3804,7 +3807,7 @@ LLSD LLAppViewer::getViewerInfo() const
// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.2.0)
info["RLV_VERSION"] = (rlv_handler_t::isEnabled()) ? RlvStrings::getVersionAbout() : LLTrans::getString("RLVaStatusDisabled");
// [/RLVa:KB]
info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION));
info["OPENGL_VERSION"] = ll_safe_string((const char*)(glGetString(GL_VERSION)));
info["LIBCURL_VERSION"] = LLCore::LLHttp::getCURLVersion();
// Settings
@ -4118,20 +4121,13 @@ void LLAppViewer::writeSystemInfo()
if (! gDebugInfo.has("Dynamic") )
gDebugInfo["Dynamic"] = LLSD::emptyMap();
// <FS:ND> set filename to Firestorm.log
// <FS:ND> we don't want this (otherwise set filename to Firestorm.old/log
// #if LL_WINDOWS
// gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"SecondLife.log");
// #else
// //Not ideal but sufficient for good reporting.
// gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.old"); //LLError::logFileName();
// #endif
#if LL_WINDOWS
gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, APP_NAME + ".log");
#else
//Not ideal but sufficient for good reporting.
gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, APP_NAME + ".old"); //LLError::logFileName();
#endif
// </FS:ND>
gDebugInfo["ClientInfo"]["Name"] = LLVersionInfo::getChannel();
@ -4213,7 +4209,7 @@ void LLAppViewer::writeSystemInfo()
LL_INFOS("SystemInfo") << "OS: " << LLOSInfo::instance().getOSStringSimple() << LL_ENDL;
LL_INFOS("SystemInfo") << "OS info: " << LLOSInfo::instance() << LL_ENDL;
// <FS:ND> Breakpad merge. Only include SettingsFile if the user selected this in prefs. Path from Catznip
// <FS:ND> Breakpad merge. Only include SettingsFile if the user selected this in prefs. Patch from Catznip
// gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile");
if (gCrashSettings.getBOOL("CrashSubmitSettings"))
gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile");

View File

@ -157,6 +157,9 @@ namespace
sBugSplatSender->setDefaultUserEmail( WCSTR(STRINGIZE(LLOSInfo::instance().getOSStringSimple() << " (" << ADDRESS_SIZE << "-bit, flavor " << flavor <<")")));
// </FS:ND>
//<FS:ND/> Clear out username first, as we get some crashes that has the OS set as username, let's see if this fixes it.
sBugSplatSender->setDefaultUserName( WCSTR("<unset>") );
// <FS:ND> Only send avatar name if enabled via prefs
if (gCrashSettings.getBOOL("CrashSubmitName"))
{

View File

@ -620,8 +620,12 @@ void LLDrawPoolAlpha::renderEmissives(U32 mask, std::vector<LLDrawInfo*>& emissi
void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)
{
BOOL batch_fullbrights = gSavedSettings.getBOOL("RenderAlphaBatchFullbrights");
BOOL batch_emissives = gSavedSettings.getBOOL("RenderAlphaBatchEmissives");
// <FS:Ansariel> Tweak performance
//BOOL batch_fullbrights = gSavedSettings.getBOOL("RenderAlphaBatchFullbrights");
//BOOL batch_emissives = gSavedSettings.getBOOL("RenderAlphaBatchEmissives");
static LLCachedControl<bool> batch_fullbrights(gSavedSettings, "RenderAlphaBatchFullbrights");
static LLCachedControl<bool> batch_emissives(gSavedSettings, "RenderAlphaBatchEmissives");
// </FS:Ansariel>
BOOL initialized_lighting = FALSE;
BOOL light_enabled = TRUE;
@ -825,7 +829,11 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)
// If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow). Interleaving these state-changing calls is expensive, but glow must be drawn Z-sorted with alpha.
if (current_shader &&
draw_glow_for_this_partition &&
params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))
// <FS:Ansariel> Re-add particle rendering optimization
//params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))
params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE) &&
(!params.mParticle || params.mHasGlow))
// </FS:Ansariel>
{
LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_EMISSIVE);

View File

@ -1955,17 +1955,6 @@ bool LLDrawPoolAvatar::getRiggedGeometry(
face->setPoolType(LLDrawPool::POOL_AVATAR);
}
//let getGeometryVolume know if a texture matrix is in play
if (face->mTextureMatrix)
{
face->setState(LLFace::TEXTURE_ANIM);
}
else
{
face->clearState(LLFace::TEXTURE_ANIM);
}
//LL_INFOS() << "Rebuilt face " << face->getTEOffset() << " of " << face->getDrawable() << " at " << gFrameTimeSeconds << LL_ENDL;
// Let getGeometryVolume know if a texture matrix is in play

View File

@ -832,11 +832,11 @@ LLColor3 LLDrawPoolWater::getDebugColor() const
// <FS:Zi> Render speedup for water parameters
void LLDrawPoolWater::onRenderTransparentWaterChanged()
{
mRenderTransparentWater=gSavedSettings.getBOOL("RenderTransparentWater");
mRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
}
void LLDrawPoolWater::onRenderWaterMipNormalChanged()
{
mRenderWaterMipNormal=gSavedSettings.getBOOL("RenderWaterMipNormal");
mRenderWaterMipNormal = gSavedSettings.getBOOL("RenderWaterMipNormal");
}
// </FS:Zi>

View File

@ -34,6 +34,7 @@
// Viewer includes
#include "llagent.h"
#include "llagentcamera.h"
#include "llpresetsmanager.h"
#include "lljoystickbutton.h"
#include "llviewercontrol.h"
#include "llviewercamera.h"
@ -42,6 +43,8 @@
#include "llslider.h"
#include "llfirstuse.h"
#include "llhints.h"
#include "lltabcontainer.h"
#include "llvoavatarself.h"
static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item");
@ -52,7 +55,6 @@ const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed
#define ORBIT "cam_rotate_stick"
#define PAN "cam_track_stick"
#define ZOOM "zoom"
#define PRESETS "preset_views_list"
#define CONTROLS "controls"
bool LLFloaterCamera::sFreeCamera = false;
@ -281,13 +283,7 @@ void LLFloaterCamera::onAvatarEditingAppearance(bool editing)
void LLFloaterCamera::handleAvatarEditingAppearance(bool editing)
{
//camera presets (rear, front, etc.)
getChildView("preset_views_list")->setEnabled(!editing);
getChildView("presets_btn")->setEnabled(!editing);
//camera modes (object view, mouselook view)
getChildView("camera_modes_list")->setEnabled(!editing);
getChildView("avatarview_btn")->setEnabled(!editing);
}
void LLFloaterCamera::update()
@ -344,7 +340,6 @@ void LLFloaterCamera::onOpen(const LLSD& key)
LLFirstUse::viewPopup();
mZoom->onOpen(key);
setCameraFloaterTransparencyMode(LLSD(gSavedSettings.getBOOL("FSAlwaysOpaqueCameraControls"))); // <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
// Returns to previous mode, see EXT-2727(View tool should remember state).
// In case floater was just hidden and it isn't reset the mode
@ -354,6 +349,8 @@ void LLFloaterCamera::onOpen(const LLSD& key)
else
toPrevMode();
mClosed = FALSE;
populatePresetCombo();
}
void LLFloaterCamera::onClose(bool app_quitting)
@ -380,38 +377,49 @@ void LLFloaterCamera::onClose(bool app_quitting)
LLFloaterCamera::LLFloaterCamera(const LLSD& val)
: LLFloater(val),
mClosed(FALSE),
mUseFlatUI(false), // <AW: Flat cam floater>
mCurrMode(CAMERA_CTRL_MODE_PAN),
mPrevMode(CAMERA_CTRL_MODE_PAN)
{
LLHints::getInstance()->registerHintTarget("view_popup", getHandle());
mCommitCallbackRegistrar.add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
mCommitCallbackRegistrar.add("CameraPresets.Save", boost::bind(&LLFloaterCamera::onSavePreset, this));
mCommitCallbackRegistrar.add("CameraPresets.ShowPresetsList", boost::bind(&LLFloaterReg::showInstance, "camera_presets", LLSD(), FALSE));
}
// virtual
BOOL LLFloaterCamera::postBuild()
{
// <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
// updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
gSavedSettings.getControl("FSAlwaysOpaqueCameraControls")->getSignal()->connect(boost::bind(&LLFloaterCamera::setCameraFloaterTransparencyMode, this, _2));
// </FS:PP>
mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
mZoom = findChild<LLPanelCameraZoom>(ZOOM);
mTrack = getChild<LLJoystickCameraTrack>(PAN);
// <AW: Flat cam floater>
if (hasString("use_flat_ui"))
mPresetCombo = getChild<LLComboBox>("preset_combo");
// <FS:Ansariel> Improved camera floater
//getChild<LLTextBox>("precise_ctrs_label")->setShowCursorHand(false);
//getChild<LLTextBox>("precise_ctrs_label")->setSoundFlags(LLView::MOUSE_UP);
//getChild<LLTextBox>("precise_ctrs_label")->setClickedCallback(boost::bind(&LLFloaterReg::showInstance, "prefs_view_advanced", LLSD(), FALSE));
// </FS:Ansariel>
// <FS:Ansariel> Phototools support
LLButton* presets_btn = findChild<LLButton>("presets_btn");
if (presets_btn)
{
mUseFlatUI = true;
presets_btn->setCommitCallback(boost::bind(&LLFloaterCamera::switchViews, this, CAMERA_CTRL_MODE_PRESETS));
}
else
// </AW: Flat cam floater>
LLButton* modes_btn = findChild<LLButton>("avatarview_btn");
if (modes_btn)
{
assignButton2Mode(CAMERA_CTRL_MODE_MODES, "avatarview_btn");
assignButton2Mode(CAMERA_CTRL_MODE_PAN, "pan_btn");
assignButton2Mode(CAMERA_CTRL_MODE_PRESETS, "presets_btn");
modes_btn->setCommitCallback(boost::bind(&LLFloaterCamera::switchViews, this, CAMERA_CTRL_MODE_MODES));
}
LLButton* pan_btn = findChild<LLButton>("pan_btn");
if (pan_btn)
{
pan_btn->setCommitCallback(boost::bind(&LLFloaterCamera::switchViews, this, CAMERA_CTRL_MODE_PAN));
}
// </FS:Ansariel>
mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
update();
@ -421,21 +429,14 @@ BOOL LLFloaterCamera::postBuild()
return LLFloater::postBuild();
}
// <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
void LLFloaterCamera::setCameraFloaterTransparencyMode(const LLSD &data)
F32 LLFloaterCamera::getCurrentTransparency()
{
if(data.asBoolean())
{
updateTransparency(TT_FORCE_OPAQUE);
setBackgroundOpaque(true);
}
else
{
updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
setBackgroundOpaque(false);
}
static LLCachedControl<F32> camera_opacity(gSavedSettings, "CameraOpacity");
static LLCachedControl<F32> active_floater_transparency(gSavedSettings, "ActiveFloaterTransparency");
return llmin(camera_opacity(), active_floater_transparency());
}
// </FS:PP>
void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel)
{
@ -499,48 +500,12 @@ void LLFloaterCamera::setMode(ECameraControlMode mode)
updateState();
}
void LLFloaterCamera::setModeTitle(const ECameraControlMode mode)
{
std::string title;
// <AW: Flat cam floater>
if (mUseFlatUI)
{
title = getString("flat_ui_title");
}
else
// </AW: Flat cam floater>
{
switch(mode)
{
case CAMERA_CTRL_MODE_MODES:
title = getString("camera_modes_title");
break;
case CAMERA_CTRL_MODE_PAN:
title = getString("pan_mode_title");
break;
case CAMERA_CTRL_MODE_PRESETS:
title = getString("presets_mode_title");
break;
default:
break;
}
}
setTitle(title);
}
void LLFloaterCamera::switchMode(ECameraControlMode mode)
{
setMode(mode);
switch (mode)
{
case CAMERA_CTRL_MODE_MODES:
if(sFreeCamera)
{
switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
}
break;
case CAMERA_CTRL_MODE_PAN:
sFreeCamera = false;
clear_camera_tool();
@ -564,45 +529,8 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)
}
}
void LLFloaterCamera::onClickBtn(ECameraControlMode mode)
{
// check for a click on active button
if (mCurrMode == mode) mMode2Button[mode]->setToggleState(TRUE);
switchMode(mode);
}
void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::string& button_name)
{
LLButton* button = getChild<LLButton>(button_name);
button->setClickedCallback(boost::bind(&LLFloaterCamera::onClickBtn, this, mode));
mMode2Button[mode] = button;
}
void LLFloaterCamera::updateState()
{
// <AW: Flat cam floater>
if (mUseFlatUI)
{
setModeTitle(mCurrMode);
updateItemsSelection();
return;
}
// </AW: Flat cam floater>
getChildView(ZOOM)->setVisible(CAMERA_CTRL_MODE_PAN == mCurrMode);
bool show_presets = (CAMERA_CTRL_MODE_PRESETS == mCurrMode) || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
&& CAMERA_CTRL_MODE_PRESETS == mPrevMode);
getChildView(PRESETS)->setVisible(show_presets);
bool show_camera_modes = CAMERA_CTRL_MODE_MODES == mCurrMode || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
&& CAMERA_CTRL_MODE_MODES == mPrevMode);
getChildView("camera_modes_list")->setVisible( show_camera_modes);
updateItemsSelection();
if (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode)
@ -620,13 +548,13 @@ void LLFloaterCamera::updateState()
void LLFloaterCamera::updateItemsSelection()
{
ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPresetType");
LLSD argument;
argument["selected"] = preset == CAMERA_PRESET_REAR_VIEW;
argument["selected"] = (preset == CAMERA_PRESET_REAR_VIEW) && !sFreeCamera;
getChild<LLPanelCameraItem>("rear_view")->setValue(argument);
argument["selected"] = preset == CAMERA_PRESET_GROUP_VIEW;
argument["selected"] = (preset == CAMERA_PRESET_GROUP_VIEW) && !sFreeCamera;
getChild<LLPanelCameraItem>("group_view")->setValue(argument);
argument["selected"] = preset == CAMERA_PRESET_FRONT_VIEW;
argument["selected"] = (preset == CAMERA_PRESET_FRONT_VIEW) && !sFreeCamera;
getChild<LLPanelCameraItem>("front_view")->setValue(argument);
argument["selected"] = gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK;
getChild<LLPanelCameraItem>("mouselook_view")->setValue(argument);
@ -634,55 +562,110 @@ void LLFloaterCamera::updateItemsSelection()
getChild<LLPanelCameraItem>("object_view")->setValue(argument);
}
/*static*/
void LLFloaterCamera::onClickCameraItem(const LLSD& param)
{
std::string name = param.asString();
// <AW: Flat cam floater>
//if ("mouselook_view" == name)
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
if ("reset_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
gAgentCamera.changeCameraToDefault();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
}
else if ("mouselook_view" == name)
// </AW: Flat cam floater>
if ("mouselook_view" == name)
{
gAgentCamera.changeCameraToMouselook();
}
// <AW: Flat cam floater>
// else if ("object_view" == name)
// {
// LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
// if (camera_floater)
// camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
// }
else if ("object_view" == name)
{
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
if (camera_floater)
{
if (camera_floater->mUseFlatUI)
{
camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
}
else
{
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
}
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
camera_floater->updateItemsSelection();
camera_floater->fromFreeToPresets();
}
// <FS:Ansariel> Phototools camera
camera_floater = LLFloaterCamera::findPhototoolsInstance();
if (camera_floater)
{
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
camera_floater->updateItemsSelection();
camera_floater->fromFreeToPresets();
}
// </FS:Ansariel>
}
// </AW: Flat cam floater>
// <FS:Ansariel> Improved camera floater
else if ("reset_view" == name)
{
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// <FS:Ansariel> Phototools camera
camera_floater = LLFloaterCamera::findPhototoolsInstance();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// </FS:Ansariel>
gAgentCamera.changeCameraToDefault();
switchToPreset("rear_view");
}
// </FS:Ansariel>
else
{
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// <FS:Ansariel> Phototools camera
camera_floater = LLFloaterCamera::findPhototoolsInstance();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// </FS:Ansariel>
switchToPreset(name);
}
}
// LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();// <AW: Flat cam floater>
/*static*/
void LLFloaterCamera::switchToPreset(const std::string& name)
{
sFreeCamera = false;
clear_camera_tool();
if (PRESETS_REAR_VIEW == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
}
else if (PRESETS_SIDE_VIEW == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
}
else if (PRESETS_FRONT_VIEW == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
}
else
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM);
}
if (gSavedSettings.getString("PresetCameraActive") != name)
{
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name);
}
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
{
LLQuaternion sit_rot = gSavedSettings.getQuaternion("AvatarSitRotation");
if (sit_rot != LLQuaternion())
{
gAgent.rotate(~gAgent.getFrameAgent().getQuaternion());
gAgent.rotate(sit_rot);
}
else
{
gAgentCamera.rotateToInitSitRot();
}
}
gAgentCamera.resetCameraZoomFraction();
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
if (camera_floater)
{
camera_floater->updateItemsSelection();
@ -691,37 +674,6 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
// <FS:Ansariel> Phototools camera
camera_floater = LLFloaterCamera::findPhototoolsInstance();
if ("reset_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
gAgentCamera.changeCameraToDefault();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
}
else if ("mouselook_view" == name)
{
gAgentCamera.changeCameraToMouselook();
}
else if ("object_view" == name)
{
if (camera_floater)
{
if (camera_floater->mUseFlatUI)
{
camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
}
else
{
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
}
}
}
else
{
switchToPreset(name);
}
if (camera_floater)
{
camera_floater->updateItemsSelection();
@ -730,36 +682,84 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
// </FS:Ansariel>
}
/*static*/
void LLFloaterCamera::switchToPreset(const std::string& name)
{
sFreeCamera = false;
clear_camera_tool();
if ("rear_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
}
else if ("group_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
}
else if ("front_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
}
}
void LLFloaterCamera::fromFreeToPresets()
{
// <AW: Flat cam floater>
// if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)
if(mUseFlatUI && !sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PAN)
{
switchMode(CAMERA_CTRL_MODE_PAN);
}
else if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)
// </AW: Flat cam floater>
if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)
{
switchMode(CAMERA_CTRL_MODE_PRESETS);
}
}
void LLFloaterCamera::populatePresetCombo()
{
LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, EDefaultOptions::DEFAULT_HIDE);
std::string active_preset_name = gSavedSettings.getString("PresetCameraActive");
if (active_preset_name.empty())
{
gSavedSettings.setU32("CameraPresetType", CAMERA_PRESET_CUSTOM);
updateItemsSelection();
mPresetCombo->setLabel(getString("inactive_combo_text"));
}
else if ((ECameraPreset)gSavedSettings.getU32("CameraPresetType") == CAMERA_PRESET_CUSTOM)
{
mPresetCombo->selectByValue(active_preset_name);
}
else
{
mPresetCombo->setLabel(getString("inactive_combo_text"));
}
updateItemsSelection();
}
void LLFloaterCamera::onSavePreset()
{
LLFloaterReg::hideInstance("delete_pref_preset", PRESETS_CAMERA);
LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA);
LLFloaterReg::showInstance("save_camera_preset");
}
void LLFloaterCamera::onCustomPresetSelected()
{
std::string selected_preset = mPresetCombo->getSelectedItemLabel();
if (getString("inactive_combo_text") != selected_preset)
{
switchToPreset(selected_preset);
}
}
// <FS:Ansariel> Phototools support
void LLFloaterCamera::switchViews(ECameraControlMode mode)
{
switch (mode)
{
case CAMERA_CTRL_MODE_PRESETS:
getChildView("preset_views_list")->setVisible(TRUE);
getChildView("camera_modes_list")->setVisible(FALSE);
getChildView("zoom")->setVisible(FALSE);
getChild<LLButton>("presets_btn")->setToggleState(TRUE);
getChild<LLButton>("avatarview_btn")->setToggleState(FALSE);
getChild<LLButton>("pan_btn")->setToggleState(FALSE);
break;
case CAMERA_CTRL_MODE_MODES:
getChildView("preset_views_list")->setVisible(FALSE);
getChildView("camera_modes_list")->setVisible(TRUE);
getChildView("zoom")->setVisible(FALSE);
getChild<LLButton>("presets_btn")->setToggleState(FALSE);
getChild<LLButton>("avatarview_btn")->setToggleState(TRUE);
getChild<LLButton>("pan_btn")->setToggleState(FALSE);
break;
case CAMERA_CTRL_MODE_PAN:
getChildView("preset_views_list")->setVisible(FALSE);
getChildView("camera_modes_list")->setVisible(FALSE);
getChildView("zoom")->setVisible(TRUE);
getChild<LLButton>("presets_btn")->setToggleState(FALSE);
getChild<LLButton>("avatarview_btn")->setToggleState(FALSE);
getChild<LLButton>("pan_btn")->setToggleState(TRUE);
break;
default:
LL_WARNS() << "Tried to switch to unsupported mode: " << mode << LL_ENDL;
break;
}
}
// </FS:Ansariel>

View File

@ -36,13 +36,14 @@ class LLJoystickCameraRotate;
class LLJoystickCameraTrack;
class LLFloaterReg;
class LLPanelCameraZoom;
class LLComboBox;
enum ECameraControlMode
{
CAMERA_CTRL_MODE_MODES,
CAMERA_CTRL_MODE_PAN,
CAMERA_CTRL_MODE_FREE_CAMERA,
CAMERA_CTRL_MODE_PRESETS
CAMERA_CTRL_MODE_PRESETS,
CAMERA_CTRL_MODE_MODES // <FS:Ansariel> Phototools support
};
class LLFloaterCamera : public LLFloater
@ -50,7 +51,6 @@ class LLFloaterCamera : public LLFloater
friend class LLFloaterReg;
public:
/* whether in free camera mode */
static bool inFreeCameraMode();
/* callback for camera items selection changing */
@ -77,12 +77,15 @@ public:
virtual void onOpen(const LLSD& key);
virtual void onClose(bool app_quitting);
void onSavePreset();
void onCustomPresetSelected();
void populatePresetCombo();
LLJoystickCameraRotate* mRotate;
LLPanelCameraZoom* mZoom;
LLJoystickCameraTrack* mTrack;
void setCameraFloaterTransparencyMode(const LLSD &data); // <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
private:
LLFloaterCamera(const LLSD& val);
@ -95,6 +98,10 @@ private:
/*virtual*/ BOOL postBuild();
F32 getCurrentTransparency();
void onViewButtonClick(const LLSD& user_data);
ECameraControlMode determineMode();
/* resets to the previous mode */
@ -112,26 +119,24 @@ private:
/* update camera modes items selection and camera preset items selection according to the currently selected preset */
void updateItemsSelection();
void onClickBtn(ECameraControlMode mode);
void assignButton2Mode(ECameraControlMode mode, const std::string& button_name);
// fills flatlist with items from given panel
void fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel);
void handleAvatarEditingAppearance(bool editing);
// <FS:Ansariel> Phototools support
void switchViews(ECameraControlMode mode);
// set to true when free camera mode is selected in modes list
// remains true until preset camera mode is chosen, or pan button is clicked, or escape pressed
static bool sFreeCamera;
static bool sAppearanceEditing;
BOOL mClosed;
void setModeTitle(const ECameraControlMode mode);
bool mUseFlatUI; // <AW: Flat cam floater>
ECameraControlMode mPrevMode;
ECameraControlMode mCurrMode;
std::map<ECameraControlMode, LLButton*> mMode2Button;
LLComboBox* mPresetCombo;
};
/**

View File

@ -0,0 +1,145 @@
/**
* @file llfloatercamerapresets.cpp
*
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2019, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llfloatercamerapresets.h"
#include "llfloaterreg.h"
#include "llnotificationsutil.h"
#include "llpresetsmanager.h"
#include "llviewercontrol.h"
LLFloaterCameraPresets::LLFloaterCameraPresets(const LLSD& key)
: LLFloater(key)
{}
LLFloaterCameraPresets::~LLFloaterCameraPresets()
{}
BOOL LLFloaterCameraPresets::postBuild()
{
mPresetList = getChild<LLFlatListView>("preset_list");
LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCameraPresets::populateList, this));
return TRUE;
}
void LLFloaterCameraPresets::onOpen(const LLSD& key)
{
populateList();
}
void LLFloaterCameraPresets::populateList()
{
mPresetList->clear();
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
std::list<std::string> preset_names;
presetsMgr->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_BOTTOM);
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
{
const std::string& name = *it;
bool is_default = presetsMgr->isDefaultCameraPreset(name);
LLCameraPresetFlatItem* item = new LLCameraPresetFlatItem(name, is_default);
item->postBuild();
mPresetList->addItem(item);
}
}
LLCameraPresetFlatItem::LLCameraPresetFlatItem(const std::string &preset_name, bool is_default)
: LLPanel(),
mPresetName(preset_name),
mIsDefaultPrest(is_default)
{
mCommitCallbackRegistrar.add("CameraPresets.Delete", boost::bind(&LLCameraPresetFlatItem::onDeleteBtnClick, this));
mCommitCallbackRegistrar.add("CameraPresets.Reset", boost::bind(&LLCameraPresetFlatItem::onResetBtnClick, this));
buildFromFile("panel_camera_preset_item.xml");
}
LLCameraPresetFlatItem::~LLCameraPresetFlatItem()
{
}
BOOL LLCameraPresetFlatItem::postBuild()
{
mDeleteBtn = getChild<LLButton>("delete_btn");
mDeleteBtn->setVisible(false);
mResetBtn = getChild<LLButton>("reset_btn");
mResetBtn->setVisible(false);
LLStyle::Params style;
LLTextBox* name_text = getChild<LLTextBox>("preset_name");
LLFontDescriptor new_desc(name_text->getFont()->getFontDesc());
new_desc.setStyle(mIsDefaultPrest ? LLFontGL::ITALIC : LLFontGL::NORMAL);
LLFontGL* new_font = LLFontGL::getFont(new_desc);
style.font = new_font;
name_text->setText(mPresetName, style);
return true;
}
void LLCameraPresetFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
{
mDeleteBtn->setVisible(!mIsDefaultPrest);
mResetBtn->setVisible(mIsDefaultPrest);
getChildView("hovered_icon")->setVisible(true);
LLPanel::onMouseEnter(x, y, mask);
}
void LLCameraPresetFlatItem::onMouseLeave(S32 x, S32 y, MASK mask)
{
mDeleteBtn->setVisible(false);
mResetBtn->setVisible(false);
getChildView("hovered_icon")->setVisible(false);
LLPanel::onMouseLeave(x, y, mask);
}
void LLCameraPresetFlatItem::setValue(const LLSD& value)
{
if (!value.isMap()) return;;
if (!value.has("selected")) return;
getChildView("selected_icon")->setVisible(value["selected"]);
}
void LLCameraPresetFlatItem::onDeleteBtnClick()
{
if (!LLPresetsManager::getInstance()->deletePreset(PRESETS_CAMERA, mPresetName))
{
LLSD args;
args["NAME"] = mPresetName;
LLNotificationsUtil::add("PresetNotDeleted", args);
}
else if (gSavedSettings.getString("PresetCameraActive") == mPresetName)
{
gSavedSettings.setString("PresetCameraActive", "");
}
}
void LLCameraPresetFlatItem::onResetBtnClick()
{
LLPresetsManager::getInstance()->resetCameraPreset(mPresetName);
}

View File

@ -0,0 +1,73 @@
/**
* @file llfloatercamerapresets.h
*
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2019, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LLFLOATERCAMERAPRESETS_H
#define LLFLOATERCAMERAPRESETS_H
#include "llfloater.h"
#include "llflatlistview.h"
class LLFloaterReg;
class LLFloaterCameraPresets : public LLFloater
{
friend class LLFloaterReg;
virtual BOOL postBuild();
virtual void onOpen(const LLSD& key);
void populateList();
private:
LLFloaterCameraPresets(const LLSD& key);
~LLFloaterCameraPresets();
LLFlatListView* mPresetList;
};
class LLCameraPresetFlatItem : public LLPanel
{
public:
LLCameraPresetFlatItem(const std::string &preset_name, bool is_default);
virtual ~LLCameraPresetFlatItem();
void setValue(const LLSD& value);
virtual BOOL postBuild();
virtual void onMouseEnter(S32 x, S32 y, MASK mask);
virtual void onMouseLeave(S32 x, S32 y, MASK mask);
private:
void onDeleteBtnClick();
void onResetBtnClick();
LLButton* mDeleteBtn;
LLButton* mResetBtn;
std::string mPresetName;
bool mIsDefaultPrest;
};
#endif

View File

@ -60,13 +60,15 @@ void LLFloaterDeletePrefPreset::onOpen(const LLSD& key)
{
mSubdirectory = key.asString();
std::string floater_title = getString(std::string("title_") + mSubdirectory);
setTitle(floater_title);
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
EDefaultOptions option = DEFAULT_HIDE;
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
bool action;
action = LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
LLButton* delete_btn = getChild<LLButton>("delete");
delete_btn->setEnabled(action);
}
void LLFloaterDeletePrefPreset::onBtnDelete()
@ -80,6 +82,13 @@ void LLFloaterDeletePrefPreset::onBtnDelete()
args["NAME"] = name;
LLNotificationsUtil::add("PresetNotDeleted", args);
}
else if (mSubdirectory == PRESETS_CAMERA)
{
if (gSavedSettings.getString("PresetCameraActive") == name)
{
gSavedSettings.setString("PresetCameraActive", "");
}
}
closeFloater();
}
@ -87,12 +96,10 @@ void LLFloaterDeletePrefPreset::onBtnDelete()
void LLFloaterDeletePrefPreset::onPresetsListChange()
{
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
LLButton* delete_btn = getChild<LLButton>("delete");
EDefaultOptions option = DEFAULT_HIDE;
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
delete_btn->setEnabled(0 != combo->getItemCount());
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
}
void LLFloaterDeletePrefPreset::onBtnCancel()

View File

@ -61,6 +61,11 @@ static LLTrace::SampleStatHandle<>* sJoystickAxes[6] =
LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
: LLFloater(data)
{
if (!LLViewerJoystick::getInstance()->isJoystickInitialized())
{
LLViewerJoystick::getInstance()->init(false);
}
initFromSettings();
}

View File

@ -42,7 +42,8 @@ LLFloaterLoadPrefPreset::LLFloaterLoadPrefPreset(const LLSD &key)
// virtual
BOOL LLFloaterLoadPrefPreset::postBuild()
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
{
LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
if (preferences)
{
preferences->addDependentFloater(this);

View File

@ -989,7 +989,7 @@ void LLFloaterPreference::cancel()
// hide spellchecker settings folder
LLFloaterReg::hideInstance("prefs_spellchecker");
// hide advancede floater
// hide advanced graphics floater
LLFloaterReg::hideInstance("prefs_graphics_advanced");
// reverts any changes to current skin
@ -1165,7 +1165,8 @@ void LLFloaterPreference::onOpen(const LLSD& key)
saveSettings();
// Make sure there is a default preference file
LLPresetsManager::getInstance()->createMissingDefault();
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_CAMERA);
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_GRAPHIC);
// <FS:Ansariel> Fix resetting graphics preset on cancel
saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive"));
@ -1177,13 +1178,14 @@ void LLFloaterPreference::onOpen(const LLSD& key)
//LLButton* save_btn = findChild<LLButton>("PrefSaveButton");
//LLButton* delete_btn = findChild<LLButton>("PrefDeleteButton");
//LLButton* exceptions_btn = findChild<LLButton>("RenderExceptionsButton");
//load_btn->setEnabled(started);
//save_btn->setEnabled(started);
//delete_btn->setEnabled(started);
//exceptions_btn->setEnabled(started);
//if (load_btn && save_btn && delete_btn && exceptions_btn)
//{
// load_btn->setEnabled(started);
// save_btn->setEnabled(started);
// delete_btn->setEnabled(started);
// exceptions_btn->setEnabled(started);
//}
// </FS:Ansariel>
collectSearchableItems();
if (!mFilterEdit->getText().empty())
{
@ -3889,20 +3891,17 @@ void LLPanelPreference::updateMediaAutoPlayCheckbox(LLUICtrl* ctrl)
void LLPanelPreference::deletePreset(const LLSD& user_data)
{
std::string subdirectory = user_data.asString();
LLFloaterReg::showInstance("delete_pref_preset", subdirectory);
LLFloaterReg::showInstance("delete_pref_preset", user_data.asString());
}
void LLPanelPreference::savePreset(const LLSD& user_data)
{
std::string subdirectory = user_data.asString();
LLFloaterReg::showInstance("save_pref_preset", subdirectory);
LLFloaterReg::showInstance("save_pref_preset", user_data.asString());
}
void LLPanelPreference::loadPreset(const LLSD& user_data)
{
std::string subdirectory = user_data.asString();
LLFloaterReg::showInstance("load_pref_preset", subdirectory);
LLFloaterReg::showInstance("load_pref_preset", user_data.asString());
}
void LLPanelPreference::setHardwareDefaults()
@ -4076,7 +4075,7 @@ BOOL LLPanelPreferenceGraphics::postBuild()
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPreferenceGraphics::onPresetsListChange, this));
presetsMgr->createMissingDefault(); // a no-op after the first time, but that's ok
presetsMgr->createMissingDefault(PRESETS_GRAPHIC); // a no-op after the first time, but that's ok
// <FS:CR> Hide this until we have fullscreen mode functional on OSX again

View File

@ -0,0 +1,99 @@
/**
* @file llfloaterpreferenceviewadvanced.cpp
* @brief floater for adjusting camera position
*
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2018, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llagentcamera.h"
#include "llfloaterpreferenceviewadvanced.h"
#include "llfloater.h"
#include "llfloaterreg.h"
#include "lluictrlfactory.h"
#include "llspinctrl.h"
#include "llviewercontrol.h"
#include "llpresetsmanager.h"
LLFloaterPreferenceViewAdvanced::LLFloaterPreferenceViewAdvanced(const LLSD& key)
: LLFloater(key)
{
mCommitCallbackRegistrar.add("CommitSettings", boost::bind(&LLFloaterPreferenceViewAdvanced::onCommitSettings, this));
mCommitCallbackRegistrar.add("CameraPresets.Save", boost::bind(&LLFloaterPreferenceViewAdvanced::onSavePreset, this)); // <FS:Ansariel> Improved camera floater
}
LLFloaterPreferenceViewAdvanced::~LLFloaterPreferenceViewAdvanced()
{}
void LLFloaterPreferenceViewAdvanced::updateCameraControl(const LLVector3& vector)
{
getChild<LLSpinCtrl>("camera_x")->setValue(vector[VX]);
getChild<LLSpinCtrl>("camera_y")->setValue(vector[VY]);
getChild<LLSpinCtrl>("camera_z")->setValue(vector[VZ]);
}
void LLFloaterPreferenceViewAdvanced::updateFocusControl(const LLVector3d& vector3d)
{
getChild<LLSpinCtrl>("focus_x")->setValue(vector3d[VX]);
getChild<LLSpinCtrl>("focus_y")->setValue(vector3d[VY]);
getChild<LLSpinCtrl>("focus_z")->setValue(vector3d[VZ]);
}
void LLFloaterPreferenceViewAdvanced::draw()
{
updateCameraControl(gAgentCamera.getCameraOffsetInitial());
updateFocusControl(gAgentCamera.getFocusOffsetInitial());
LLFloater::draw();
}
void LLFloaterPreferenceViewAdvanced::onCommitSettings()
{
LLVector3 vector;
LLVector3d vector3d;
vector.mV[VX] = (F32)getChild<LLUICtrl>("camera_x")->getValue().asReal();
vector.mV[VY] = (F32)getChild<LLUICtrl>("camera_y")->getValue().asReal();
vector.mV[VZ] = (F32)getChild<LLUICtrl>("camera_z")->getValue().asReal();
gSavedSettings.setVector3("CameraOffsetRearView", vector);
vector3d.mdV[VX] = (F32)getChild<LLUICtrl>("focus_x")->getValue().asReal();
vector3d.mdV[VY] = (F32)getChild<LLUICtrl>("focus_y")->getValue().asReal();
vector3d.mdV[VZ] = (F32)getChild<LLUICtrl>("focus_z")->getValue().asReal();
gSavedSettings.setVector3d("FocusOffsetRearView", vector3d);
}
// <FS:Ansariel> Improved camera floater
void LLFloaterPreferenceViewAdvanced::onSavePreset()
{
LLFloaterReg::hideInstance("delete_pref_preset", PRESETS_CAMERA);
LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA);
LLSD key;
key["subdirectory"] = PRESETS_CAMERA;
std::string current_preset = gSavedSettings.getString("PresetCameraActive");
bool is_custom_preset = current_preset != "" && !LLPresetsManager::getInstance()->isDefaultCameraPreset(current_preset);
key["index"] = is_custom_preset ? 1 : 0;
LLFloaterReg::showInstance("save_pref_preset", key);
}
// </FS:Ansariel>

View File

@ -0,0 +1,52 @@
/**
* @file llfloaterpreferenceviewadvanced.h
* @brief floater for adjusting camera position
*
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2018, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LLFLOATERPREFERENCEVIEWADVANCED_H
#define LLFLOATERPREFERENCEVIEWADVANCED_H
#include "llcontrol.h"
#include "llfloater.h"
class LLFloaterPreferenceViewAdvanced
: public LLFloater
{
friend class LLFloaterReg;
public:
LLFloaterPreferenceViewAdvanced(const LLSD& key);
virtual void draw();
void onCommitSettings();
void updateCameraControl(const LLVector3& vector);
void updateFocusControl(const LLVector3d& vector3d);
void onSavePreset(); // <FS:Ansariel> Improved camera floater
private:
virtual ~LLFloaterPreferenceViewAdvanced();
};
#endif //LLFLOATERPREFERENCEVIEWADVANCED_H

View File

@ -0,0 +1,173 @@
/**
* @file llfloatersavecamerapreset.cpp
* @brief Floater to save a camera preset
*
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2020, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llfloatersavecamerapreset.h"
#include "llagent.h"
#include "llagentcamera.h"
#include "llbutton.h"
#include "llcombobox.h"
#include "llfloaterpreference.h"
#include "llfloaterreg.h"
#include "lllineeditor.h"
#include "llnotificationsutil.h"
#include "llpresetsmanager.h"
#include "llradiogroup.h"
#include "lltrans.h"
#include "llvoavatarself.h"
#include "llviewercontrol.h"
LLFloaterSaveCameraPreset::LLFloaterSaveCameraPreset(const LLSD &key)
: LLModalDialog(key)
{
}
// virtual
BOOL LLFloaterSaveCameraPreset::postBuild()
{
mPresetCombo = getChild<LLComboBox>("preset_combo");
mNameEditor = getChild<LLLineEditor>("preset_txt_editor");
mNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterSaveCameraPreset::onPresetNameEdited, this), NULL);
mSaveButton = getChild<LLButton>("save");
mSaveButton->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnSave, this));
mSaveRadioGroup = getChild<LLRadioGroup>("radio_save_preset");
mSaveRadioGroup->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onSwitchSaveReplace, this));
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnCancel, this));
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSaveCameraPreset::onPresetsListChange, this));
return TRUE;
}
void LLFloaterSaveCameraPreset::onPresetNameEdited()
{
if (mSaveRadioGroup->getSelectedIndex() == 0)
{
// Disable saving a preset having empty name.
std::string name = mNameEditor->getValue();
mSaveButton->setEnabled(!name.empty());
}
}
void LLFloaterSaveCameraPreset::onOpen(const LLSD& key)
{
LLModalDialog::onOpen(key);
S32 index = 0;
if (key.has("index"))
{
index = key["index"].asInteger();
}
LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_BOTTOM);
mSaveRadioGroup->setSelectedIndex(index);
onPresetNameEdited();
onSwitchSaveReplace();
}
void LLFloaterSaveCameraPreset::onBtnSave()
{
bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0;
std::string name = is_saving_new ? mNameEditor->getText() : mPresetCombo->getSimple();
if ((name == LLTrans::getString(PRESETS_DEFAULT)) || (name == PRESETS_DEFAULT))
{
LLNotificationsUtil::add("DefaultPresetNotSaved");
}
else
{
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
{
gSavedSettings.setQuaternion("AvatarSitRotation", gAgent.getFrameAgent().getQuaternion());
}
if (gAgentCamera.isJoystickCameraUsed())
{
gSavedSettings.setVector3("CameraOffsetRearView", gAgentCamera.getCurrentCameraOffset());
gSavedSettings.setVector3d("FocusOffsetRearView", gAgentCamera.getCurrentFocusOffset());
gAgentCamera.resetCameraZoomFraction();
gAgentCamera.setFocusOnAvatar(TRUE, TRUE, FALSE);
}
else
{
LLVector3 camera_offset = gSavedSettings.getVector3("CameraOffsetRearView") * gAgentCamera.getCurrentCameraZoomFraction();
gSavedSettings.setVector3("CameraOffsetRearView", camera_offset);
gAgentCamera.resetCameraZoomFraction();
}
if (is_saving_new)
{
std::list<std::string> preset_names;
LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_HIDE);
if (std::find(preset_names.begin(), preset_names.end(), name) != preset_names.end())
{
LLSD args;
args["NAME"] = name;
LLNotificationsUtil::add("PresetAlreadyExists", args);
return;
}
}
if (!LLPresetsManager::getInstance()->savePreset(PRESETS_CAMERA, name))
{
LLSD args;
args["NAME"] = name;
LLNotificationsUtil::add("PresetNotSaved", args);
}
}
closeFloater();
}
void LLFloaterSaveCameraPreset::onPresetsListChange()
{
LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_BOTTOM);
}
void LLFloaterSaveCameraPreset::onBtnCancel()
{
closeFloater();
}
void LLFloaterSaveCameraPreset::onSwitchSaveReplace()
{
bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0;
std::string label = is_saving_new ? getString("btn_label_save") : getString("btn_label_replace");
mSaveButton->setLabel(label);
mNameEditor->setEnabled(is_saving_new);
mPresetCombo->setEnabled(!is_saving_new);
if (is_saving_new)
{
onPresetNameEdited();
}
else
{
mSaveButton->setEnabled(true);
}
}

View File

@ -0,0 +1,60 @@
/**
* @file llfloatersavecamerapreset.h
* @brief Floater to save a camera preset
*
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2020, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLFLOATERSAVECAMERAPRESET_H
#define LL_LLFLOATERSAVECAMERAPRESET_H
#include "llmodaldialog.h"
class LLComboBox;
class LLRadioGroup;
class LLLineEditor;
class LLFloaterSaveCameraPreset : public LLModalDialog
{
public:
LLFloaterSaveCameraPreset(const LLSD &key);
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
void onBtnSave();
void onBtnCancel();
void onSwitchSaveReplace();
private:
LLRadioGroup* mSaveRadioGroup;
LLLineEditor* mNameEditor;
LLComboBox* mPresetCombo;
LLButton* mSaveButton;
void onPresetsListChange();
void onPresetNameEdited();
};
#endif // LL_LLFLOATERSAVECAMERAPRESET_H

View File

@ -1,6 +1,6 @@
/**
* @file llfloatersaveprefpreset.cpp
* @brief Floater to save a graphics / camera preset
* @brief Floater to save a graphics preset
*
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
* Second Life Viewer Source Code
@ -37,24 +37,27 @@
#include "lltrans.h"
LLFloaterSavePrefPreset::LLFloaterSavePrefPreset(const LLSD &key)
: LLFloater(key)
: LLFloater(key)
{
}
// virtual
BOOL LLFloaterSavePrefPreset::postBuild()
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
{
LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
if (preferences)
{
preferences->addDependentFloater(this);
}
getChild<LLComboBox>("preset_combo")->setTextEntryCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this));
getChild<LLComboBox>("preset_combo")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this));
getChild<LLButton>("save")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this));
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnCancel, this));
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetsListChange, this));
mSaveButton = getChild<LLButton>("save");
mPresetCombo = getChild<LLComboBox>("preset_combo");
@ -73,10 +76,6 @@ void LLFloaterSavePrefPreset::onOpen(const LLSD& key)
{
mSubdirectory = key.asString();
std::string floater_title = getString(std::string("title_") + mSubdirectory);
setTitle(floater_title);
EDefaultOptions option = DEFAULT_HIDE;
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option);

View File

@ -1,6 +1,6 @@
/**
* @file llfloatersaveprefpreset.h
* @brief Floater to save a graphics / camera preset
* @brief Floater to save a graphics preset
*
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
@ -45,6 +45,7 @@ public:
void onBtnCancel();
private:
LLComboBox* mPresetCombo;
LLButton* mSaveButton;

View File

@ -263,6 +263,7 @@ void LLFloaterSettingsDebug::onCommitSettings()
LLVector3 vector;
LLVector3d vectord;
LLQuaternion quat;
LLRect rect;
LLColor4 col4;
LLColor3 col3;
@ -298,6 +299,13 @@ void LLFloaterSettingsDebug::onCommitSettings()
vectord.mdV[VZ] = mSpinner3->getValue().asReal();
mCurrentControlVariable->set(vectord.getValue());
break;
case TYPE_QUAT:
quat.mQ[VX] = getChild<LLUICtrl>("val_spinner_1")->getValue().asReal();
quat.mQ[VY] = getChild<LLUICtrl>("val_spinner_2")->getValue().asReal();
quat.mQ[VZ] = getChild<LLUICtrl>("val_spinner_3")->getValue().asReal();
quat.mQ[VS] = getChild<LLUICtrl>("val_spinner_4")->getValue().asReal();;
mCurrentControlVariable->set(quat.getValue());
break;
case TYPE_RECT:
rect.mLeft = mSpinner1->getValue().asInteger();
rect.mRight = mSpinner2->getValue().asInteger();
@ -522,6 +530,40 @@ void LLFloaterSettingsDebug::updateControl()
}
break;
}
case TYPE_QUAT:
{
LLQuaternion q;
q.setValue(sd);
mSpinner1->setVisible(TRUE);
mSpinner1->setLabel(std::string("X"));
mSpinner2->setVisible(TRUE);
mSpinner2->setLabel(std::string("Y"));
mSpinner3->setVisible(TRUE);
mSpinner3->setLabel(std::string("Z"));
mSpinner4->setVisible(TRUE);
mSpinner4->setLabel(std::string("S"));
if (!mSpinner1->hasFocus())
{
mSpinner1->setPrecision(4);
mSpinner1->setValue(q.mQ[VX]);
}
if (!mSpinner2->hasFocus())
{
mSpinner2->setPrecision(4);
mSpinner2->setValue(q.mQ[VY]);
}
if (!mSpinner3->hasFocus())
{
mSpinner3->setPrecision(4);
mSpinner3->setValue(q.mQ[VZ]);
}
if (!mSpinner4->hasFocus())
{
mSpinner4->setPrecision(4);
mSpinner4->setValue(q.mQ[VS]);
}
break;
}
case TYPE_RECT:
{
LLRect r;

View File

@ -37,6 +37,7 @@
#include "llui.h"
#include "llagent.h"
#include "llagentcamera.h"
#include "llviewercamera.h"
#include "llviewertexture.h"
#include "llviewertexturelist.h"
#include "llviewerwindow.h"
@ -54,6 +55,8 @@ static LLDefaultChildRegistry::Register<LLJoystickQuaternion> r6("joystick_quat"
const F32 NUDGE_TIME = 0.25f; // in seconds
const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed
const S32 CENTER_DOT_RADIUS = 7;
//
// Public Methods
//
@ -138,9 +141,25 @@ bool LLJoystick::pointInCircle(S32 x, S32 y) const
//center is x and y coordinates of center of joystick circle, and also its radius
int center = this->getLocalRect().getHeight()/2;
bool in_circle = (x - center) * (x - center) + (y - center) * (y - center) <= center * center;
return in_circle;
}
bool LLJoystick::pointInCenterDot(S32 x, S32 y, S32 radius) const
{
if (this->getLocalRect().getHeight() != this->getLocalRect().getWidth())
{
LL_WARNS() << "Joystick shape is not square" << LL_ENDL;
return true;
}
S32 center = this->getLocalRect().getHeight() / 2;
bool in_center_circle = (x - center) * (x - center) + (y - center) * (y - center) <= radius * radius;
return in_center_circle;
}
BOOL LLJoystick::handleMouseDown(S32 x, S32 y, MASK mask)
{
//LL_INFOS() << "joystick mouse down " << x << ", " << y << LL_ENDL;
@ -403,8 +422,11 @@ LLJoystickCameraRotate::LLJoystickCameraRotate(const LLJoystickCameraRotate::Par
mInLeft( FALSE ),
mInTop( FALSE ),
mInRight( FALSE ),
mInBottom( FALSE )
{ }
mInBottom( FALSE ),
mInCenter( FALSE )
{
mCenterImageName = "Cam_Rotate_Center";
}
void LLJoystickCameraRotate::updateSlop()
@ -434,7 +456,16 @@ BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask)
S32 dx = x - horiz_center;
S32 dy = y - vert_center;
if (dy > dx && dy > -dx)
if (pointInCenterDot(x, y, CENTER_DOT_RADIUS))
{
mInitialOffset.mX = 0;
mInitialOffset.mY = 0;
mInitialQuadrant = JQ_ORIGIN;
mInCenter = TRUE;
resetJoystickCamera();
}
else if (dy > dx && dy > -dx)
{
// top
mInitialOffset.mX = 0;
@ -469,9 +500,20 @@ BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLJoystickCameraRotate::handleMouseUp(S32 x, S32 y, MASK mask)
{
gAgent.setMovementLocked(FALSE);
mInCenter = FALSE;
return LLJoystick::handleMouseUp(x, y, mask);
}
BOOL LLJoystickCameraRotate::handleHover(S32 x, S32 y, MASK mask)
{
if (!pointInCenterDot(x, y, CENTER_DOT_RADIUS))
{
mInCenter = FALSE;
}
return LLJoystick::handleHover(x, y, mask);
}
void LLJoystickCameraRotate::onHeldDown()
{
updateSlop();
@ -504,6 +546,11 @@ void LLJoystickCameraRotate::onHeldDown()
}
}
void LLJoystickCameraRotate::resetJoystickCamera()
{
gAgentCamera.resetCameraOrbit();
}
F32 LLJoystickCameraRotate::getOrbitRate()
{
F32 time = getElapsedHeldDownTime();
@ -536,24 +583,31 @@ void LLJoystickCameraRotate::draw()
getImageUnselected()->draw( getLocalRect() );
LLPointer<LLUIImage> image = getImageSelected();
if( mInTop )
if (mInCenter)
{
drawRotatedImage( getImageSelected(), 0 );
drawRotatedImage(LLUI::getUIImage(mCenterImageName), 0);
}
if( mInRight )
else
{
drawRotatedImage( getImageSelected(), 1 );
}
if (mInTop)
{
drawRotatedImage(getImageSelected(), 0);
}
if( mInBottom )
{
drawRotatedImage( getImageSelected(), 2 );
}
if (mInRight)
{
drawRotatedImage(getImageSelected(), 1);
}
if( mInLeft )
{
drawRotatedImage( getImageSelected(), 3 );
if (mInBottom)
{
drawRotatedImage(getImageSelected(), 2);
}
if (mInLeft)
{
drawRotatedImage(getImageSelected(), 3);
}
}
}
@ -643,7 +697,9 @@ LLJoystickCameraTrack::Params::Params()
LLJoystickCameraTrack::LLJoystickCameraTrack(const LLJoystickCameraTrack::Params& p)
: LLJoystickCameraRotate(p)
{}
{
mCenterImageName = "Cam_Tracking_Center";
}
void LLJoystickCameraTrack::onHeldDown()
@ -677,6 +733,11 @@ void LLJoystickCameraTrack::onHeldDown()
}
}
void LLJoystickCameraTrack::resetJoystickCamera()
{
gAgentCamera.resetCameraPan();
}
//-------------------------------------------------------------------------------
// LLJoystickQuaternion
//-------------------------------------------------------------------------------

View File

@ -80,7 +80,8 @@ public:
* Image containing circle is square and this square has adherent points with joystick
* circle. Make sure to change method according to shape other than square.
*/
bool pointInCircle(S32 x, S32 y) const;
bool pointInCircle(S32 x, S32 y) const;
bool pointInCenterDot(S32 x, S32 y, S32 radius) const;
static std::string nameFromQuadrant(const EJoystickQuadrant quadrant);
static EJoystickQuadrant quadrantFromName(const std::string& name);
@ -148,7 +149,9 @@ public:
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual void onHeldDown();
virtual void resetJoystickCamera();
virtual void draw();
protected:
@ -161,6 +164,9 @@ protected:
BOOL mInTop;
BOOL mInRight;
BOOL mInBottom;
BOOL mInCenter;
std::string mCenterImageName;
};
@ -177,6 +183,7 @@ public:
LLJoystickCameraTrack(const LLJoystickCameraTrack::Params&);
virtual void onHeldDown();
virtual void resetJoystickCamera();
};
//

View File

@ -4828,7 +4828,13 @@ bool LLMeshRepository::getCostData(LLUUID mesh_id, LLMeshCostData& data)
LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0)
{
LLSD& header = iter->second;
// <FS:ND> Make a copy of the header rather than holding on to the referece.
// Assumption: mMeshHeader gets modified in another thread, invalidating iter and thus causing a lot of crashed down the line
// LLSD& header = iter->second;
LLSD header = iter->second;
// </FS:ND>
bool header_invalid = (header.has("404")
|| !header.has("lowest_lod")
@ -4844,7 +4850,10 @@ bool LLMeshRepository::getCostData(LLUUID mesh_id, LLMeshCostData& data)
return false;
}
bool LLMeshRepository::getCostData(LLSD& header, LLMeshCostData& data)
// <FS:ND> Use a const ref, just to make sure no one modifies header and we can pass a copy.
// bool LLMeshRepository::getCostData(LLSD& header, LLMeshCostData& data)
bool LLMeshRepository::getCostData(LLSD const& header, LLMeshCostData& data)
// </FS:ND>
{
data = LLMeshCostData();

View File

@ -583,7 +583,11 @@ public:
F32 getStreamingCostLegacy(LLUUID mesh_id, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
static F32 getStreamingCostLegacy(LLSD& header, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
bool getCostData(LLUUID mesh_id, LLMeshCostData& data);
bool getCostData(LLSD& header, LLMeshCostData& data);
// <FS:ND> Use a const ref, just to make sure no one modifies header and we can pass a copy.
// bool getCostData(LLSD& header, LLMeshCostData& data);
bool getCostData(LLSD const& header, LLMeshCostData& data);
// </FS:ND>
LLMeshRepository();

View File

@ -93,7 +93,8 @@ LLFloaterMove::~LLFloaterMove()
// virtual
BOOL LLFloaterMove::postBuild()
{
updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
// <FS:Ansariel> Customizable floater transparency
//updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
// Code that implements floater buttons toggling when user moves via keyboard is located in LLAgent::propagate()
@ -534,6 +535,14 @@ void LLFloaterMove::setModeButtonToggleState(const EMovementMode mode)
mModeControlButtonMap[mode]->setToggleState(TRUE);
}
// <FS:Ansariel> Customizable floater transparency
F32 LLFloaterMove::getCurrentTransparency()
{
static LLCachedControl<F32> camera_opacity(gSavedSettings, "CameraOpacity");
static LLCachedControl<F32> active_floater_transparency(gSavedSettings, "ActiveFloaterTransparency");
return llmin(camera_opacity(), active_floater_transparency());
}
// </FS:Ansariel>
/************************************************************************/

View File

@ -64,6 +64,9 @@ public:
static void sUpdateMovementStatus();
// [/RLVa:KB]
// <FS:Ansariel> Customizable floater transparency
/*virtual*/ F32 getCurrentTransparency();
protected:
void turnLeft();
void turnRight();

View File

@ -72,6 +72,7 @@
#include "llnotificationsutil.h"// <FS:AW hypergrid support >
#include "lluictrl.h" // <FS:Zi> Make navigation bar part of the UI
#include "rlvhandler.h"
//-- LLTeleportHistoryMenuItem -----------------------------------------------
@ -279,7 +280,8 @@ LLNavigationBar::LLNavigationBar()
mNavigationPanel(NULL),
mFavoritePanel(NULL),
mNavPanWidth(0),
mSearchComboBox(NULL)
mSearchComboBox(NULL),
mRlvBehaviorCallbackConnection() // <FS:Ansariel> FIRE-11847
{
// buildFromFile( "panel_navigation_bar.xml"); // <FS:Zi> Make navigation bar part of the UI
@ -292,6 +294,13 @@ LLNavigationBar::~LLNavigationBar()
{
mTeleportFinishConnection.disconnect();
mTeleportFailedConnection.disconnect();
// <FS:Ansariel> FIRE-11847
if (mRlvBehaviorCallbackConnection.connected())
{
mRlvBehaviorCallbackConnection.disconnect();
}
// </FS:Ansariel>
}
// <FS:Zi> Make navigation bar part of the UI
@ -318,7 +327,7 @@ void LLNavigationBar::setupPanel()
mView->getChild<LLUICtrl>("navigation_bar_context_menu_panel")->
setRightMouseDownCallback(boost::bind(&LLNavigationBar::onRightMouseDown, this, _2, _3, _4));
mView->getChild<LLButton>("Sky")->setCommitCallback(boost::bind(&LLNavigationBar::onClickedSkyBtn, this)); // <FS:CR> FIRE-11847
mView->getChild<LLButton>("PersonalLighting")->setCommitCallback(boost::bind(&LLNavigationBar::onClickedLightingBtn, this)); // <FS:CR> FIRE-11847
// </FS:Zi>
fillSearchComboBox();
@ -371,6 +380,9 @@ void LLNavigationBar::setupPanel()
// return TRUE;
LLHints::getInstance()->registerHintTarget("nav_bar",mView->getHandle());
// </FS:Zi>
// <FS:Ansariel> FIRE-11847
mRlvBehaviorCallbackConnection = gRlvHandler.setBehaviourCallback(boost::bind(&LLNavigationBar::updateRlvRestrictions, this, _1, _2));
}
// <FS:Zi> No size calculations in code please. XUI handles it all now with visibility_control
@ -881,8 +893,16 @@ void LLNavigationBar::onRightMouseDown(S32 x,S32 y,MASK mask)
// </FS:Zi>
// <FS:CR> FIRE-11847
void LLNavigationBar::onClickedSkyBtn()
void LLNavigationBar::onClickedLightingBtn()
{
LLFloaterReg::showInstance("env_edit_sky", "edit");
LLFloaterReg::showInstance("env_adjust_snapshot");
}
void LLNavigationBar::updateRlvRestrictions(ERlvBehaviour behavior, ERlvParamType type)
{
if (behavior == RLV_BHVR_SETENV)
{
mView->getChild<LLButton>("PersonalLighting")->setEnabled(type != RLV_TYPE_ADD);
}
}
// </FS:CR> FIRE-11847

View File

@ -33,6 +33,7 @@
#include "llbutton.h"
#include "lllayoutstack.h"
#include "llinitdestroyclass.h"
#include "rlvdefines.h"
class LLLocationInputCtrl;
class LLMenuGL;
@ -151,7 +152,11 @@ private:
void fillSearchComboBox();
void onClickedSkyBtn(); // <FS:CR> FIRE-11847
// <FS:CR> FIRE-11847
void onClickedLightingBtn();
boost::signals2::connection mRlvBehaviorCallbackConnection;
void updateRlvRestrictions(ERlvBehaviour behavior, ERlvParamType type);
// </FS:CR>
// <FS:Zi> Make navigation bar part of the UI
// static void destroyClass()

View File

@ -66,9 +66,6 @@ extern LLControlGroup gSavedSettings;
static const LLUUID PARCEL_MEDIA_LIST_ITEM_UUID = LLUUID("CAB5920F-E484-4233-8621-384CF373A321");
// static const LLUUID PARCEL_AUDIO_LIST_ITEM_UUID = LLUUID("DF4B020D-8A24-4B95-AB5D-CA970D694822"); // ## Zi: Media/Stream separation
const F32 AUTO_CLOSE_FADE_TIME_START= 2.0f;
const F32 AUTO_CLOSE_FADE_TIME_END = 3.0f;
//
// LLPanelNearByMedia
//
@ -82,8 +79,6 @@ LLPanelNearByMedia::LLPanelNearByMedia()
mParcelMediaItem(NULL)
// mParcelAudioItem(NULL) // ## Zi: Media/Stream separation
{
mHoverTimer.stop();
// This is just an initial value, mParcelAudioAutoStart does not affect ParcelMediaAutoPlayEnable
/* ## Zi: Media/Stream separation
mParcelAudioAutoStart = gSavedSettings.getS32("ParcelMediaAutoPlayEnable") != 0
@ -115,7 +110,7 @@ LLPanelNearByMedia::~LLPanelNearByMedia()
BOOL LLPanelNearByMedia::postBuild()
{
LLPanel::postBuild();
LLPanelPulldown::postBuild();
const S32 RESIZE_BAR_THICKNESS = 6;
LLResizeBar::Params p;
@ -200,45 +195,10 @@ void LLPanelNearByMedia::handleMediaAutoPlayChanged(const LLSD& newvalue)
</FS:Zi> Media/Stream separation
*/
/*virtual*/
void LLPanelNearByMedia::onMouseEnter(S32 x, S32 y, MASK mask)
{
mHoverTimer.stop();
LLPanel::onMouseEnter(x,y,mask);
}
/*virtual*/
void LLPanelNearByMedia::onMouseLeave(S32 x, S32 y, MASK mask)
{
mHoverTimer.start();
LLPanel::onMouseLeave(x,y,mask);
}
/*virtual*/
void LLPanelNearByMedia::onTopLost()
{
setVisible(FALSE);
}
/*virtual*/
void LLPanelNearByMedia::onVisibilityChange ( BOOL new_visibility )
{
if (new_visibility)
{
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
}
else
{
mHoverTimer.stop();
}
}
/*virtual*/
void LLPanelNearByMedia::reshape(S32 width, S32 height, BOOL called_from_parent)
{
LLPanel::reshape(width, height, called_from_parent);
LLPanelPulldown::reshape(width, height, called_from_parent);
LLButton* more_btn = findChild<LLButton>("more_btn");
if (more_btn && more_btn->getValue().asBoolean())
@ -262,24 +222,14 @@ void LLPanelNearByMedia::draw()
refreshList();
updateControls();
F32 alpha = mHoverTimer.getStarted()
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), AUTO_CLOSE_FADE_TIME_START, AUTO_CLOSE_FADE_TIME_END, 1.f, 0.f)
: 1.0f;
LLViewDrawContext context(alpha);
LLPanel::draw();
if (alpha == 0.f)
{
setVisible(false);
}
LLPanelPulldown::draw();
}
/*virtual*/
BOOL LLPanelNearByMedia::handleHover(S32 x, S32 y, MASK mask)
{
LLPanel::handleHover(x, y, mask);
LLPanelPulldown::handleHover(x, y, mask);
// If we are hovering over this panel, make sure to clear any hovered media
// ID. Note that the more general solution would be to clear this ID when

View File

@ -27,7 +27,7 @@
#ifndef LL_LLPANELNEARBYMEDIA_H
#define LL_LLPANELNEARBYMEDIA_H
#include "llpanel.h"
#include "llpanelpulldown.h"
class LLPanelNearbyMedia;
class LLButton;
@ -39,16 +39,12 @@ class LLTextBox;
class LLComboBox;
class LLViewerMediaImpl;
class LLPanelNearByMedia : public LLPanel
class LLPanelNearByMedia : public LLPanelPulldown
{
public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void draw();
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
/*virtual*/ void onTopLost();
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
@ -176,7 +172,6 @@ private:
LLRect mMoreRect;
LLRect mLessRect;
LLFrameTimer mHoverTimer;
LLScrollListItem* mParcelMediaItem;
// LLScrollListItem* mParcelAudioItem; // <FS:Zi> Media/Stream separation
};

View File

@ -0,0 +1,150 @@
/**
* @file llpanelpresetscamerapulldown.cpp
* @brief A panel showing a quick way to pick camera presets
*
* $LicenseInfo:firstyear=2017&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2017, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llpanelpresetscamerapulldown.h"
#include "llviewercontrol.h"
#include "llstatusbar.h"
#include "llbutton.h"
#include "lltabcontainer.h"
#include "llfloatercamera.h"
#include "llfloaterreg.h"
#include "llfloaterpreference.h"
#include "llpresetsmanager.h"
#include "llsliderctrl.h"
#include "llscrolllistctrl.h"
#include "lltrans.h"
///----------------------------------------------------------------------------
/// Class LLPanelPresetsCameraPulldown
///----------------------------------------------------------------------------
// Default constructor
LLPanelPresetsCameraPulldown::LLPanelPresetsCameraPulldown()
{
mCommitCallbackRegistrar.add("Presets.toggleCameraFloater", boost::bind(&LLPanelPresetsCameraPulldown::onViewButtonClick, this, _2));
mCommitCallbackRegistrar.add("PresetsCamera.RowClick", boost::bind(&LLPanelPresetsCameraPulldown::onRowClick, this, _2));
buildFromFile( "panel_presets_camera_pulldown.xml");
}
BOOL LLPanelPresetsCameraPulldown::postBuild()
{
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
if (presetsMgr)
{
// Make sure there is a default preference file
presetsMgr->createMissingDefault(PRESETS_CAMERA);
// <FS:Ansariel> Done in LLPresetsManager ctor
//presetsMgr->startWatching(PRESETS_CAMERA);
presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this));
}
populatePanel();
return LLPanelPulldown::postBuild();
}
void LLPanelPresetsCameraPulldown::populatePanel()
{
LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_CAMERA, mPresetNames, DEFAULT_BOTTOM);
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_camera_list");
if (scroll && mPresetNames.begin() != mPresetNames.end())
{
scroll->clearRows();
std::string active_preset = gSavedSettings.getString("PresetCameraActive");
if (active_preset == PRESETS_DEFAULT)
{
active_preset = LLTrans::getString(PRESETS_DEFAULT);
}
for (std::list<std::string>::const_iterator it = mPresetNames.begin(); it != mPresetNames.end(); ++it)
{
const std::string& name = *it;
LL_DEBUGS() << "adding '" << name << "'" << LL_ENDL;
LLSD row;
row["columns"][0]["column"] = "preset_name";
row["columns"][0]["value"] = name;
bool is_selected_preset = false;
if (name == active_preset)
{
row["columns"][1]["column"] = "icon";
row["columns"][1]["type"] = "icon";
row["columns"][1]["value"] = "Check_Mark";
is_selected_preset = true;
}
LLScrollListItem* new_item = scroll->addElement(row);
new_item->setSelected(is_selected_preset);
}
}
}
void LLPanelPresetsCameraPulldown::onRowClick(const LLSD& user_data)
{
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_camera_list");
if (scroll)
{
LLScrollListItem* item = scroll->getFirstSelected();
if (item)
{
std::string name = item->getColumn(1)->getValue().asString();
LL_DEBUGS() << "selected '" << name << "'" << LL_ENDL;
LLFloaterCamera::switchToPreset(name);
setVisible(FALSE);
}
else
{
LL_DEBUGS() << "none selected" << LL_ENDL;
}
}
else
{
LL_DEBUGS() << "no scroll" << LL_ENDL;
}
}
void LLPanelPresetsCameraPulldown::onViewButtonClick(const LLSD& user_data)
{
// close the minicontrol, we're bringing up the big one
setVisible(FALSE);
LLFloaterReg::toggleInstanceOrBringToFront("camera");
}

View File

@ -0,0 +1,49 @@
/**
* @file llpanelpresetscamerapulldown.h
* @brief A panel showing a quick way to pick camera presets
*
* $LicenseInfo:firstyear=2017&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2017, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLPANELPRESETSCAMERAPULLDOWN_H
#define LL_LLPANELPRESETSCAMERAPULLDOWN_H
#include "linden_common.h"
#include "llpanelpulldown.h"
class LLPanelPresetsCameraPulldown : public LLPanelPulldown
{
public:
LLPanelPresetsCameraPulldown();
/*virtual*/ BOOL postBuild();
void populatePanel();
private:
void onViewButtonClick(const LLSD& user_data);
void onRowClick(const LLSD& user_data);
std::list<std::string> mPresetNames;
LOG_CLASS(LLPanelPresetsCameraPulldown);
};
#endif // LL_LLPANELPRESETSCAMERAPULLDOWN_H

View File

@ -40,9 +40,6 @@
#include "llscrolllistctrl.h"
#include "lltrans.h"
/* static */ const F32 LLPanelPresetsPulldown::sAutoCloseFadeStartTimeSec = 2.0f;
/* static */ const F32 LLPanelPresetsPulldown::sAutoCloseTotalTimeSec = 3.0f;
///----------------------------------------------------------------------------
/// Class LLPanelPresetsPulldown
///----------------------------------------------------------------------------
@ -50,8 +47,6 @@
// Default constructor
LLPanelPresetsPulldown::LLPanelPresetsPulldown()
{
mHoverTimer.stop();
mCommitCallbackRegistrar.add("Presets.GoGraphicsPrefs", boost::bind(&LLPanelPresetsPulldown::onGraphicsButtonClick, this, _2));
mCommitCallbackRegistrar.add("Presets.RowClick", boost::bind(&LLPanelPresetsPulldown::onRowClick, this, _2));
@ -63,17 +58,16 @@ BOOL LLPanelPresetsPulldown::postBuild()
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPresetsPulldown::populatePanel, this));
// Make sure there is a default preference file
presetsMgr->createMissingDefault();
presetsMgr->createMissingDefault(PRESETS_GRAPHIC);
populatePanel();
return LLPanel::postBuild();
return LLPanelPulldown::postBuild();
}
void LLPanelPresetsPulldown::populatePanel()
{
std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_GRAPHIC);
LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, mPresetNames, DEFAULT_TOP);
LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_GRAPHIC, mPresetNames, DEFAULT_TOP);
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_list");
@ -112,61 +106,6 @@ void LLPanelPresetsPulldown::populatePanel()
}
}
/*virtual*/
void LLPanelPresetsPulldown::onMouseEnter(S32 x, S32 y, MASK mask)
{
mHoverTimer.stop();
LLPanel::onMouseEnter(x,y,mask);
}
/*virtual*/
void LLPanelPresetsPulldown::onTopLost()
{
setVisible(FALSE);
}
/*virtual*/
BOOL LLPanelPresetsPulldown::handleMouseDown(S32 x, S32 y, MASK mask)
{
LLPanel::handleMouseDown(x,y,mask);
return TRUE;
}
/*virtual*/
BOOL LLPanelPresetsPulldown::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
LLPanel::handleRightMouseDown(x, y, mask);
return TRUE;
}
/*virtual*/
BOOL LLPanelPresetsPulldown::handleDoubleClick(S32 x, S32 y, MASK mask)
{
LLPanel::handleDoubleClick(x, y, mask);
return TRUE;
}
/*virtual*/
void LLPanelPresetsPulldown::onMouseLeave(S32 x, S32 y, MASK mask)
{
mHoverTimer.start();
LLPanel::onMouseLeave(x,y,mask);
}
/*virtual*/
void LLPanelPresetsPulldown::onVisibilityChange ( BOOL new_visibility )
{
if (new_visibility)
{
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
}
else
{
mHoverTimer.stop();
}
}
void LLPanelPresetsPulldown::onRowClick(const LLSD& user_data)
{
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_list");
@ -213,19 +152,3 @@ void LLPanelPresetsPulldown::onGraphicsButtonClick(const LLSD& user_data)
}
}
}
//virtual
void LLPanelPresetsPulldown::draw()
{
F32 alpha = mHoverTimer.getStarted()
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f)
: 1.0f;
LLViewDrawContext context(alpha);
LLPanel::draw();
if (alpha == 0.f)
{
setVisible(FALSE);
}
}

View File

@ -29,22 +29,13 @@
#include "linden_common.h"
#include "llpanel.h"
#include "llpanelpulldown.h"
class LLFrameTimer;
class LLPanelPresetsPulldown : public LLPanel
class LLPanelPresetsPulldown : public LLPanelPulldown
{
public:
LLPanelPresetsPulldown();
/*virtual*/ void draw();
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
/*virtual*/ void onTopLost();
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
/*virtual*/ BOOL postBuild();
void populatePanel();
@ -53,9 +44,6 @@ class LLPanelPresetsPulldown : public LLPanel
void onRowClick(const LLSD& user_data);
std::list<std::string> mPresetNames;
LLFrameTimer mHoverTimer;
static const F32 sAutoCloseFadeStartTimeSec;
static const F32 sAutoCloseTotalTimeSec;
LOG_CLASS(LLPanelPresetsPulldown);
};

View File

@ -0,0 +1,118 @@
/**
* @file llpanelpulldown.cpp
* @brief A panel that serves as a basis for multiple toolbar pulldown panels
*
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2020, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llpanelpulldown.h"
const F32 AUTO_CLOSE_FADE_TIME_START_SEC = 2.0f;
const F32 AUTO_CLOSE_FADE_TIME_END_SEC = 3.0f;
///----------------------------------------------------------------------------
/// Class LLPanelPresetsCameraPulldown
///----------------------------------------------------------------------------
// Default constructor
LLPanelPulldown::LLPanelPulldown()
{
mHoverTimer.stop();
}
/*virtual*/
void LLPanelPulldown::onMouseEnter(S32 x, S32 y, MASK mask)
{
mHoverTimer.stop();
LLPanel::onMouseEnter(x, y, mask);
}
/*virtual*/
void LLPanelPulldown::onTopLost()
{
setVisible(FALSE);
}
/*virtual*/
BOOL LLPanelPulldown::handleMouseDown(S32 x, S32 y, MASK mask)
{
LLPanel::handleMouseDown(x, y, mask);
return TRUE;
}
/*virtual*/
BOOL LLPanelPulldown::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
LLPanel::handleRightMouseDown(x, y, mask);
return TRUE;
}
/*virtual*/
BOOL LLPanelPulldown::handleDoubleClick(S32 x, S32 y, MASK mask)
{
LLPanel::handleDoubleClick(x, y, mask);
return TRUE;
}
BOOL LLPanelPulldown::handleScrollWheel(S32 x, S32 y, S32 clicks)
{
LLPanel::handleScrollWheel(x, y, clicks);
return TRUE; //If we got here, then we are in Pulldown's rect, consume the event.
}
/*virtual*/
void LLPanelPulldown::onMouseLeave(S32 x, S32 y, MASK mask)
{
mHoverTimer.start();
LLPanel::onMouseLeave(x, y, mask);
}
/*virtual*/
void LLPanelPulldown::onVisibilityChange(BOOL new_visibility)
{
if (new_visibility)
{
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
}
else
{
mHoverTimer.stop();
}
}
//virtual
void LLPanelPulldown::draw()
{
F32 alpha = mHoverTimer.getStarted()
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), AUTO_CLOSE_FADE_TIME_START_SEC, AUTO_CLOSE_FADE_TIME_END_SEC, 1.f, 0.f)
: 1.0f;
LLViewDrawContext context(alpha);
LLPanel::draw();
if (alpha == 0.f)
{
setVisible(FALSE);
}
}

View File

@ -0,0 +1,55 @@
/**
* @file llpanelpulldown.h
* @brief A panel that serves as a basis for multiple toolbar pulldown panels
*
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2020, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLPANELPULLDOWN_H
#define LL_LLPANELPULLDOWN_H
#include "linden_common.h"
#include "llpanel.h"
class LLFrameTimer;
class LLPanelPulldown : public LLPanel
{
public:
LLPanelPulldown();
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
/*virtual*/ void onTopLost();
/*virtual*/ void onVisibilityChange(BOOL new_visibility);
/*virtual*/ void draw();
protected:
LLFrameTimer mHoverTimer;
};
#endif // LL_LLPANELPULLDOWN_H

View File

@ -44,9 +44,6 @@
#include "llcheckboxctrl.h"
#include "llviewercontrol.h"
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseFadeStartTimeSec = 2.0f;
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseTotalTimeSec = 3.0f;
///----------------------------------------------------------------------------
/// Class LLPanelVolumePulldown
///----------------------------------------------------------------------------
@ -54,15 +51,11 @@
// Default constructor
LLPanelVolumePulldown::LLPanelVolumePulldown()
{
mHoverTimer.stop();
/*//<FS:KC> Handled centrally now
mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2));
mCommitCallbackRegistrar.add("Vol.SetSounds", boost::bind(&LLPanelVolumePulldown::onClickSetSounds, this));
mCommitCallbackRegistrar.add("Vol.updateMediaAutoPlayCheckbox", boost::bind(&LLPanelVolumePulldown::updateMediaAutoPlayCheckbox, this, _1));
mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2));
// <FS:Ansariel> Missing callback function
mCommitCallbackRegistrar.add("Vol.SetSounds", boost::bind(&LLPanelVolumePulldown::setSounds, this));
*/
buildFromFile( "panel_volume_pulldown.xml");
@ -79,41 +72,7 @@ BOOL LLPanelVolumePulldown::postBuild()
collisions_audio_play_btn->setEnabled(!(mute_sound_effects || mute_all_sounds));
// </FS:PP>
return LLPanel::postBuild();
}
/*virtual*/
void LLPanelVolumePulldown::onMouseEnter(S32 x, S32 y, MASK mask)
{
mHoverTimer.stop();
LLPanel::onMouseEnter(x,y,mask);
}
/*virtual*/
void LLPanelVolumePulldown::onTopLost()
{
setVisible(FALSE);
}
/*virtual*/
void LLPanelVolumePulldown::onMouseLeave(S32 x, S32 y, MASK mask)
{
mHoverTimer.start();
LLPanel::onMouseLeave(x,y,mask);
}
/*virtual*/
void LLPanelVolumePulldown::onVisibilityChange ( BOOL new_visibility )
{
if (new_visibility)
{
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
}
else
{
mHoverTimer.stop();
}
return LLPanelPulldown::postBuild();
}
//<FS:KC> Handled centrally now
@ -170,32 +129,3 @@ void LLPanelVolumePulldown::onClickSetSounds()
getChild<LLCheckBoxCtrl>("gesture_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds"));
}
*/
//virtual
void LLPanelVolumePulldown::draw()
{
F32 alpha = mHoverTimer.getStarted()
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f)
: 1.0f;
LLViewDrawContext context(alpha);
LLPanel::draw();
if (alpha == 0.f)
{
setVisible(FALSE);
}
}
//<FS:KC> Handled centrally now
/*
// <FS:Ansariel> Missing callback function
void LLPanelVolumePulldown::setSounds()
{
// Disable Enable gesture/collisions sounds checkbox if the master sound is disabled
// or if sound effects are disabled.
getChild<LLCheckBoxCtrl>("gesture_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds"));
getChild<LLCheckBoxCtrl>("collisions_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds"));
}
// </FS:Ansariel> Missing callback function
*/

View File

@ -30,19 +30,12 @@
#include "linden_common.h"
#include "llpanel.h"
#include "llpanelpulldown.h"
class LLFrameTimer;
class LLPanelVolumePulldown : public LLPanel
class LLPanelVolumePulldown : public LLPanelPulldown
{
public:
LLPanelVolumePulldown();
/*virtual*/ void draw();
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
/*virtual*/ void onTopLost();
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
/*virtual*/ BOOL postBuild();
private:
@ -53,13 +46,8 @@ class LLPanelVolumePulldown : public LLPanel
// "Streaming Music" and "Media" are unchecked. Otherwise enables it.
void updateMediaAutoPlayCheckbox(LLUICtrl* ctrl);
void onAdvancedButtonClick(const LLSD& user_data);
// <FS:Ansariel> Missing callback function
void setSounds();
*/
LLFrameTimer mHoverTimer;
static const F32 sAutoCloseFadeStartTimeSec;
static const F32 sAutoCloseTotalTimeSec;
};

View File

@ -39,6 +39,8 @@
#include "llfloaterpreference.h"
#include "llfloaterreg.h"
#include "llfeaturemanager.h"
#include "llagentcamera.h"
#include "llfile.h"
#include "quickprefs.h"
LLPresetsManager::LLPresetsManager()
@ -50,10 +52,20 @@ 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()
{
mCameraChangedSignal.disconnect();
}
void LLPresetsManager::triggerChangeCameraSignal()
{
mPresetListChangeCameraSignal();
}
void LLPresetsManager::triggerChangeSignal()
@ -61,27 +73,74 @@ void LLPresetsManager::triggerChangeSignal()
mPresetListChangeSignal();
}
void LLPresetsManager::createMissingDefault()
void LLPresetsManager::createMissingDefault(const std::string& subdirectory)
{
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//if(gDirUtilp->getLindenUserDir().empty())
//{
// return;
//}
//std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
if (PRESETS_CAMERA == subdirectory)
{
createCameraDefaultPresets();
return;
}
//std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR,
subdirectory, PRESETS_DEFAULT + ".xml");
// </FS:Ansariel>
if (!gDirUtilp->fileExists(default_file))
{
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
// Write current graphic settings as the default
savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);
// Write current settings as the default
savePreset(subdirectory, PRESETS_DEFAULT, true);
}
else
{
LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL;
}
}
void LLPresetsManager::createCameraDefaultPresets()
{
bool is_default_created = createDefaultCameraPreset(PRESETS_REAR_VIEW);
is_default_created |= createDefaultCameraPreset(PRESETS_FRONT_VIEW);
is_default_created |= createDefaultCameraPreset(PRESETS_SIDE_VIEW);
if (is_default_created)
{
triggerChangeCameraSignal();
}
}
void LLPresetsManager::startWatching(const std::string& subdirectory)
{
if (PRESETS_CAMERA == subdirectory)
{
std::vector<std::string> name_list;
getControlNames(name_list);
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
{
std::string ctrl_name = *it;
if (gSavedSettings.controlExists(ctrl_name))
{
LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(ctrl_name);
if (cntrl_ptr.isNull())
{
LL_WARNS("Init") << "Unable to set signal on global setting '" << ctrl_name
<< "'" << LL_ENDL;
}
else
{
mCameraChangedSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&settingChanged));
}
}
}
}
else
{
LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL;
}
}
std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
@ -90,21 +149,25 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
//std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR);
std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR);
// </FS:Ansariel>
std::string full_path;
LLFile::mkdir(presets_path);
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
full_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory);
//std::string dest_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
std::string dest_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory);
// </FS:Ansariel>
LLFile::mkdir(full_path);
if (!gDirUtilp->fileExists(dest_path))
LLFile::mkdir(dest_path);
return full_path;
return dest_path;
}
void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option)
void LLPresetsManager::loadPresetNamesFromDir(const std::string& subdirectory, preset_name_list_t& presets, EDefaultOptions default_option)
{
bool IS_CAMERA = (PRESETS_CAMERA == subdirectory);
bool IS_GRAPHIC = (PRESETS_GRAPHIC == subdirectory);
std::string dir = LLPresetsManager::getInstance()->getPresetsDir(subdirectory);
LL_INFOS("AppInit") << "Loading list of preset names from " << dir << LL_ENDL;
mPresetNames.clear();
@ -120,16 +183,33 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
{
std::string path = gDirUtilp->add(dir, file);
std::string name = LLURI::unescape(gDirUtilp->getBaseFileName(path, /*strip_exten = */ true));
LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL;
LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL;
if (PRESETS_DEFAULT != name)
if (IS_CAMERA)
{
if (isTemplateCameraPreset(name))
{
continue;
}
if ((default_option == DEFAULT_HIDE) || (default_option == DEFAULT_BOTTOM))
{
if (isDefaultCameraPreset(name))
{
continue;
}
}
mPresetNames.push_back(name);
}
else
if (IS_GRAPHIC)
{
switch (default_option)
if (PRESETS_DEFAULT != name)
{
mPresetNames.push_back(name);
}
else
{
switch (default_option)
{
case DEFAULT_SHOW:
mPresetNames.push_back(LLTrans::getString(PRESETS_DEFAULT));
break;
@ -141,16 +221,84 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
case DEFAULT_HIDE:
default:
break;
}
}
}
}
}
if (IS_CAMERA)
{
mPresetNames.sort(LLStringUtil::precedesDict);
if (default_option == DEFAULT_BOTTOM)
{
mPresetNames.push_back(PRESETS_FRONT_VIEW);
mPresetNames.push_back(PRESETS_REAR_VIEW);
mPresetNames.push_back(PRESETS_SIDE_VIEW);
}
}
presets = mPresetNames;
}
bool LLPresetsManager::mCameraDirty = false;
bool LLPresetsManager::mIgnoreChangedSignal = false;
void LLPresetsManager::setCameraDirty(bool dirty)
{
mCameraDirty = dirty;
}
bool LLPresetsManager::isCameraDirty()
{
return mCameraDirty;
}
void LLPresetsManager::settingChanged()
{
setCameraDirty(true);
static LLCachedControl<std::string> preset_camera_active(gSavedSettings, "PresetCameraActive", "");
std::string preset_name = preset_camera_active;
if (!preset_name.empty() && !mIgnoreChangedSignal)
{
gSavedSettings.setString("PresetCameraActive", "");
// Hack call because this is a static routine
LLPresetsManager::getInstance()->triggerChangeCameraSignal();
}
}
void LLPresetsManager::getControlNames(std::vector<std::string>& names)
{
const std::vector<std::string> camera_controls = boost::assign::list_of
// From panel_preferences_move.xml
("CameraAngle")
("CameraOffsetScale")
("EditCameraMovement")
("AppearanceCameraMovement")
// From llagentcamera.cpp
("CameraOffsetBuild")
("TrackFocusObject")
("CameraOffsetRearView")
("FocusOffsetRearView")
("AvatarSitRotation")
// <FS:Ansariel> Additional settings
("ZoomTime")
("CameraPositionSmoothing")
("EditAppearanceLighting")
("FSDisableMouseWheelCameraZoom")
("DisableCameraConstraints")
// </FS:Ansariel>
;
names = camera_controls;
}
bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)
{
bool IS_CAMERA = (PRESETS_CAMERA == subdirectory);
bool IS_GRAPHIC = (PRESETS_GRAPHIC == subdirectory);
if (LLTrans::getString(PRESETS_DEFAULT) == name)
{
name = PRESETS_DEFAULT;
@ -161,24 +309,30 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
return false;
}
if (isTemplateCameraPreset(name))
{
LL_WARNS() << "Should not overwrite template presets" << LL_ENDL;
return false;
}
bool saved = false;
std::vector<std::string> name_list;
if(PRESETS_GRAPHIC == subdirectory)
if (IS_GRAPHIC)
{
// <FS:Ansariel> Graphic preset controls independent from XUI
//LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
//if (instance && !createDefault)
//{
// gSavedSettings.setString("PresetGraphicActive", name);
// gSavedSettings.setString("PresetGraphicActive", name);
// instance->getControlNames(name_list);
// LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
// LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
// name_list.push_back("PresetGraphicActive");
//}
//else
//else
//{
// LL_WARNS() << "preferences floater instance not found" << LL_ENDL;
//}
// LL_WARNS("Presets") << "preferences floater instance not found" << LL_ENDL;
//}
if (!createDefault)
{
gSavedSettings.setString("PresetGraphicActive", name);
@ -186,130 +340,172 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
}
// </FS:Ansariel>
}
else if(PRESETS_CAMERA == subdirectory)
else if (IS_CAMERA)
{
name_list.clear();
name_list.push_back("Placeholder");
getControlNames(name_list);
name_list.push_back("PresetCameraActive");
}
else
{
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
}
if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list
|| (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings
{
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
else
{
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
}
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
if (createDefault)
{
paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
{
mIsLoadingPreset = true; // <FS:Ansariel> Graphic preset controls independent from XUI
// use the recommended setting as an initial one (MAINT-6435)
gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
mIsLoadingPreset = false; // <FS:Ansariel> Graphic preset controls independent from XUI
}
// Create a default graphics preset from hw recommended settings
if (IS_GRAPHIC && createDefault && name == PRESETS_DEFAULT)
{
paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
{
mIsLoadingPreset = true; // <FS:Ansariel> Graphic preset controls independent from XUI
// use the recommended setting as an initial one (MAINT-6435)
gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
mIsLoadingPreset = false; // <FS:Ansariel> Graphic preset controls independent from XUI
}
// <FS:Ansariel> Graphic preset controls independent from XUI
// Add the controls not in feature table to the default preset with their current value
for (std::vector<std::string>::iterator it = mGraphicPresetControls.begin(); it != mGraphicPresetControls.end(); ++it)
// <FS:Ansariel> Graphic preset controls independent from XUI
// Add the controls not in feature table to the default preset with their current value
for (std::vector<std::string>::iterator it = mGraphicPresetControls.begin(); it != mGraphicPresetControls.end(); ++it)
{
std::string ctrl_name = *it;
if (!paramsData.has(ctrl_name))
{
std::string ctrl_name = *it;
if (!paramsData.has(ctrl_name))
{
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
std::string comment = ctrl->getComment();
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
LLSD value = ctrl->getValue();
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
std::string comment = ctrl->getComment();
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
LLSD value = ctrl->getValue();
paramsData[ctrl_name]["Comment"] = comment;
paramsData[ctrl_name]["Persist"] = 1;
paramsData[ctrl_name]["Type"] = type;
paramsData[ctrl_name]["Value"] = value;
paramsData[ctrl_name]["Comment"] = comment;
paramsData[ctrl_name]["Persist"] = 1;
paramsData[ctrl_name]["Type"] = type;
paramsData[ctrl_name]["Value"] = value;
}
}
// </FS:Ansariel>
}
else
{
ECameraPreset new_camera_preset = (ECameraPreset)gSavedSettings.getU32("CameraPresetType");
bool new_camera_offsets = false;
if (IS_CAMERA)
{
if (isDefaultCameraPreset(name))
{
if (PRESETS_REAR_VIEW == name)
{
new_camera_preset = CAMERA_PRESET_REAR_VIEW;
}
else if (PRESETS_SIDE_VIEW == name)
{
new_camera_preset = CAMERA_PRESET_GROUP_VIEW;
}
else if (PRESETS_FRONT_VIEW == name)
{
new_camera_preset = CAMERA_PRESET_FRONT_VIEW;
}
}
// </FS:Ansariel>
}
else
{
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
{
std::string ctrl_name = *it;
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
std::string comment = ctrl->getComment();
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
LLSD value = ctrl->getValue();
paramsData[ctrl_name]["Comment"] = comment;
paramsData[ctrl_name]["Persist"] = 1;
paramsData[ctrl_name]["Type"] = type;
paramsData[ctrl_name]["Value"] = value;
}
}
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
// write to file
llofstream presetsXML(pathName.c_str());
if (presetsXML.is_open())
{
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
presetsXML.close();
saved = true;
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
if (!createDefault)
{
gSavedSettings.setString("PresetGraphicActive", name);
// signal interested parties
triggerChangeSignal();
}
}
else
{
LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL;
}
}
else
{
LL_INFOS() << "No settings found; preferences floater has not yet been created" << LL_ENDL;
}
return saved;
}
void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option)
{
combo->clearRows();
std::string presets_dir = getPresetsDir(subdirectory);
if (!presets_dir.empty())
{
std::list<std::string> preset_names;
loadPresetNamesFromDir(presets_dir, preset_names, default_option);
std::string preset_graphic_active = gSavedSettings.getString("PresetGraphicActive");
if (preset_names.begin() != preset_names.end())
{
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
else
{
const std::string& name = *it;
combo->add(name, LLSD().with(0, name));
new_camera_preset = CAMERA_PRESET_CUSTOM;
}
new_camera_offsets = (!isDefaultCameraPreset(name) || (ECameraPreset)gSavedSettings.getU32("CameraPresetType") != new_camera_preset);
}
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
{
std::string ctrl_name = *it;
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
if (ctrl)
{
std::string comment = ctrl->getComment();
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
LLSD value = ctrl->getValue();
paramsData[ctrl_name]["Comment"] = comment;
paramsData[ctrl_name]["Persist"] = 1;
paramsData[ctrl_name]["Type"] = type;
paramsData[ctrl_name]["Value"] = value;
}
}
if (IS_CAMERA)
{
gSavedSettings.setU32("CameraPresetType", new_camera_preset);
}
}
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
// If the active preset name is the only thing in the list, don't save the list
if (paramsData.size() > 1)
{
// write to file
llofstream presetsXML(pathName.c_str());
if (presetsXML.is_open())
{
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
presetsXML.close();
saved = true;
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
if (IS_GRAPHIC)
{
gSavedSettings.setString("PresetGraphicActive", name);
// signal interested parties
triggerChangeSignal();
}
if (IS_CAMERA)
{
gSavedSettings.setString("PresetCameraActive", name);
setCameraDirty(false);
// signal interested parties
triggerChangeCameraSignal();
}
}
else
{
combo->setLabel(LLTrans::getString("preset_combo_label"));
LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL;
}
}
else
{
LL_INFOS() << "No settings available to be saved" << LL_ENDL;
}
return saved;
}
bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option)
{
bool sts = true;
combo->clearRows();
combo->setEnabled(TRUE);
std::list<std::string> preset_names;
loadPresetNamesFromDir(subdirectory, preset_names, default_option);
if (preset_names.begin() != preset_names.end())
{
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
{
const std::string& name = *it;
combo->add(name, name);
}
}
else
{
combo->setLabel(LLTrans::getString("preset_combo_label"));
combo->setEnabled(PRESETS_CAMERA != subdirectory);
sts = false;
}
return sts;
}
void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string name)
@ -325,34 +521,42 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n
LL_DEBUGS() << "attempting to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
mIsLoadingPreset = true; // <FS:Ansariel> Graphic preset controls independent from XUI
mIgnoreChangedSignal = true;
if(gSavedSettings.loadFromFile(full_path, false, true) > 0)
{
mIgnoreChangedSignal = false;
if(PRESETS_GRAPHIC == subdirectory)
{
gSavedSettings.setString("PresetGraphicActive", name);
}
// <FS:Ansariel> Update indirect controls
LLAvatarComplexityControls::setIndirectControls();
// <FS:Ansariel> Update indirect controls
LLAvatarComplexityControls::setIndirectControls();
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance)
{
instance->refreshEnabledGraphics();
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance)
{
instance->refreshEnabledGraphics();
}
// <FS:Ansariel> Graphic preset controls independent from XUI
FloaterQuickPrefs* phototools = LLFloaterReg::findTypedInstance<FloaterQuickPrefs>(PHOTOTOOLS_FLOATER);
if (phototools)
{
phototools->refreshSettings();
}
// </FS:Ansariel>
triggerChangeSignal();
}
// <FS:Ansariel> Graphic preset controls independent from XUI
FloaterQuickPrefs* phototools = LLFloaterReg::findTypedInstance<FloaterQuickPrefs>(PHOTOTOOLS_FLOATER);
if (phototools)
if(PRESETS_CAMERA == subdirectory)
{
phototools->refreshSettings();
gSavedSettings.setString("PresetCameraActive", name);
triggerChangeCameraSignal();
}
// </FS:Ansariel>
triggerChangeSignal();
}
else
{
LL_WARNS() << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
}
else
{
mIgnoreChangedSignal = false;
LL_WARNS("Presets") << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
}
mIsLoadingPreset = false; // <FS:Ansariel> Graphic preset controls independent from XUI
}
@ -379,17 +583,73 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, std::string
}
// If you delete the preset that is currently marked as loaded then also indicate that no preset is loaded.
if (gSavedSettings.getString("PresetGraphicActive") == name)
if(PRESETS_GRAPHIC == subdirectory)
{
gSavedSettings.setString("PresetGraphicActive", "");
if (gSavedSettings.getString("PresetGraphicActive") == name)
{
gSavedSettings.setString("PresetGraphicActive", "");
}
// signal interested parties
triggerChangeSignal();
}
// signal interested parties
triggerChangeSignal();
if(PRESETS_CAMERA == subdirectory)
{
if (gSavedSettings.getString("PresetCameraActive") == name)
{
gSavedSettings.setString("PresetCameraActive", "");
}
// signal interested parties
triggerChangeCameraSignal();
}
return sts;
}
bool LLPresetsManager::isDefaultCameraPreset(std::string preset_name)
{
return (preset_name == PRESETS_REAR_VIEW || preset_name == PRESETS_SIDE_VIEW || preset_name == PRESETS_FRONT_VIEW);
}
bool LLPresetsManager::isTemplateCameraPreset(std::string preset_name)
{
return (preset_name == PRESETS_REAR || preset_name == PRESETS_SIDE || preset_name == PRESETS_FRONT);
}
void LLPresetsManager::resetCameraPreset(std::string preset_name)
{
if (isDefaultCameraPreset(preset_name))
{
createDefaultCameraPreset(preset_name, true);
if (gSavedSettings.getString("PresetCameraActive") == preset_name)
{
loadPreset(PRESETS_CAMERA, preset_name);
}
}
}
bool LLPresetsManager::createDefaultCameraPreset(std::string preset_name, bool force_reset)
{
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
//std::string preset_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
std::string preset_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR,
// </FS:Ansariel>
PRESETS_CAMERA, LLURI::escape(preset_name) + ".xml");
if (!gDirUtilp->fileExists(preset_file) || force_reset)
{
std::string template_name = preset_name.substr(0, preset_name.size() - PRESETS_VIEW_SUFFIX.size());
std::string default_template_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, PRESETS_CAMERA, template_name + ".xml");
return LLFile::copy(default_template_file, preset_file);
}
return false;
}
boost::signals2::connection LLPresetsManager::setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb)
{
return mPresetListChangeCameraSignal.connect(cb);
}
boost::signals2::connection LLPresetsManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
{
return mPresetListChangeSignal.connect(cb);

View File

@ -37,11 +37,19 @@ static const std::string PRESETS_DEFAULT_UPPER = "DEFAULT";
static const std::string PRESETS_DIR = "presets";
static const std::string PRESETS_GRAPHIC = "graphic";
static const std::string PRESETS_CAMERA = "camera";
static const std::string PRESETS_REAR = "Rear";
static const std::string PRESETS_FRONT = "Front";
static const std::string PRESETS_SIDE = "Side";
static const std::string PRESETS_VIEW_SUFFIX = " View";
static const std::string PRESETS_REAR_VIEW = PRESETS_REAR + PRESETS_VIEW_SUFFIX;
static const std::string PRESETS_FRONT_VIEW = PRESETS_FRONT + PRESETS_VIEW_SUFFIX;
static const std::string PRESETS_SIDE_VIEW = PRESETS_SIDE + PRESETS_VIEW_SUFFIX;
enum EDefaultOptions
{
DEFAULT_SHOW,
DEFAULT_TOP,
DEFAULT_BOTTOM,
DEFAULT_HIDE // Do not display "Default" in a list
};
@ -55,22 +63,35 @@ public:
typedef std::list<std::string> preset_name_list_t;
typedef boost::signals2::signal<void()> preset_list_signal_t;
void createMissingDefault();
void createMissingDefault(const std::string& subdirectory);
void startWatching(const std::string& subdirectory);
void triggerChangeCameraSignal();
void triggerChangeSignal();
static std::string getPresetsDir(const std::string& subdirectory);
void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option);
bool setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
void loadPresetNamesFromDir(const std::string& subdirectory, preset_name_list_t& presets, EDefaultOptions default_option);
bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);
void loadPreset(const std::string& subdirectory, std::string name);
bool deletePreset(const std::string& subdirectory, std::string name);
bool isCameraDirty();
static void setCameraDirty(bool dirty);
void createCameraDefaultPresets();
bool isTemplateCameraPreset(std::string preset_name);
bool isDefaultCameraPreset(std::string preset_name);
void resetCameraPreset(std::string preset_name);
bool createDefaultCameraPreset(std::string preset_name, bool force_reset = false);
// Emitted when a preset gets loaded, deleted, or saved.
boost::signals2::connection setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb);
boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
// Emitted when a preset gets loaded or saved.
preset_name_list_t mPresetNames;
preset_list_signal_t mPresetListChangeCameraSignal;
preset_list_signal_t mPresetListChangeSignal;
// <FS:Ansariel> Graphic preset controls independent from XUI
@ -79,13 +100,20 @@ public:
// </FS:Ansariel>
private:
LOG_CLASS(LLPresetsManager);
LOG_CLASS(LLPresetsManager);
void getControlNames(std::vector<std::string>& names);
static void settingChanged();
boost::signals2::connection mCameraChangedSignal;
static bool mCameraDirty;
static bool mIgnoreChangedSignal;
// <FS:Ansariel> Graphic preset controls independent from XUI
void initGraphicPresetControlNames();
void initGraphicPresetControls();
void handleGraphicPresetControlChanged(LLControlVariablePtr control, const LLSD& new_value, const LLSD& old_value);
bool mIsLoadingPreset;
bool mIsDrawDistanceSteppingActive;
std::vector<std::string> mGraphicPresetControls;

View File

@ -345,6 +345,7 @@ void LLPreviewNotecard::loadAsset()
if((allow_modify || is_owner) && !source_library)
{
getChildView("Delete")->setEnabled(TRUE);
getChildView("Edit")->setEnabled(FALSE); // <FS:LO> Don't enable external editor button on no mod notecards.
}
}
else

View File

@ -75,6 +75,7 @@
#include "llnotifications.h"
#include "llnotificationsutil.h"
#include "llpersistentnotificationstorage.h"
#include "llpresetsmanager.h"
#include "llteleporthistory.h"
#include "llregionhandle.h"
#include "llsd.h"
@ -2779,6 +2780,8 @@ bool idle_startup()
// JC - 7/20/2002
gViewerWindow->sendShapeToSim();
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_CAMERA);
// The reason we show the alert is because we want to
// reduce confusion for when you log in and your provided
// location is not your expected location. So, if this is

View File

@ -39,6 +39,7 @@
#include "llfloaterbuycurrency.h"
#include "llbuycurrencyhtml.h"
#include "llpanelnearbymedia.h"
#include "llpanelpresetscamerapulldown.h"
#include "llpanelpresetspulldown.h"
#include "llpanelvolumepulldown.h"
#include "llfloaterregioninfo.h"
@ -190,9 +191,11 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
mAudioStreamEnabled(FALSE), // <FS:Zi> Media/Stream separation
mRebakeStuck(FALSE), // <FS:LO> FIRE-7639 - Stop the blinking after a while
mNearbyIcons(FALSE), // <FS:Ansariel> Script debug
mIconPresets(NULL),
mIconPresetsGraphic(NULL),
mIconPresetsCamera(NULL),
mMediaToggle(NULL),
mMouseEnterPresetsConnection(),
mMouseEnterPresetsCameraConnection(),
mMouseEnterVolumeConnection(),
mMouseEnterNearbyMediaConnection(),
mCurrentLocationString()
@ -250,6 +253,10 @@ LLStatusBar::~LLStatusBar()
{
mMouseEnterPresetsConnection.disconnect();
}
if (mMouseEnterPresetsCameraConnection.connected())
{
mMouseEnterPresetsCameraConnection.disconnect();
}
if (mMouseEnterVolumeConnection.connected())
{
mMouseEnterVolumeConnection.disconnect();
@ -297,15 +304,23 @@ BOOL LLStatusBar::postBuild()
mBoxBalance = getChild<LLTextBox>("balance");
mBoxBalance->setClickedCallback( &LLStatusBar::onClickBalance, this );
mIconPresets = getChild<LLButton>( "presets_icon" );
// <FS: KC> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
// mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mIconPresetsCamera = getChild<LLButton>( "presets_icon_camera" );
//mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::mIconPresetsCamera, this));
if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover"))
{
mMouseEnterPresetsConnection = mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mMouseEnterPresetsCameraConnection = mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this));
}
mIconPresetsCamera->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this));
mIconPresetsGraphic = getChild<LLButton>( "presets_icon_graphic" );
// <FS: KC> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
// mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover"))
{
mMouseEnterPresetsConnection = mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
}
// </FS: KC> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
mIconPresets->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mIconPresetsGraphic->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mBtnVolume = getChild<LLButton>( "volume_btn" );
mBtnVolume->setClickedCallback( onClickVolume, this );
@ -396,6 +411,11 @@ BOOL LLStatusBar::postBuild()
mSGPacketLoss = LLUICtrlFactory::create<LLStatGraph>(pgp);
addChild(mSGPacketLoss);
mPanelPresetsCameraPulldown = new LLPanelPresetsCameraPulldown();
addChild(mPanelPresetsCameraPulldown);
mPanelPresetsCameraPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
mPanelPresetsCameraPulldown->setVisible(FALSE);
mPanelPresetsPulldown = new LLPanelPresetsPulldown();
addChild(mPanelPresetsPulldown);
mPanelPresetsPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
@ -685,7 +705,8 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
mBandwidthButton->setVisible(visible && showNetStats); // <FS:PP> FIRE-6287: Clicking on traffic indicator toggles Lag Meter window
mTimeMediaPanel->setVisible(visible);
setBackgroundVisible(visible);
mIconPresets->setVisible(visible);
mIconPresetsCamera->setVisible(visible);
mIconPresetsGraphic->setVisible(visible);
}
void LLStatusBar::debitBalance(S32 debit)
@ -826,13 +847,40 @@ void LLStatusBar::onClickBuyCurrency()
LLFirstUse::receiveLindens(false);
}
void LLStatusBar::onMouseEnterPresetsCamera()
{
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
// <FS:Ansariel> Changed presets icon to LLButton
//LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon_camera" );
//LLRect icon_rect = icon->getRect();
LLRect icon_rect = mIconPresetsCamera->getRect();
// </FS:Ansariel>
LLRect pulldown_rect = mPanelPresetsCameraPulldown->getRect();
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
(pulldown_rect.getWidth() - icon_rect.getWidth()),
icon_rect.mBottom,
pulldown_rect.getWidth(),
pulldown_rect.getHeight());
pulldown_rect.translate(popup_holder->getRect().getWidth() - pulldown_rect.mRight, 0);
mPanelPresetsCameraPulldown->setShape(pulldown_rect);
// show the master presets pull-down
LLUI::getInstance()->clearPopups();
LLUI::getInstance()->addPopup(mPanelPresetsCameraPulldown);
mPanelNearByMedia->setVisible(FALSE);
mPanelVolumePulldown->setVisible(FALSE);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelPresetsCameraPulldown->setVisible(TRUE);
}
void LLStatusBar::onMouseEnterPresets()
{
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
// <FS:Ansariel> Changed presets icon to LLButton
//LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon" );
//LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon_graphic" );
//LLRect icon_rect = icon->getRect();
LLRect icon_rect = mIconPresets->getRect();
LLRect icon_rect = mIconPresetsGraphic->getRect();
// </FS:Ansariel>
LLRect pulldown_rect = mPanelPresetsPulldown->getRect();
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
@ -874,6 +922,7 @@ void LLStatusBar::onMouseEnterVolume()
// show the master volume pull-down
LLUI::getInstance()->clearPopups();
LLUI::getInstance()->addPopup(mPanelVolumePulldown);
mPanelPresetsCameraPulldown->setVisible(FALSE);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelNearByMedia->setVisible(FALSE);
mPanelVolumePulldown->setVisible(TRUE);
@ -898,6 +947,7 @@ void LLStatusBar::onMouseEnterNearbyMedia()
LLUI::getInstance()->clearPopups();
LLUI::getInstance()->addPopup(mPanelNearByMedia);
mPanelPresetsCameraPulldown->setVisible(FALSE);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelVolumePulldown->setVisible(FALSE);
mPanelNearByMedia->setVisible(TRUE);
@ -1643,6 +1693,10 @@ void LLStatusBar::onPopupRolloverChanged(const LLSD& newvalue)
{
mMouseEnterPresetsConnection.disconnect();
}
if (mMouseEnterPresetsCameraConnection.connected())
{
mMouseEnterPresetsCameraConnection.disconnect();
}
if (mMouseEnterVolumeConnection.connected())
{
mMouseEnterVolumeConnection.disconnect();
@ -1654,7 +1708,8 @@ void LLStatusBar::onPopupRolloverChanged(const LLSD& newvalue)
if (new_value)
{
mMouseEnterPresetsConnection = mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mMouseEnterPresetsConnection = mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mMouseEnterPresetsCameraConnection = mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this));
mMouseEnterVolumeConnection = mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this));
mMouseEnterNearbyMediaConnection = mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this));
}

View File

@ -44,6 +44,7 @@ class LLUICtrl;
class LLUUID;
class LLFrameTimer;
class LLStatGraph;
class LLPanelPresetsCameraPulldown;
class LLPanelPresetsPulldown;
class LLPanelVolumePulldown;
class LLPanelNearByMedia;
@ -161,6 +162,7 @@ private:
void onClickBuyCurrency();
void onVolumeChanged(const LLSD& newvalue);
void onMouseEnterPresetsCamera();
void onMouseEnterPresets();
void onMouseEnterVolume();
void onMouseEnterNearbyMedia();
@ -327,7 +329,8 @@ private:
LLStatGraph *mSGBandwidth;
LLStatGraph *mSGPacketLoss;
LLButton *mIconPresets;
LLButton *mIconPresetsCamera;
LLButton *mIconPresetsGraphic;
LLButton *mBtnVolume;
LLTextBox *mBoxBalance;
LLButton *mStreamToggle; // ## Zi: Media/Stream separation
@ -349,6 +352,7 @@ private:
BOOL mShowParcelIcons;
LLFrameTimer* mBalanceTimer;
LLFrameTimer* mHealthTimer;
LLPanelPresetsCameraPulldown* mPanelPresetsCameraPulldown;
LLPanelPresetsPulldown* mPanelPresetsPulldown;
LLPanelVolumePulldown* mPanelVolumePulldown;
LLPanelNearByMedia* mPanelNearByMedia;
@ -369,6 +373,7 @@ private:
// <FS:Ansariel> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
boost::signals2::connection mMouseEnterPresetsConnection;
boost::signals2::connection mMouseEnterPresetsCameraConnection;
boost::signals2::connection mMouseEnterVolumeConnection;
boost::signals2::connection mMouseEnterNearbyMediaConnection;
// </FS:Ansariel>

View File

@ -53,6 +53,7 @@
#include "llfloaterbuyland.h"
#include "llfloaterbvhpreview.h"
#include "llfloatercamera.h"
#include "llfloatercamerapresets.h"
#include "llfloaterchatvoicevolume.h"
#include "llfloaterconversationlog.h"
#include "llfloaterconversationpreview.h"
@ -104,12 +105,14 @@
#include "llfloaterperms.h"
#include "llfloaterpostprocess.h"
#include "llfloaterpreference.h"
#include "llfloaterpreferenceviewadvanced.h"
#include "llfloaterpreviewtrash.h"
#include "llfloaterproperties.h"
#include "llfloaterregiondebugconsole.h"
#include "llfloaterregioninfo.h"
#include "llfloaterregionrestarting.h"
#include "llfloaterreporter.h"
#include "llfloatersavecamerapreset.h"
#include "llfloatersaveprefpreset.h"
#include "llfloatersceneloadstats.h"
#include "llfloaterscriptdebug.h"
@ -262,6 +265,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("bumps", "floater_bumps.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBump>);
LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);
LLFloaterReg::add("camera_presets", "floater_camera_presets.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCameraPresets>);
LLFloaterReg::add("chat_voice", "floater_voice_chat_volume.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChatVoiceVolume>);
// <FS:Ansariel> [FS communication UI]
//LLFloaterReg::add("nearby_chat", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterIMNearbyChat::buildFloater);
@ -370,6 +374,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
LLFloaterReg::add("prefs_graphics_advanced", "floater_preferences_graphics_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceGraphicsAdvanced>);
LLFloaterReg::add("prefs_view_advanced", "floater_preferences_view_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceViewAdvanced>);
LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);
LLFloaterReg::add("prefs_spellchecker_import", "floater_spellcheck_import.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSpellCheckerImport>);
LLFloaterReg::add("prefs_translation", "floater_translation_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTranslationSettings>);
@ -389,6 +394,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProperties>);
LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
LLFloaterReg::add("save_pref_preset", "floater_save_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSavePrefPreset>);
LLFloaterReg::add("save_camera_preset", "floater_save_camera_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSaveCameraPreset>);
LLFloaterReg::add("script_colors", "floater_script_ed_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptEdPrefs>);
LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build<LLFloaterTelehub>);

View File

@ -403,6 +403,7 @@ bool camera_spin_around_ccw_sitting( EKeystate s )
else
{
//change camera but do not send keystrokes
gAgentCamera.unlockView();
gAgentCamera.setOrbitLeftKey( get_orbit_rate() );
}
return true;
@ -420,6 +421,7 @@ bool camera_spin_around_cw_sitting( EKeystate s )
else
{
//change camera but do not send keystrokes
gAgentCamera.unlockView();
gAgentCamera.setOrbitRightKey( get_orbit_rate() );
}
return true;

View File

@ -5235,13 +5235,12 @@ void handle_reset_view()
// switching to outfit selector should automagically save any currently edited wearable
LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "my_outfits"));
}
// <FS:Zi> Added optional V1 behavior so the avatar turns into camera direction after hitting ESC
if(gSavedSettings.getBOOL("ResetViewTurnsAvatar"))
gAgentCamera.resetView();
// </FS:Zi>
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
reset_view_final( TRUE );
LLFloaterCamera::resetCameraMode();
}

View File

@ -4953,7 +4953,9 @@ LLViewerTexture* LLViewerObject::getBakedTextureForMagicId(const LLUUID& id)
}
LLVOAvatar* avatar = getAvatar();
if (avatar && isRiggedMesh() && !isHUDAttachment())
if (avatar && !isHUDAttachment()
&& isMesh()
&& getVolume() && getVolume()->getParams().getSculptID().notNull()) // checking for the rigged mesh by params instead of using isRiggedMesh() to avoid false negatives when skin info isn't ready
{
LLAvatarAppearanceDefines::EBakedTextureIndex texIndex = LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::assetIdToBakedTextureIndex(id);
LLViewerTexture* bakedTexture = avatar->getBakedTexture(texIndex);

View File

@ -55,7 +55,6 @@
#include "llviewerregion.h"
#include "llvoavatar.h"
#include "llvoavatarself.h"
#include "llviewerwindow.h" // *TODO: remove, only used for width/height
#include "llworld.h"
#include "llfeaturemanager.h"
#include "llviewernetwork.h"
@ -588,21 +587,38 @@ void send_stats()
// If the current revision is recent, ping the previous author before overriding
LLSD &misc = body["stats"]["misc"];
// Screen size so the UI team can figure out how big the widgets
// appear and use a "typical" size for end user tests.
#ifdef LL_WINDOWS
// Probe for Vulkan capability (Dave Houlton 05/2020)
//
// Check for presense of a Vulkan loader dll, as a proxy for a Vulkan-capable gpu.
// False-positives and false-negatives are possible, but unlikely. We'll get a good
// approximation of Vulkan capability within current user systems from this. More
// detailed information on versions and extensions can come later.
static bool vulkan_oneshot = false;
static bool vulkan_detected = false;
S32 window_width = gViewerWindow->getWindowWidthRaw();
S32 window_height = gViewerWindow->getWindowHeightRaw();
S32 window_size = (window_width * window_height) / 1024;
misc["string_1"] = llformat("%d", window_size);
misc["string_2"] = llformat("Texture Time: %.2f, Total Time: %.2f", gTextureTimer.getElapsedTimeF32(), gFrameTimeSeconds.value());
if (!vulkan_oneshot)
{
HMODULE vulkan_loader = LoadLibraryExA("vulkan-1.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
if (NULL != vulkan_loader)
{
vulkan_detected = true;
FreeLibrary(vulkan_loader);
}
vulkan_oneshot = true;
}
F32 unbaked_time = LLVOAvatar::sUnbakedTime * 1000.f / gFrameTimeSeconds;
misc["int_1"] = LLSD::Integer(unbaked_time); // Steve: 1.22
F32 grey_time = LLVOAvatar::sGreyTime * 1000.f / gFrameTimeSeconds;
misc["int_2"] = LLSD::Integer(grey_time); // Steve: 1.22
misc["string_1"] = vulkan_detected ? llformat("Vulkan driver is detected") : llformat("No Vulkan driver detected");
LL_INFOS() << "Misc Stats: int_1: " << misc["int_1"] << " int_2: " << misc["int_2"] << LL_ENDL;
#else
misc["string_1"] = llformat("Unused");
#endif // LL_WINDOWS
misc["string_2"] = llformat("Unused");
misc["int_1"] = LLSD::Integer(0);
misc["int_2"] = LLSD::Integer(0);
LL_INFOS() << "Misc Stats: int_1: " << misc["int_1"] << " int_2: " << misc["int_2"] << LL_ENDL;
LL_INFOS() << "Misc Stats: string_1: " << misc["string_1"] << " string_2: " << misc["string_2"] << LL_ENDL;
body["DisplayNamesEnabled"] = gSavedSettings.getBOOL("UseDisplayNames");

View File

@ -8283,7 +8283,8 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
mRoot->updateWorldMatrixChildren();
stopMotion(ANIM_AGENT_BODY_NOISE);
gAgentCamera.setInitSitRot(gAgent.getFrameAgent().getQuaternion());
}
//-----------------------------------------------------------------------------

View File

@ -61,7 +61,7 @@ std::string unescape_name(const std::string& name);
class FSSettingsCollector : public LLInventoryCollectFunctor
{
public:
FSSettingsCollector() { LL_INFOS() << "EEP: Inventory read: " << (gInventory.isInventoryUsable() ? "yes" : "no") << LL_ENDL;}
FSSettingsCollector() {}
virtual ~FSSettingsCollector() {}
bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
@ -69,7 +69,6 @@ public:
if (item && item->getType() == LLAssetType::AT_SETTINGS &&
mSeen.find(item->getAssetUUID()) == mSeen.end())
{
LL_INFOS() << "EEP: Found " << item->getName() << LL_ENDL;
mSeen.insert(item->getAssetUUID());
return true;
}
@ -334,19 +333,13 @@ void FloaterQuickPrefs::loadWaterPresets(const std::multimap<std::string, LLUUID
void FloaterQuickPrefs::loadPresets()
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items, libitems;
LLInventoryModel::item_array_t items;
FSSettingsCollector collector;
gInventory.collectDescendentsIf(gInventory.getRootFolderID(),
gInventory.collectDescendentsIf(LLUUID::null,
cats,
items,
LLInventoryModel::EXCLUDE_TRASH,
collector);
gInventory.collectDescendentsIf(gInventory.getLibraryRootFolderID(),
cats,
libitems,
LLInventoryModel::EXCLUDE_TRASH,
collector);
items.insert(items.end(), libitems.begin(), libitems.end());
std::multimap<std::string, LLUUID> sky_map;
std::multimap<std::string, LLUUID> water_map;
@ -474,7 +467,6 @@ BOOL FloaterQuickPrefs::postBuild()
mDayCyclePresetsCombo = getChild<LLComboBox>("DCPresetsCombo");
initCallbacks();
loadPresets();
if (gRlvHandler.isEnabled())
{
@ -819,8 +811,11 @@ void FloaterQuickPrefs::refreshSettings()
sky_spinner->setEnabled(TRUE);
sky_default_button->setEnabled(TRUE);
BOOL bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump") && gSavedSettings.getBOOL("RenderObjectBump");
BOOL shaders = gSavedSettings.getBOOL("WindLightUseAtmosShaders");
BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
gSavedSettings.getBOOL("RenderObjectBump") &&
bumpshiny &&
shaders &&
gGLManager.mHasFramebufferObject &&
gSavedSettings.getBOOL("RenderAvatarVP") &&
(mCtrlWindLight->get()) ? TRUE : FALSE;
@ -984,6 +979,7 @@ void FloaterQuickPrefs::enableWindlightButtons(BOOL enable)
childSetEnabled("edit_sky_preset", enable);
childSetEnabled("new_water_preset", enable);
childSetEnabled("edit_water_preset", enable);
childSetEnabled("PauseClouds", enable);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

View File

@ -99,7 +99,7 @@ with the same filename but different name
<texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="false" />
<texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="true" />
<texture name="Cam_FreeCam_Off" file_name="bottomtray/Cam_FreeCam_Off.png" preload="false" />
<texture name="Cam_Orbit_Off" file_name="bottomtray/Cam_Orbit_Off.png" preload="false" />
<texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" />
@ -114,8 +114,10 @@ with the same filename but different name
<texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" />
<texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" />
<texture name="Cam_Rotate_Center" file_name="bottomtray/Cam_Rotate_Center.png" preload="false" />
<texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" />
<texture name="Cam_Tracking_Out" file_name="bottomtray/Cam_Tracking_Out.png" preload="false" />
<texture name="Cam_Tracking_Center" file_name="bottomtray/Cam_Tracking_Center.png" preload="false" />
<!-- FS:Ansariel: FIRE-7758: 7758 -->
<texture name="Cam_Store_Pos" file_name="bottomtray/camera_store.png" preload="false" />
@ -216,6 +218,7 @@ with the same filename but different name
<texture name="Edit_Wrench" file_name="icons/Edit_Wrench.png" preload="false" />
<texture name="Presets_Icon" file_name="icons/Presets_Icon.png" preload="true" />
<texture name="Presets_Icon_Graphic" file_name="icons/Presets_Icon_Graphic.png" preload="true" />
<texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />
<texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
@ -266,6 +269,7 @@ with the same filename but different name
<texture name="Icon_Gear_Background" file_name="windows/Icon_Gear_Background.png" preload="false" />
<texture name="Icon_Gear_Foreground" file_name="windows/Icon_Gear_Foreground.png" preload="false" />
<texture name="Icon_Gear_Press" file_name="windows/Icon_Gear_Press.png" preload="false" />
<texture name="Icon_Gear" file_name="windows/Icon_Gear.png" preload="false" />
<texture name="Icon_Help_Foreground" file_name="windows/Icon_Help_Foreground.png" preload="true" />
<texture name="Icon_Help_Press" file_name="windows/Icon_Help_Press.png" preload="true" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -12,21 +12,18 @@
<floater.string name="free_mode_title">
Objekt ansehen
</floater.string>
<panel name="zoom">
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
</layout_panel>
<layout_panel name="panel_track">
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
</layout_panel>
</layout_stack>
</panel>
<panel name="buttons_view">
<string name="inactive_combo_text">
Voreinstellung...
</string>
<panel name="controls">
<panel name="zoom">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
</panel>
</panel>
<panel name="buttons_panel">
<panel_camera_item name="front_view" tool_tip="Frontalansicht">
<panel_camera_item.text name="front_view_text">
</panel_camera_item.text>
@ -39,8 +36,6 @@
<panel_camera_item.text name="rear_view_text">
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="buttons">
<panel_camera_item name="object_view" tool_tip="Objekt-Ansicht">
<panel_camera_item.text name="object_view_text">
</panel_camera_item.text>
@ -54,4 +49,9 @@
</panel_camera_item.text>
</panel_camera_item>
</panel>
<combo_box name="preset_combo">
<combo_box.item label="Voreinstellung verwenden" name="Use preset"/>
</combo_box>
<button name="gear_btn" tool_tip="Kamera-Voreinstellungen"/>
<button label="Kamera-Position..." name="camera_position_btn"/>
</floater>

View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater title="Kamera-Voreinstellungen" name="floater_camera_presets">
</floater>

View File

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="HoverHeight" title="Schwebehöhe festlegen">
<slider label="Höhe" name="HoverHeightSlider"/>
<check_box name="BindCameraCheck" label="Kameraansicht beeinflussen"/>
</floater>

View File

@ -25,6 +25,7 @@
</text>
<button name="btn_personal_lighting" label="Persönliche Beleuchtung..."/>
<button name="ResetToRegionDefault" tool_tip="Setzt die Umgebungseinstellungen auf die gemeinsame Umgebung zurück."/>
<button name="PauseClouds" label="Wolken pausieren" tool_tip="Pausiert die Wolken-Animation."/>
</panel>
<panel name="P_Q_Windlights">

View File

@ -12,6 +12,9 @@
<floater.string name="free_mode_title">
Objekt ansehen
</floater.string>
<string name="inactive_combo_text">
Voreinstellung...
</string>
<tab_container name="tabs">
<panel name="P_Cam_Controls_1" label="Steuerung 1">
@ -45,6 +48,11 @@
Mouselook
</panel_camera_item.text>
</panel_camera_item>
<combo_box name="preset_combo">
<combo_box.item label="Voreinstellung verwenden" name="Use preset"/>
</combo_box>
<button name="gear_btn" tool_tip="Kamera-Voreinstellungen"/>
<button label="Position..." name="camera_position_btn"/>
</panel>
<panel name="zoom">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="floaterpreferencesviewadvanced" title="Kamera-Position">
<text name="camera_offset_lbl">
Kamera-Offset:
</text>
<text name="focus_offset_lbl">
Fokus-Offset:
</text>
<text name="offset_scale_lbl">
Kamera-Offset-Skalierung:
</text>
<button label="Speichern als Voreinstellung..." name="save_preset_btn" width="180"/>
<button label="Schließen" name="close_btn" width="70"/>
</floater>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<floater name="save_camera_preset" title="Kameravoreinstellung speichern">
<string name="btn_label_save">Speichern</string>
<string name="btn_label_replace">Ersetzen</string>
<radio_group name="radio_save_preset">
<radio_item label="Als neue Voreinstellung speichern" name="new_preset"/>
<radio_item label="Voreinstellung ersetzen" name="replace_preset"/>
</radio_group>
<button label="Speichern" name="save"/>
<button label="Abbrechen" name="cancel"/>
</floater>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<floater name="Save Pref Preset" title="Voreinstellung speichern">
<floater name="save_pref_preset" title="Grafikvoreinstellung speichern">
<string name="title_graphic">
Grafikvoreinstellung speichern
</string>

View File

@ -3515,6 +3515,11 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
<notification name="DefaultPresetNotSaved">
Die Standard-Voreinstellung kann nicht überschrieben werden.
</notification>
<notification name="PresetAlreadyExists">
„[NAME]“ wird bereits verwendet. Sie können diese
Voreinstellung überschreiben oder einen anderen Namen wählen
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="PresetNotDeleted">
Fehler beim Löschen der Voreinstellung [NAME].
</notification>
@ -3523,7 +3528,7 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
</notification>
<notification name="ObjectMediaFailure">
Serverfehler: Medienaktualisierung oder Fehler
&apos;[ERROR]&apos;
„[ERROR]“
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="TextChatIsMutedByModerator">

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="camera_preset_item">
<text name="preset_name" value="Standard"/>
<button name="delete_btn" tool_tip="Voreinstellung löschen"/>
<button name="reset_btn" tool_tip="Voreinstellung auf Standardwerte zurücksetzen"/>
</panel>

View File

@ -3,12 +3,12 @@
<layout_stack name="navigation_favorites_bar_visibility_stack">
<layout_panel name="navigation_bar_visibility_panel">
<layout_stack name="location_search_layout">
<layout_panel name="navigation_buttons_visibility_panel" right="223">
<layout_panel name="navigation_buttons_visibility_panel" right="253">
<pull_button name="back_btn" tool_tip="Zum vorherigen Standort zurückgehen"/>
<pull_button name="forward_btn" tool_tip="Einen Standort weiter gehen"/>
<button name="home_btn" tool_tip="Zu meinem Zuhause teleportieren"/>
<button name="About_Land" label="Land" tool_tip="Landinformationen anzeigen"/>
<button name="Sky" label="Himmel" tool_tip="Öffnet das Fenster mit den Himmel-Voreinstellungen" width="60"/>
<button name="PersonalLighting" label="Beleuchtung" tool_tip="Öffnet das Fenster mit den persönlichen Beleuchtungseinstellungen" width="90"/>
</layout_panel>
<layout_panel name="location_bar_visibility_panel">
<location_input label="Standort" name="location_combo"/>

View File

@ -193,6 +193,7 @@
</text>
<slider label="Aktiv:" name="active"/>
<slider label="Inaktiv:" name="inactive"/>
<slider label="Kamera / Bewegung:" name="camera_movement"/>
<text name="console_opacity">
Konsolen-Deckkraft:
</text>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="presets_camera_pulldown">
<text name="Camera Presets">
Kameravoreinstellungen
</text>
<button label="Kamera-Fenster öffnen" name="open_prefs_btn" tool_tip="Zeigt das Kamera-Fenster an"/>
</panel>

View File

@ -15,18 +15,18 @@
<panel.string name="buycurrencylabel">
[AMT] L$
</panel.string>
<panel name="menu_search_panel" left="-440">
<panel name="menu_search_panel" left="-463">
<search_editor label="Menü durchs." name="search_menu_edit" tool_tip="Geben Sie hier den gewünschten Suchbegriff ein. Die Ergebnisse werden für teilweise Volltext-Treffer innerhalb des Menüs angezeigt."/>
</panel>
<panel name="parcel_info_panel">
<button name="buy_land_btn" tool_tip="Diese Parzelle steht zum Verkauf."/>
<text name="parcel_info_text" value="(laden)" tool_tip="Name der Parzelle, auf der du dich befindest. Klicken öffnet die Land-Informationen."/>
</panel>
<panel name="balance_bg" left="-308">
<panel name="balance_bg" left="-331">
<text name="balance" tool_tip="Klicken, um L$-Guthaben zu aktualisieren" value="?? L$"/>
<button label="L$-Kauf" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
</panel>
<panel name="time_and_media_bg" width="206">
<panel name="time_and_media_bg" width="229">
<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)" width="78">
24:00:00 PST
</text>

View File

@ -1,35 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- header_height="0"-->
<floater
legacy_header_height="0"
header_height="0"
bg_alpha_image_overlay="LtGray_50"
can_dock="false"
bg_opaque_image="Window_NoTitle_Foreground"
bg_alpha_image="Window_NoTitle_Foreground"
positioning="specified"
right="-460"
bottom="-50"
follows="left|bottom"
legacy_header_height="0"
can_minimize="false"
can_resize="true"
can_close="false"
chrome="true"
follows="bottom"
height="77"
min_height="77"
height="85"
layout="topleft"
name="camera_floater"
help_topic="camera_floater"
save_rect="true"
save_visibility="true"
save_dock_state="false"
show_title="false"
single_instance="true"
width="155"
min_width="155">
<!-- presence of the string "use_flat_ui" allows a cam floater without mode switches -->
<floater.string
name="use_flat_ui">
</floater.string>
<!-- "flat_ui_title" is the title of the cam floater if without mode switches -->
<floater.string
name="flat_ui_title">
</floater.string>
title="Camera Controls"
chrome="true"
save_rect="true"
width="340">
<floater.string
name="rotate_tooltip">
Rotate Camera Around Focus
@ -42,381 +33,245 @@
name="move_tooltip">
Move Camera Up and Down, Left and Right
</floater.string>
<floater.string
name="camera_modes_title">
camera_modes_title
</floater.string>
<floater.string
name="pan_mode_title">
pan_mode_title
</floater.string>
<floater.string
name="presets_mode_title">
presets_mode_title
</floater.string>
<floater.string
name="free_mode_title">
free_mode_title
View Object
</floater.string>
<string name="inactive_combo_text">Use preset</string>
<panel
border="false"
class="camera_zoom_panel"
height="50"
layout="topleft"
left="2"
mouse_opaque="false"
name="zoom"
follows="all"
top="25"
width="150">
<layout_stack
top="0"
enabled="true"
height="50"
left="0"
mouse_opaque="true"
name="camera_view_layout_stack"
orientation="horizontal"
width="150"
follows="all">
<layout_panel
name="camera_rotate_layout_panel"
user_resize="false"
height="80"
width="80">
<joystick_rotate
follows="all"
height="80"
width="80"
image_selected="Cam_Rotate_In"
image_unselected="Cam_Rotate_Out"
layout="topleft"
left="0"
mouse_opaque="false"
name="cam_rotate_stick"
quadrant="left"
scale_image="true"
sound_flags="3"
visible="true"
tool_tip="Orbit camera around focus"
held_down_delay.seconds="0.0"
top="0" />
</layout_panel>
<layout_panel
name="camera_zoom_layout_panel"
auto_resize="false"
user_resize="false"
height="70"
width="16">
<button
border="false"
follows="top|left"
height="123"
layout="topleft"
left="2"
top_pad="-23"
mouse_opaque="false"
name="controls"
width="190">
<!--TODO: replace + - images -->
<panel
border="false"
class="camera_zoom_panel"
bottom="-1"
layout="topleft"
left="0"
mouse_opaque="false"
name="zoom"
top="0"
width="220">
<joystick_rotate
follows="top|left"
height="78"
layout="topleft"
left="2"
name="cam_rotate_stick"
quadrant="left"
sound_flags="3"
visible="true"
tool_tip="Orbit camera around focus"
top="25"
width="78" />
<button
follows="top|left"
height="18"
image_disabled="AddItem_Disabled"
image_selected="AddItem_Press"
image_unselected="AddItem_Off"
layout="topleft"
left_pad="4"
name="zoom_plus_btn"
width="18"
top="23">
<commit_callback
function="Zoom.plus" />
<mouse_held_callback
function="Zoom.plus" />
</button>
<slider_bar
height="50"
layout="topleft"
name="zoom_slider"
orientation="vertical"
tool_tip="Zoom camera toward focus"
top_pad="0"
min_val="0"
max_val="1"
width="18">
<commit_callback function="Slider.value_changed"/>
</slider_bar>
<button
follows="top|left"
height="18"
image_disabled="MinusItem_Disabled"
image_selected="MinusItem_Press"
image_unselected="MinusItem_Off"
layout="topleft"
name="zoom_minus_btn"
top_pad="0"
width="18">
<commit_callback
function="Zoom.minus" />
<mouse_held_callback
function="Zoom.minus" />
</button>
<joystick_track
follows="top|left"
height="16"
image_disabled="AddItem_Disabled"
image_selected="AddItem_Press"
image_unselected="AddItem_Off"
height="78"
image_selected="Cam_Tracking_In"
image_unselected="Cam_Tracking_Out"
layout="topleft"
left_delta="-2"
name="zoom_plus_btn"
left_pad="4"
name="cam_track_stick"
quadrant="left"
scale_image="false"
width="16"
top="0">
<commit_callback
function="Zoom.plus" />
<mouse_held_callback
function="Zoom.plus" />
</button>
<slider_bar
height="48"
layout="topleft"
name="zoom_slider"
orientation="vertical"
follows="top|left|bottom"
tool_tip="Zoom camera toward focus"
top_delta="13"
left_delta="1"
min_val="0"
max_val="1"
width="16">
<commit_callback function="Slider.value_changed"/>
</slider_bar>
<button
follows="bottom|left"
height="16"
image_disabled="MinusItem_Disabled"
image_selected="MinusItem_Press"
image_unselected="MinusItem_Off"
layout="topleft"
name="zoom_minus_btn"
scale_image="true"
top_delta="44"
left_delta="0"
width="16">
<commit_callback
function="Zoom.minus" />
<mouse_held_callback
function="Zoom.minus" />
</button>
</layout_panel>
<layout_panel
name="panel_track"
user_resize="false"
height="80"
width="80">
<joystick_track
follows="all"
height="80"
width="80"
image_selected="Cam_Tracking_In"
image_unselected="Cam_Tracking_Out"
layout="topleft"
left_delta="0"
name="cam_track_stick"
quadrant="left"
scale_image="true"
sound_flags="3"
tool_tip="Move camera up and down, left and right"
top="0"/>
</layout_panel>
</layout_stack>
sound_flags="3"
tool_tip="Move camera up and down, left and right"
top="25"
width="78"/>
</panel>
</panel>
<panel
border="false"
height="22"
layout="topleft"
left="5"
top="0"
follows="top|left"
name="buttons_view"
width="56">
<panel_camera_item
name="front_view"
tool_tip="Front view"
width="18"
height="18"
layout="topleft"
left="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="front_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Front_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Front_On" />
<panel_camera_item.text
width="0"
name="front_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="group_view"
tool_tip="Side view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="group_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Side_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Side_On" />
<panel_camera_item.text
width="0"
name="group_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="rear_view"
tool_tip="Rear view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="rear_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Back_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Back_On" />
<panel_camera_item.text
width="0"
name="rear_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel
border="false"
height="22"
follows="all"
height="27"
layout="topleft"
follows="top|left"
left_pad="4"
top="0"
name="buttons"
width="58">
<panel_camera_item
name="object_view"
tool_tip="Object view"
width="18"
height="18"
layout="topleft"
left_delta="0"
top_pad="4">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="object_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Object_View_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Object_View_On" />
<panel_camera_item.text
width="0"
name="object_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="mouselook_view"
tool_tip="Mouselook view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="mouselook_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="MouseLook_View_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="MouseLook_View_On" />
<panel_camera_item.text
width="0"
name="mouselook_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="reset_view"
tool_tip="Reset view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="reset_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="StopReload_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="StopReload_Over" />
<panel_camera_item.text
width="0"
name="reset_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
left_pad="2"
name="buttons_panel"
top_delta="18"
width="120">
<panel_camera_item
name="front_view"
tool_tip="Front View"
width="18">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="Front View" />
<panel_camera_item.picture
image_name="Cam_Preset_Front_Off" />
<panel_camera_item.selected_picture
image_name="Cam_Preset_Front_On" />
</panel_camera_item>
<panel_camera_item
name="group_view"
tool_tip="Side View"
width="18"
left_pad="2">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="Side View" />
<panel_camera_item.picture
image_name="Cam_Preset_Side_Off" />
<panel_camera_item.selected_picture
image_name="Cam_Preset_Side_On" />
</panel_camera_item>
<panel_camera_item
name="rear_view"
tool_tip="Rear View"
width="18"
left_pad="2">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
tool_tip="Rear View"
parameter="Rear View" />
<panel_camera_item.picture
image_name="Cam_Preset_Back_Off" />
<panel_camera_item.selected_picture
image_name="Cam_Preset_Back_On" />
</panel_camera_item>
<panel_camera_item
name="object_view"
tool_tip="Object View"
width="18"
left_pad="2">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="object_view" />
<panel_camera_item.picture
image_name="Object_View_Off" />
<panel_camera_item.selected_picture
image_name="Object_View_On" />
</panel_camera_item>
<panel_camera_item
name="mouselook_view"
tool_tip="Mouselook View"
width="18"
left_pad="2">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="mouselook_view" />
<panel_camera_item.picture
image_name="MouseLook_View_Off" />
<panel_camera_item.selected_picture
image_name="MouseLook_View_On" />
</panel_camera_item>
<panel_camera_item
name="reset_view"
tool_tip="Reset view"
width="18"
left_pad="2">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="reset_view" />
<panel_camera_item.picture
image_name="StopReload_Off" />
<panel_camera_item.selected_picture
image_name="StopReload_Over" />
</panel_camera_item>
</panel>
<combo_box
height="23"
left_delta="-1"
mouse_opaque="true"
name="preset_combo"
top_pad="7"
width="122">
<combo_list
mouse_wheel_opaque="true"/>
<combo_box.item
label="Use preset"
name="Use preset"
value="default" />
</combo_box>
<button
height="16"
width="16"
layout="topleft"
mouse_opaque="true"
name="gear_btn"
tool_tip="Camera Presets"
top_delta="3"
left_pad="3"
image_selected="Icon_Gear"
image_pressed="Icon_Gear"
image_unselected="Icon_Gear"
is_toggle="true">
<button.commit_callback
function="CameraPresets.ShowPresetsList"/>
</button>
<!--
<button
follows="top|left"
height="23"
label="Save as preset..."
layout="topleft"
left="0"
name="save_preset_btn"
top_pad="7"
width="143">
<button.commit_callback
function="CameraPresets.Save"/>
</button>
-->
<button
follows="top|left"
height="23"
label="Camera Position..."
layout="topleft"
left_delta="-125"
name="camera_position_btn"
top_pad="9"
width="143">
<button.commit_callback
function="Floater.Show"
parameter="prefs_view_advanced"/>
</button>
</floater>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
can_resize="true"
height="200"
min_height="150"
title="Camera Presets"
layout="topleft"
name="floater_camera_presets"
single_instance="true"
min_width="185"
width="250">
<flat_list_view
allow_select="true"
follows="all"
height="165"
layout="topleft"
left="3"
multi_select="false"
name="preset_list"
top="20"
width="245" />
</floater>

View File

@ -4,7 +4,7 @@
height="130"
help_topic="floater_delete_preset"
layout="topleft"
name="Delete Pref Preset"
name="delete_pref_preset"
save_rect="true"
title="Delete Pref Preset"
width="300">

Some files were not shown because too many files have changed in this diff Show More