diff options
Diffstat (limited to 'indra/newview')
58 files changed, 661 insertions, 470 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b0b683aef9..4bbd48facf 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8067,6 +8067,18 @@      <integer>128</integer>    </map> +  <key>OctreeMinimumNodeSize</key> +  <map> +    <key>Comment</key> +    <string>Minimum size of any octree node</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>F32</string> +    <key>Value</key> +    <real>0.01</real> +  </map> +    <key>OctreeStaticObjectSizeFactor</key>    <map>      <key>Comment</key> @@ -15109,6 +15121,17 @@      <key>Value</key>      <integer>7000</integer>    </map> +  <key>DisablePrecacheDelayAfterTeleporting</key> +  <map> +    <key>Comment</key> +    <string>Disables the artificial delay in the viewer that precaches some incoming assets</string> +    <key>Persist</key> +    <integer>0</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>    <key>VersionChannelName</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index eb9ca542a3..04f3ff9ee5 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -850,12 +850,9 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal  //-----------------------------------------------------------------------------  void LLAgent::setRegion(LLViewerRegion *regionp)  { -	bool notifyRegionChange; -  	llassert(regionp);  	if (mRegionp != regionp)  	{ -		notifyRegionChange = true;  		std::string ip = regionp->getHost().getString();  		LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName() @@ -908,10 +905,7 @@ void LLAgent::setRegion(LLViewerRegion *regionp)  		// Pass new region along to metrics components that care about this level of detail.  		LLAppViewer::metricsUpdateRegion(regionp->getHandle());  	} -	else -	{ -		notifyRegionChange = false; -	} +  	mRegionp = regionp;  	// TODO - most of what follows probably should be moved into callbacks @@ -947,11 +941,8 @@ void LLAgent::setRegion(LLViewerRegion *regionp)  		mRegionp->setCapabilitiesReceivedCallback(boost::bind(&LLAgent::handleServerBakeRegionTransition,this,_1));  	} -	if (notifyRegionChange) -	{ -		LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL; -		mRegionChangedSignal(); -	} +	LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL; +	mRegionChangedSignal();  } @@ -1466,6 +1457,7 @@ void LLAgent::setDoNotDisturb(bool pIsDoNotDisturb)  	{  		LLDoNotDisturbNotificationStorage::getInstance()->updateNotifications();  	} +	gIMMgr->updateDNDMessageStatus();  }  //----------------------------------------------------------------------------- diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f98ec69732..1c38adb879 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3185,7 +3185,8 @@ bool LLAppViewer::initWindow()  #ifdef LL_DARWIN      //Satisfy both MAINT-3135 (OSX 10.6 and earlier) MAINT-3288 (OSX 10.7 and later)     if (getOSInfo().mMajorVer == 10 && getOSInfo().mMinorVer < 7) -       gViewerWindow->getWindow()->setOldResize(true); +		if ( getOSInfo().mMinorVer == 6 && getOSInfo().mBuild < 8 ) +       		gViewerWindow->getWindow()->setOldResize(true);  #endif  	if (gSavedSettings.getBOOL("WindowMaximized")) diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h index df907567ab..380fdccfa3 100755 --- a/indra/newview/llcolorswatch.h +++ b/indra/newview/llcolorswatch.h @@ -56,6 +56,7 @@ public:  		Optional<LLUIImage*>			alpha_background_image;  		Optional<commit_callback_t> 	cancel_callback;  		Optional<commit_callback_t> 	select_callback; +		Optional<commit_callback_t>		preview_callback;  		Optional<LLUIColor>				border_color;  		Optional<S32>					label_width;  		Optional<S32>					label_height; @@ -84,6 +85,7 @@ public:  	void			setCanApplyImmediately(BOOL apply) { mCanApplyImmediately = apply; }  	void			setOnCancelCallback(commit_callback_t cb) { mOnCancelCallback = cb; }  	void			setOnSelectCallback(commit_callback_t cb) { mOnSelectCallback = cb; } +	void			setPreviewCallback(commit_callback_t cb) { mPreviewCallback = cb; }  	void			setFallbackImage(LLPointer<LLUIImage> image) { mFallbackImage = image; }  	void			showPicker(BOOL take_focus); @@ -109,6 +111,7 @@ protected:  	bool					mCanApplyImmediately;  	commit_callback_t		mOnCancelCallback,  							mOnSelectCallback; +	commit_callback_t mPreviewCallback;  	S32						mLabelWidth,  							mLabelHeight; diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 211a96b32d..67d1642639 100755 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -155,7 +155,7 @@ void LLStandardBumpmap::addstandard()  			LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id));	  		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLGLTexture::LOCAL) ;  		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL ); -		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0) ; +		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0, 30.f) ;  		LLStandardBumpmap::sStandardBumpmapCount++;  	} diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index c1e6673406..483c46ee8a 100755 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -795,7 +795,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()  {  	bool ret_val = visibleItemsSelected(); -	if ( ret_val && mOkButtonValidateSignal.num_slots() ) +	if ( ret_val )  	{  		std::string acvtive_panel_name;  		LLScrollListCtrl* list =  NULL; @@ -826,7 +826,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()  			getSelectedAvatarData(list, avatar_ids, avatar_names);  			if (avatar_ids.size() >= 1)   			{ -				ret_val = mOkButtonValidateSignal(avatar_ids); +				ret_val = mOkButtonValidateSignal.num_slots()?mOkButtonValidateSignal(avatar_ids):true;  			}  			else  			{ diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index 9425f5645e..0c59ba9a6d 100755 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -342,6 +342,11 @@ void LLFloaterColorPicker::setCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn )  	curG = curGIn;  	curB = curBIn; +	if (mApplyImmediateCheck->get()) +	{ +		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); +	} +  	// update corresponding HSL values and  	LLColor3(curRIn, curGIn, curBIn).calcHSL(&curH, &curS, &curL); @@ -369,6 +374,11 @@ void LLFloaterColorPicker::setCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn )  	// update corresponding RGB values and  	hslToRgb ( curH, curS, curL, curR, curG, curB ); + +	if (mApplyImmediateCheck->get()) +	{ +		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); +	}  }  ////////////////////////////////////////////////////////////////////////////// @@ -458,10 +468,6 @@ void LLFloaterColorPicker::onImmediateCheck( LLUICtrl* ctrl, void* data)  void LLFloaterColorPicker::onColorSelect( const LLTextureEntry& te )  {  	setCurRgb(te.getColor().mV[VRED], te.getColor().mV[VGREEN], te.getColor().mV[VBLUE]); -	if (mApplyImmediateCheck->get()) -	{ -		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); -	}  }  void LLFloaterColorPicker::onMouseCaptureLost() diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 035eb307c2..f267a2e7b3 100755 --- a/indra/newview/llfloaterhardwaresettings.cpp +++ b/indra/newview/llfloaterhardwaresettings.cpp @@ -87,6 +87,16 @@ void LLFloaterHardwareSettings::refresh()  	refreshEnabledState();  } +void LLFloaterHardwareSettings::onSetVRAM() +{ +	S32 vram = childGetValue("GraphicsCardTextureMemory").asInteger(); + +	//give the texture system plenty of leeway to avoid swapping +	vram /= 3; + +	gSavedSettings.setS32("TextureMemory", vram); +} +  void LLFloaterHardwareSettings::refreshEnabledState()  {  	F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple"); @@ -95,6 +105,11 @@ void LLFloaterHardwareSettings::refreshEnabledState()  	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem.value());  	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem.value()); +	S32 vram = gSavedSettings.getS32("TextureMemory"); +	vram = vram*3; + +	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setValue(vram); +	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setCommitCallback(boost::bind(&LLFloaterHardwareSettings::onSetVRAM, this));  	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||  		!gGLManager.mHasVertexBufferObject)  	{ diff --git a/indra/newview/llfloaterhardwaresettings.h b/indra/newview/llfloaterhardwaresettings.h index 626771b1d2..63d86d5667 100755 --- a/indra/newview/llfloaterhardwaresettings.h +++ b/indra/newview/llfloaterhardwaresettings.h @@ -64,6 +64,8 @@ public:  	/// don't apply the changed values  	void cancel(); +	void onSetVRAM(); +  	/// refresh the enabled values  	void refreshEnabledState(); diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index afbd7ba5e2..bd5d2207b4 100755 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -1069,9 +1069,9 @@ void LLFloaterTools::setGridMode(S32 mode)  void LLFloaterTools::onClickGridOptions()  { -	LLFloaterReg::showInstance("build_options"); -	// RN: this makes grid options dependent on build tools window -	//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE); +	LLFloater* floaterp = LLFloaterReg::showInstance("build_options"); +	// position floater next to build tools, not over +	floaterp->setRect(gFloaterView->findNeighboringPosition(this, floaterp));  }  // static diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index a3a78b5d8b..b8ea022810 100755 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -70,8 +70,7 @@ LLFloaterWebContent::LLFloaterWebContent( const Params& params )  	mShowPageTitle(params.show_page_title),      mAllowNavigation(true),      mCurrentURL(""), -    mDisplayURL(""), -    mSecureURL(false) +    mDisplayURL("")  {  	mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));  	mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this )); @@ -315,9 +314,6 @@ void LLFloaterWebContent::draw()  	mBtnBack->setEnabled( mWebBrowser->canNavigateBack() && mAllowNavigation);  	mBtnForward->setEnabled( mWebBrowser->canNavigateForward() && mAllowNavigation); -    // Show/hide the lock icon -    mSecureLockIcon->setVisible(mSecureURL && !mAddressCombo->hasFocus()); -  	LLFloater::draw();  } @@ -362,8 +358,6 @@ void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent  		// we populate the status bar with URLs as they change so clear it now we're done  		const std::string end_str = "";  		mStatusBarText->setText( end_str ); -			mAddressCombo->setLeftTextPadding(22); -			mAddressCombo->setLeftTextPadding(2);  	}  	else if(event == MEDIA_EVENT_CLOSE_REQUEST)  	{ @@ -430,10 +424,10 @@ void LLFloaterWebContent::set_current_url(const std::string& url)  		static const std::string secure_prefix = std::string("https://");  		std::string prefix = mCurrentURL.substr(0, secure_prefix.length());  		LLStringUtil::toLower(prefix); -        mSecureURL = (prefix == secure_prefix); -         -        // Hack : we move the text a bit to make space for the lock icon in the secure URL case -		mDisplayURL = (mSecureURL ? "      " + mCurrentURL : mCurrentURL); +        bool secure_url = (prefix == secure_prefix); +		mSecureLockIcon->setVisible(secure_url); +		mAddressCombo->setLeftTextPadding(secure_url ? 22 : 2); +		mDisplayURL = mCurrentURL;          // Clean up browsing list (prevent dupes) and add/select the new URL to it          mAddressCombo->remove(mCurrentURL); diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index ad56eec859..d4fa42b745 100755 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -112,7 +112,6 @@ protected:  	std::string		mUUID;  	bool			mShowPageTitle;      bool            mAllowNavigation; -    bool            mSecureURL;     // true when the current url is prefixed "https://"  };  #endif  // LL_LLFLOATERWEBCONTENT_H diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index af93778c10..c61688a74b 100755 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -410,6 +410,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	mOtherParticipantIsAvatar(true),  	mStartCallOnInitialize(false),  	mStartedAsIMCall(voice), +	mIsDNDsend(false),  	mAvatarNameCacheConnection()  {  	// set P2P type by default @@ -3307,6 +3308,38 @@ bool LLIMMgr::isVoiceCall(const LLUUID& session_id)  	return im_session->mStartedAsIMCall;  } +void LLIMMgr::updateDNDMessageStatus() +{ +	if (LLIMModel::getInstance()->mId2SessionMap.empty()) return; + +	std::map<LLUUID, LLIMModel::LLIMSession*>::const_iterator it = LLIMModel::getInstance()->mId2SessionMap.begin(); +	for (; it != LLIMModel::getInstance()->mId2SessionMap.end(); ++it) +	{ +		LLIMModel::LLIMSession* session = (*it).second; + +		if (session->isP2P()) +		{ +			setDNDMessageSent(session->mSessionID,false); +		} +	} +} + +bool LLIMMgr::isDNDMessageSend(const LLUUID& session_id) +{ +	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id); +	if (!im_session) return false; + +	return im_session->mIsDNDsend; +} + +void LLIMMgr::setDNDMessageSent(const LLUUID& session_id, bool is_send) +{ +	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id); +	if (!im_session) return; + +	im_session->mIsDNDsend = is_send; +} +  void LLIMMgr::addNotifiedNonFriendSessionID(const LLUUID& session_id)  {  	mNotifiedNonFriendSessions.insert(session_id); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 1426bada95..f92eff4845 100755 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -138,6 +138,8 @@ public:  		bool mHasOfflineMessage; +		bool mIsDNDsend; +  	private:  		void onAdHocNameCache(const LLAvatarName& av_name); @@ -441,6 +443,12 @@ public:  	bool isVoiceCall(const LLUUID& session_id); +	void updateDNDMessageStatus(); + +	bool isDNDMessageSend(const LLUUID& session_id); + +	void setDNDMessageSent(const LLUUID& session_id, bool is_send); +  	void addNotifiedNonFriendSessionID(const LLUUID& session_id);  	bool isNonFriendSessionNotified(const LLUUID& session_id); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index c538fb6c68..49fff61721 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4709,6 +4709,10 @@ public:  	virtual void changed(U32 mask)  	{  		mBridgep->refreshFolderViewItem(); +		if (mask & LLFriendObserver::ONLINE) +		{ +			mBridgep->checkSearchBySuffixChanges(); +		}  	}  protected:  	LLCallingCardBridge* mBridgep; @@ -4743,6 +4747,44 @@ void LLCallingCardBridge::refreshFolderViewItem()  	}  } +void LLCallingCardBridge::checkSearchBySuffixChanges() +{ +	if (!mDisplayName.empty()) +	{ +		// changes in mDisplayName are processed by rename function and here it will be always same +		// suffixes are also of fixed length, and we are processing change of one at a time, +		// so it should be safe to use length (note: mSearchableName is capitalized) +		S32 old_length = mSearchableName.length(); +		S32 new_length = mDisplayName.length() + getLabelSuffix().length(); +		if (old_length == new_length) +		{ +			return; +		} +		mSearchableName.assign(mDisplayName); +		mSearchableName.append(getLabelSuffix()); +		LLStringUtil::toUpper(mSearchableName); +		if (new_length<old_length) +		{ +			LLInventoryFilter* filter = getInventoryFilter(); +			if (filter && mPassedFilter && mSearchableName.find(filter->getFilterSubString()) == std::string::npos) +			{ +				// string no longer contains substring  +				// we either have to update all parents manually or restart filter. +				// dirtyFilter will not work here due to obsolete descendants' generations  +				getInventoryFilter()->setModified(LLFolderViewFilter::FILTER_MORE_RESTRICTIVE); +			} +		} +		else +		{ +			if (getInventoryFilter()) +			{ +				// mSearchableName became longer, we gained additional suffix and need to repeat filter check. +				dirtyFilter(); +			} +		} +	} +} +  // virtual  void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string action)  { diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index bc875e8f37..b29235260b 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -419,6 +419,7 @@ public:  							void* cargo_data,  							std::string& tooltip_msg);  	void refreshFolderViewItem(); +	void checkSearchBySuffixChanges();  protected:  	LLCallingCardObserver* mObserver;  }; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index e74e58015a..a4a85e2e8d 100755 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -547,6 +547,14 @@ void LLInventoryPanel::modelChanged(U32 mask)  							// Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.  							view_item->addToFolder(new_parent);  							addItemID(viewmodel_item->getUUID(), view_item); +							if (mInventory) +							{ +								const LLUUID trash_id = mInventory->findCategoryUUIDForType(LLFolderType::FT_TRASH); +								if (trash_id != model_item->getParentUUID() && (mask & LLInventoryObserver::INTERNAL) && new_parent->isOpen()) +								{ +									setSelection(item_id, FALSE); +								} +							}  						}  						else   						{ diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 8c531e476d..506366aba6 100755 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -66,9 +66,8 @@ const F32 SNAP_GUIDE_SCREEN_OFFSET = 0.05f;  const F32 SNAP_GUIDE_SCREEN_LENGTH = 0.7f;  const F32 SELECTED_MANIPULATOR_SCALE = 1.2f;  const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f; -const S32 NUM_MANIPULATORS = 14; -const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] =  +const LLManip::EManipPart MANIPULATOR_IDS[LLManipScale::NUM_MANIPULATORS] =   {  	LLManip::LL_CORNER_NNN,  	LLManip::LL_CORNER_NNP, @@ -143,18 +142,16 @@ inline void LLManipScale::conditionalHighlight( U32 part, const LLColor4* highli  	LLColor4 default_highlight( 1.f, 1.f, 1.f, 1.f );  	LLColor4 default_normal( 0.7f, 0.7f, 0.7f, 0.6f );  	LLColor4 invisible(0.f, 0.f, 0.f, 0.f); -	F32 manipulator_scale = 1.f;  	for (S32 i = 0; i < NUM_MANIPULATORS; i++)  	{  		if((U32)MANIPULATOR_IDS[i] == part)  		{ -			manipulator_scale = mManipulatorScales[i]; +			mScaledBoxHandleSize = mManipulatorScales[i] * mBoxHandleSize[i];  			break;  		}  	} -	mScaledBoxHandleSize = mBoxHandleSize * manipulator_scale;  	if (mManipPart != (S32)LL_NO_PART && mManipPart != (S32)part)  	{  		gGL.color4fv( invisible.mV ); @@ -181,7 +178,6 @@ void LLManipScale::handleSelect()  LLManipScale::LLManipScale( LLToolComposite* composite )  	:   	LLManip( std::string("Scale"), composite ), -	mBoxHandleSize( 1.f ),  	mScaledBoxHandleSize( 1.f ),  	mLastMouseX( -1 ),  	mLastMouseY( -1 ), @@ -190,21 +186,22 @@ LLManipScale::LLManipScale( LLToolComposite* composite )  	mScaleSnapUnit1(1.f),  	mScaleSnapUnit2(1.f),  	mSnapRegimeOffset(0.f), +	mTickPixelSpacing1(0.f), +	mTickPixelSpacing2(0.f),  	mSnapGuideLength(0.f),  	mInSnapRegime(FALSE), -	mScaleSnapValue(0.f) +	mScaleSnappedValue(0.f)  {  -	mManipulatorScales = new F32[NUM_MANIPULATORS];  	for (S32 i = 0; i < NUM_MANIPULATORS; i++)  	{  		mManipulatorScales[i] = 1.f; +		mBoxHandleSize[i]     = 1.f;  	}  }  LLManipScale::~LLManipScale()  {  	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer()); -	delete[] mManipulatorScales;  }  void LLManipScale::render() @@ -214,6 +211,7 @@ void LLManipScale::render()  	LLGLDepthTest gls_depth(GL_TRUE);  	LLGLEnable gl_blend(GL_BLEND);  	LLGLEnable gls_alpha_test(GL_ALPHA_TEST); +	LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();  	if( canAffectSelection() )  	{ @@ -235,42 +233,48 @@ void LLManipScale::render()  		if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)  		{ -			mBoxHandleSize = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); -			mBoxHandleSize /= gAgentCamera.mHUDCurZoom; +			for (S32 i = 0; i < NUM_MANIPULATORS; i++) +			{ +				mBoxHandleSize[i] = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); +				mBoxHandleSize[i] /= gAgentCamera.mHUDCurZoom; +			}  		}  		else  		{ -			F32 range_squared = dist_vec_squared(gAgentCamera.getCameraPositionAgent(), center_agent); -			F32 range_from_agent_squared = dist_vec_squared(gAgent.getPositionAgent(), center_agent); - -			// Don't draw manip if object too far away -			if (gSavedSettings.getBOOL("LimitSelectDistance")) +			for (S32 i = 0; i < NUM_MANIPULATORS; i++)  			{ -				F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance"); -				if (range_from_agent_squared > max_select_distance * max_select_distance) +				LLVector3 manipulator_pos = bbox.localToAgent(unitVectorToLocalBBoxExtent(partToUnitVector(MANIPULATOR_IDS[i]), bbox)); +				F32 range_squared = dist_vec_squared(gAgentCamera.getCameraPositionAgent(), manipulator_pos); +				F32 range_from_agent_squared = dist_vec_squared(gAgent.getPositionAgent(), manipulator_pos); + +				// Don't draw manip if object too far away +				if (gSavedSettings.getBOOL("LimitSelectDistance"))  				{ -					return; +					F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance"); +					if (range_from_agent_squared > max_select_distance * max_select_distance) +					{ +						return; +					}  				} -			} -			if (range_squared > 0.001f * 0.001f) -			{ -				// range != zero -				F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); -				F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView();  // radians -				mBoxHandleSize = (F32) sqrtf(range_squared) * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR; -			} -			else -			{ -				// range == zero -				mBoxHandleSize = BOX_HANDLE_BASE_FACTOR; +				if (range_squared > 0.001f * 0.001f) +				{ +					// range != zero +					F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); +					F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView();  // radians +					mBoxHandleSize[i] = (F32) sqrtf(range_squared) * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR; +				} +				else +				{ +					// range == zero +					mBoxHandleSize[i] = BOX_HANDLE_BASE_FACTOR; +				}  			}  		}  		////////////////////////////////////////////////////////////////////////  		// Draw bounding box -		LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();  		LLVector3 pos_agent = bbox.getPositionAgent();  		LLQuaternion rot = bbox.getRotation(); @@ -556,29 +560,29 @@ void LLManipScale::renderFaces( const LLBBox& bbox )  		return;  	} -    // This is a flattened representation of the box as render here -    //                                       . -    //              (+++)        (++-)      /|\t -    //                +------------+         | (texture coordinates) -    //                |            |         | -    //                |     1      |        (*) --->s -    //                |    +X      |    +	// This is a flattened representation of the box as render here +	//                                       . +	//              (+++)        (++-)      /|\t +	//                +------------+         | (texture coordinates) +	//                |            |         | +	//                |     1      |        (*) --->s +	//                |    +X      |    +	//                |            | +	// (+++)     (+-+)|            |(+--)     (++-)        (+++) +	//   +------------+------------+------------+------------+ +	//   |0          3|3          7|7          4|4          0| +	//   |     0      |     4      |     5      |     2	     | +	//   |    +Z      |    -Y      |    -Z      |    +Y      | +	//   |	          |            |            |            | +	//   |1          2|2          6|6          5|5          1| +	//   +------------+------------+------------+------------+ +	// (-++)     (--+)|            |(---)     (-+-)        (-++) +	//                |     3      | +	//                |    -X      | +	//                |            |  	//                |            | -    // (+++)     (+-+)|            |(+--)     (++-)        (+++) -    //   +------------+------------+------------+------------+ -    //   |0          3|3          7|7          4|4          0| -    //   |     0      |     4      |     5      |     2	     | -    //   |    +Z      |    -Y      |    -Z      |    +Y      | -    //   |	          |            |            |            | -    //   |1          2|2          6|6          5|5          1| -    //   +------------+------------+------------+------------+ -    // (-++)     (--+)|            |(---)     (-+-)        (-++) -    //                |     3      | -    //                |    -X      | -    //                |            | -    //                |            | -    //                +------------+ -    //              (-++)        (-+-) +	//                +------------+ +	//              (-++)        (-+-)  	LLColor4 highlight_color( 1.f, 1.f, 1.f, 0.5f);  	LLColor4 normal_color(	1.f, 1.f, 1.f, 0.3f); @@ -677,32 +681,32 @@ void LLManipScale::renderFaces( const LLBBox& bbox )  			{  			  case 0:  				conditionalHighlight( LL_FACE_POSZ, &z_highlight_color, &z_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_POSZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );  				break;  			  case 1:  				conditionalHighlight( LL_FACE_POSX, &x_highlight_color, &x_normal_color ); -				renderAxisHandle( ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_POSX, ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 2:  				conditionalHighlight( LL_FACE_POSY, &y_highlight_color, &y_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_POSY, ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 3:  				conditionalHighlight( LL_FACE_NEGX, &x_highlight_color, &x_normal_color ); -				renderAxisHandle( ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_NEGX, ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 4:  				conditionalHighlight( LL_FACE_NEGY, &y_highlight_color, &y_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_NEGY, ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 5:  				conditionalHighlight( LL_FACE_NEGZ, &z_highlight_color, &z_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_NEGZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );  				break;  			}  		} @@ -712,10 +716,10 @@ void LLManipScale::renderFaces( const LLBBox& bbox )  void LLManipScale::renderEdges( const LLBBox& bbox )  {  	LLVector3 extent = bbox.getExtentLocal(); -	F32 edge_width = mBoxHandleSize * .6f;  	for( U32 part = LL_EDGE_MIN; part <= LL_EDGE_MAX; part++ )  	{ +		F32 edge_width = mBoxHandleSize[part] * .6f;  		LLVector3 direction = edgeToUnitVector( part );  		LLVector3 center_to_edge = unitVectorToLocalBBoxExtent( direction, bbox ); @@ -776,14 +780,14 @@ void LLManipScale::renderBoxHandle( F32 x, F32 y, F32 z )  } -void LLManipScale::renderAxisHandle( const LLVector3& start, const LLVector3& end ) +void LLManipScale::renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end )  {  	if( getShowAxes() )  	{  		// Draws a single "jacks" style handle: a long, retangular box from start to end.  		LLVector3 offset_start = end - start;  		offset_start.normVec(); -		offset_start = start + mBoxHandleSize * offset_start; +		offset_start = start + mBoxHandleSize[part] * offset_start;  		LLVector3 delta = end - offset_start;  		LLVector3 pos = offset_start + 0.5f * delta; @@ -792,9 +796,9 @@ void LLManipScale::renderAxisHandle( const LLVector3& start, const LLVector3& en  		{  			gGL.translatef( pos.mV[VX], pos.mV[VY], pos.mV[VZ] );  			gGL.scalef(  -				mBoxHandleSize + llabs(delta.mV[VX]), -				mBoxHandleSize + llabs(delta.mV[VY]), -				mBoxHandleSize + llabs(delta.mV[VZ])); +				mBoxHandleSize[part] + llabs(delta.mV[VX]), +				mBoxHandleSize[part] + llabs(delta.mV[VY]), +				mBoxHandleSize[part] + llabs(delta.mV[VZ]));  			gBox.render();  		}  		gGL.popMatrix(); @@ -837,7 +841,7 @@ void LLManipScale::drag( S32 x, S32 y )  	}	  	LLSelectMgr::getInstance()->updateSelectionCenter(); -    gAgentCamera.clearFocusObject(); +	gAgentCamera.clearFocusObject();  }  // Scale around the  @@ -888,22 +892,20 @@ void LLManipScale::dragCorner( S32 x, S32 y )  	LLVector3 projected_drag_pos1 = inverse_projected_vec(mScaleDir, orthogonal_component(mouse_on_plane1, mSnapGuideDir1));  	LLVector3 projected_drag_pos2 = inverse_projected_vec(mScaleDir, orthogonal_component(mouse_on_plane2, mSnapGuideDir2)); -	LLVector3 mouse_offset_from_scale_line_1 = orthogonal_component(mouse_on_plane1, mScaleDir); -	LLVector3 mouse_offset_from_scale_line_2 = orthogonal_component(mouse_on_plane2, mScaleDir); -  	BOOL snap_enabled = gSavedSettings.getBOOL("SnapEnabled");  	if (snap_enabled && (mouse_on_plane1 - projected_drag_pos1) * mSnapGuideDir1 > mSnapRegimeOffset)  	{  		F32 drag_dist = projected_drag_pos1.length(); -		F32 cur_subdivisions = llclamp(getSubdivisionLevel(projected_drag_pos1, mScaleDir, mScaleSnapUnit1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); +		F32 cur_subdivisions = llclamp(getSubdivisionLevel(mScaleCenter + projected_drag_pos1, mScaleDir, mScaleSnapUnit1, mTickPixelSpacing1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);  		F32 snap_dist = mScaleSnapUnit1 / (2.f * cur_subdivisions);  		F32 relative_snap_dist = fmodf(drag_dist + snap_dist, mScaleSnapUnit1 / cur_subdivisions); -		mScaleSnapValue = llclamp((drag_dist - (relative_snap_dist - snap_dist)), min_scale, max_scale); - +		mScaleSnappedValue = llclamp((drag_dist - (relative_snap_dist - snap_dist)), min_scale, max_scale); +		scale_factor  =  mScaleSnappedValue / dist_vec(drag_start_point_agent, drag_start_center_agent); +		mScaleSnappedValue /= mScaleSnapUnit1 * 2.f;  		mInSnapRegime = TRUE; -		scale_factor = mScaleSnapValue / dist_vec(drag_start_point_agent, drag_start_center_agent); +  		if (!uniform)  		{  			scale_factor *= 0.5f; @@ -913,14 +915,15 @@ void LLManipScale::dragCorner( S32 x, S32 y )  	{  		F32 drag_dist = projected_drag_pos2.length(); -		F32 cur_subdivisions = llclamp(getSubdivisionLevel(projected_drag_pos2, mScaleDir, mScaleSnapUnit2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); +		F32 cur_subdivisions = llclamp(getSubdivisionLevel(mScaleCenter + projected_drag_pos2, mScaleDir, mScaleSnapUnit2, mTickPixelSpacing2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);  		F32 snap_dist = mScaleSnapUnit2 / (2.f * cur_subdivisions);  		F32 relative_snap_dist = fmodf(drag_dist + snap_dist, mScaleSnapUnit2 / cur_subdivisions); -		mScaleSnapValue = llclamp((drag_dist - (relative_snap_dist - snap_dist)), min_scale, max_scale); - +		mScaleSnappedValue = llclamp((drag_dist - (relative_snap_dist - snap_dist)), min_scale, max_scale); +		scale_factor = mScaleSnappedValue / dist_vec(drag_start_point_agent, drag_start_center_agent); +		mScaleSnappedValue /= mScaleSnapUnit2 * 2.f;  		mInSnapRegime = TRUE; -		scale_factor = mScaleSnapValue / dist_vec(drag_start_point_agent, drag_start_center_agent); +  		if (!uniform)  		{  			scale_factor *= 0.5f; @@ -1038,7 +1041,6 @@ void LLManipScale::dragCorner( S32 x, S32 y )  			rebuild(cur);  		}  	} -  } @@ -1108,16 +1110,16 @@ void LLManipScale::dragFace( S32 x, S32 y )  	{  		mInSnapRegime = TRUE; - 		if (dist_along_scale_line > max_drag_dist) +		if (dist_along_scale_line > max_drag_dist)  		{ -			mScaleSnapValue = max_drag_dist; +			mScaleSnappedValue = max_drag_dist;  			LLVector3 clamp_point = mScaleCenter + max_drag_dist * mScaleDir;  			drag_delta.setVec(clamp_point - drag_start_point_agent);  		}  		else if (dist_along_scale_line < min_drag_dist)  		{ -			mScaleSnapValue = min_drag_dist; +			mScaleSnappedValue = min_drag_dist;  			LLVector3 clamp_point = mScaleCenter + min_drag_dist * mScaleDir;  			drag_delta.setVec(clamp_point - drag_start_point_agent); @@ -1125,7 +1127,7 @@ void LLManipScale::dragFace( S32 x, S32 y )  		else  		{  			F32 drag_dist = scale_center_to_mouse * mScaleDir; -			F32 cur_subdivisions = llclamp(getSubdivisionLevel(mScaleCenter + mScaleDir * drag_dist, mScaleDir, mScaleSnapUnit1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); +			F32 cur_subdivisions = llclamp(getSubdivisionLevel(mScaleCenter + mScaleDir * drag_dist, mScaleDir, mScaleSnapUnit1, mTickPixelSpacing1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);  			F32 snap_dist = mScaleSnapUnit1 / (2.f * cur_subdivisions);  			F32 relative_snap_dist = fmodf(drag_dist + snap_dist, mScaleSnapUnit1 / cur_subdivisions);  			relative_snap_dist -= snap_dist; @@ -1139,7 +1141,7 @@ void LLManipScale::dragFace( S32 x, S32 y )  										 drag_dist - max_drag_dist,  										 drag_dist - min_drag_dist); -			mScaleSnapValue = drag_dist - relative_snap_dist; +			mScaleSnappedValue = drag_dist - relative_snap_dist;  			if (llabs(relative_snap_dist) < snap_dist)  			{ @@ -1343,8 +1345,10 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  	LLQuaternion grid_rotation;  	LLSelectMgr::getInstance()->getGrid(grid_origin, grid_rotation, grid_scale); +	bool uniform = getUniform(); +  	LLVector3 box_corner_agent = bbox.localToAgent(unitVectorToLocalBBoxExtent( partToUnitVector( mManipPart ), bbox )); -	mScaleCenter = getUniform() ? bbox.getCenterAgent() : bbox.localToAgent(unitVectorToLocalBBoxExtent( -1.f * partToUnitVector( mManipPart ), bbox )); +	mScaleCenter = uniform ? bbox.getCenterAgent() : bbox.localToAgent(unitVectorToLocalBBoxExtent( -1.f * partToUnitVector( mManipPart ), bbox ));  	mScaleDir = box_corner_agent - mScaleCenter;  	mScaleDir.normVec(); @@ -1355,7 +1359,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  	}  	else  	{ -		F32 object_distance = dist_vec(mScaleCenter, LLViewerCamera::getInstance()->getOrigin()); +		F32 object_distance = dist_vec(box_corner_agent, LLViewerCamera::getInstance()->getOrigin());  		mSnapRegimeOffset = (SNAP_GUIDE_SCREEN_OFFSET * gViewerWindow->getWorldViewWidthRaw() * object_distance) / LLViewerCamera::getInstance()->getPixelMeterRatio();  	}  	LLVector3 cam_at_axis; @@ -1379,14 +1383,13 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  	if( (LL_FACE_MIN <= (S32)mManipPart) && ((S32)mManipPart <= LL_FACE_MAX) )  	{ -		LLVector3 object_scale = bbox.getMaxLocal(); -		object_scale.scaleVec(off_axis_dir * ~bbox.getRotation()); -		object_scale.abs(); -		if (object_scale.mV[VX] > object_scale.mV[VY] && object_scale.mV[VX] > object_scale.mV[VZ]) +		LLVector3 bbox_relative_cam_dir = off_axis_dir * ~bbox.getRotation(); +		bbox_relative_cam_dir.abs(); +		if (bbox_relative_cam_dir.mV[VX] > bbox_relative_cam_dir.mV[VY] && bbox_relative_cam_dir.mV[VX] > bbox_relative_cam_dir.mV[VZ])  		{  			mSnapGuideDir1 = LLVector3::x_axis * bbox.getRotation();  		} -		else if (object_scale.mV[VY] > object_scale.mV[VZ]) +		else if (bbox_relative_cam_dir.mV[VY] > bbox_relative_cam_dir.mV[VZ])  		{  			mSnapGuideDir1 = LLVector3::y_axis * bbox.getRotation();  		} @@ -1405,7 +1408,6 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  	}  	else if( (LL_CORNER_MIN <= (S32)mManipPart) && ((S32)mManipPart <= LL_CORNER_MAX) )  	{ -		LLVector3 local_scale_dir = partToUnitVector( mManipPart );  		LLVector3 local_camera_dir;  		if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)  		{ @@ -1413,74 +1415,133 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  		}  		else  		{ -			local_camera_dir = (LLViewerCamera::getInstance()->getOrigin() - bbox.getCenterAgent()) * ~bbox.getRotation(); +			local_camera_dir = (LLViewerCamera::getInstance()->getOrigin() - box_corner_agent) * ~bbox.getRotation();  			local_camera_dir.normVec();  		} -		local_scale_dir -= projected_vec(local_scale_dir, local_camera_dir); -		local_scale_dir.normVec(); -		LLVector3 x_axis_proj_camera = LLVector3::x_axis - projected_vec(LLVector3::x_axis, local_camera_dir); -		x_axis_proj_camera.normVec(); -		LLVector3 y_axis_proj_camera = LLVector3::y_axis - projected_vec(LLVector3::y_axis, local_camera_dir); -		y_axis_proj_camera.normVec(); -		LLVector3 z_axis_proj_camera = LLVector3::z_axis - projected_vec(LLVector3::z_axis, local_camera_dir); -		z_axis_proj_camera.normVec(); -		F32 x_axis_proj = llabs(local_scale_dir * x_axis_proj_camera); -		F32 y_axis_proj = llabs(local_scale_dir * y_axis_proj_camera); -		F32 z_axis_proj = llabs(local_scale_dir * z_axis_proj_camera); - -		if (x_axis_proj > y_axis_proj && x_axis_proj > z_axis_proj) -		{ -			mSnapGuideDir1 = LLVector3::y_axis; -			mScaleSnapUnit2 = grid_scale.mV[VY]; -			mSnapGuideDir2 = LLVector3::z_axis; -			mScaleSnapUnit1 = grid_scale.mV[VZ]; -		} -		else if (y_axis_proj > z_axis_proj) -		{ -			mSnapGuideDir1 = LLVector3::x_axis; -			mScaleSnapUnit2 = grid_scale.mV[VX]; -			mSnapGuideDir2 = LLVector3::z_axis; -			mScaleSnapUnit1 = grid_scale.mV[VZ]; -		} -		else -		{ -			mSnapGuideDir1 = LLVector3::x_axis; -			mScaleSnapUnit2 = grid_scale.mV[VX]; -			mSnapGuideDir2 = LLVector3::y_axis; -			mScaleSnapUnit1 = grid_scale.mV[VY]; -		} -		LLVector3 snap_guide_flip(1.f, 1.f, 1.f); +		LLVector3 axis_flip;  		switch (mManipPart)  		{  		case LL_CORNER_NNN: +			axis_flip.setVec(1.f, 1.f, 1.f);  			break;  		case LL_CORNER_NNP: -			snap_guide_flip.setVec(1.f, 1.f, -1.f); +			axis_flip.setVec(1.f, 1.f, -1.f);  			break;  		case LL_CORNER_NPN: -			snap_guide_flip.setVec(1.f, -1.f, 1.f); +			axis_flip.setVec(1.f, -1.f, 1.f);  			break;  		case LL_CORNER_NPP: -			snap_guide_flip.setVec(1.f, -1.f, -1.f); +			axis_flip.setVec(1.f, -1.f, -1.f);  			break;  		case LL_CORNER_PNN: -			snap_guide_flip.setVec(-1.f, 1.f, 1.f); +			axis_flip.setVec(-1.f, 1.f, 1.f);  			break;  		case LL_CORNER_PNP: -			snap_guide_flip.setVec(-1.f, 1.f, -1.f); +			axis_flip.setVec(-1.f, 1.f, -1.f);  			break;  		case LL_CORNER_PPN: -			snap_guide_flip.setVec(-1.f, -1.f, 1.f); +			axis_flip.setVec(-1.f, -1.f, 1.f);  			break;  		case LL_CORNER_PPP: -			snap_guide_flip.setVec(-1.f, -1.f, -1.f); +			axis_flip.setVec(-1.f, -1.f, -1.f);  			break;  		default:  			break;  		} -		mSnapGuideDir1.scaleVec(snap_guide_flip); -		mSnapGuideDir2.scaleVec(snap_guide_flip); + +		// account for which side of the object the camera is located and negate appropriate axes +		local_camera_dir.scaleVec(axis_flip); + +		// normalize to object scale +		LLVector3 bbox_extent = bbox.getExtentLocal(); +		local_camera_dir.scaleVec(LLVector3(1.f / bbox_extent.mV[VX], 1.f / bbox_extent.mV[VY], 1.f / bbox_extent.mV[VZ])); + +		S32 scale_face = -1; + +		if ((local_camera_dir.mV[VX] > 0.f) == (local_camera_dir.mV[VY] > 0.f)) +		{ +			if ((local_camera_dir.mV[VZ] > 0.f) == (local_camera_dir.mV[VY] > 0.f)) +			{ +				LLVector3 local_camera_dir_abs = local_camera_dir; +				local_camera_dir_abs.abs(); +				// all neighboring faces of bbox are pointing towards camera or away from camera +				// use largest magnitude face for snap guides +				if (local_camera_dir_abs.mV[VX] > local_camera_dir_abs.mV[VY]) +				{ +					if (local_camera_dir_abs.mV[VX] > local_camera_dir_abs.mV[VZ]) +					{ +						scale_face = VX; +					} +					else +					{ +						scale_face = VZ; +					} +				} +				else // y > x +				{ +					if (local_camera_dir_abs.mV[VY] > local_camera_dir_abs.mV[VZ]) +					{ +						scale_face = VY; +					} +					else +					{ +						scale_face = VZ; +					} +				} +			} +			else +			{ +				// z axis facing opposite direction from x and y relative to camera, use x and y for snap guides +				scale_face = VZ; +			} +		} +		else // x and y axes are facing in opposite directions relative to camera +		{ +			if ((local_camera_dir.mV[VZ] > 0.f) == (local_camera_dir.mV[VY] > 0.f)) +			{ +				// x axis facing opposite direction from y and z relative to camera, use y and z for snap guides +				scale_face = VX; +			} +			else +			{ +				// y axis facing opposite direction from x and z relative to camera, use x and z for snap guides +				scale_face = VY; +			} +		} + +		switch(scale_face) +		{ +		case VX: +			// x axis face being scaled, use y and z for snap guides +			mSnapGuideDir1 = LLVector3::y_axis.scaledVec(axis_flip); +			mScaleSnapUnit1 = grid_scale.mV[VZ]; +			mSnapGuideDir2 = LLVector3::z_axis.scaledVec(axis_flip); +			mScaleSnapUnit2 = grid_scale.mV[VY];			 +			break; +		case VY: +			// y axis facing being scaled, use x and z for snap guides +			mSnapGuideDir1 = LLVector3::x_axis.scaledVec(axis_flip); +			mScaleSnapUnit1 = grid_scale.mV[VZ]; +			mSnapGuideDir2 = LLVector3::z_axis.scaledVec(axis_flip); +			mScaleSnapUnit2 = grid_scale.mV[VX]; +			break; +		case VZ: +			// z axis facing being scaled, use x and y for snap guides +			mSnapGuideDir1 = LLVector3::x_axis.scaledVec(axis_flip); +			mScaleSnapUnit1 = grid_scale.mV[VY]; +			mSnapGuideDir2 = LLVector3::y_axis.scaledVec(axis_flip); +			mScaleSnapUnit2 = grid_scale.mV[VX]; +			break; +		default: +			mSnapGuideDir1.zeroVec(); +			mScaleSnapUnit1 = 0.f; + +			mSnapGuideDir2.zeroVec(); +			mScaleSnapUnit2 = 0.f; +			break; +		} +  		mSnapGuideDir1.rotVec(bbox.getRotation());  		mSnapGuideDir2.rotVec(bbox.getRotation());  		mSnapDir1 = -1.f * mSnapGuideDir2; @@ -1495,6 +1556,15 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  	mScaleSnapUnit1 = mScaleSnapUnit1 / (mSnapDir1 * mScaleDir);  	mScaleSnapUnit2 = mScaleSnapUnit2 / (mSnapDir2 * mScaleDir); + +	mTickPixelSpacing1 = llround((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir1).length()); +	mTickPixelSpacing2 = llround((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir2).length()); + +	if (uniform) +	{ +		mScaleSnapUnit1 *= 0.5f; +		mScaleSnapUnit2 *= 0.5f; +	}  }  void LLManipScale::renderSnapGuides(const LLBBox& bbox) @@ -1518,9 +1588,9 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		LLColor4 tick_color = setupSnapGuideRenderPass(pass);  		gGL.begin(LLRender::LINES); -		LLVector3 line_mid = mScaleCenter + (mScaleSnapValue * mScaleDir) + (mSnapGuideDir1 * mSnapRegimeOffset); -		LLVector3 line_start = line_mid - (mScaleDir * (llmin(mScaleSnapValue, mSnapGuideLength * 0.5f))); -		LLVector3 line_end = line_mid + (mScaleDir * llmin(max_point_on_scale_line - mScaleSnapValue, mSnapGuideLength * 0.5f)); +		LLVector3 line_mid = mScaleCenter + (mScaleSnappedValue * mScaleDir) + (mSnapGuideDir1 * mSnapRegimeOffset); +		LLVector3 line_start = line_mid - (mScaleDir * (llmin(mScaleSnappedValue, mSnapGuideLength * 0.5f))); +		LLVector3 line_end = line_mid + (mScaleDir * llmin(max_point_on_scale_line - mScaleSnappedValue, mSnapGuideLength * 0.5f));  		gGL.color4f(tick_color.mV[VRED], tick_color.mV[VGREEN], tick_color.mV[VBLUE], tick_color.mV[VALPHA] * 0.1f);  		gGL.vertex3fv(line_start.mV); @@ -1530,9 +1600,9 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		gGL.color4f(tick_color.mV[VRED], tick_color.mV[VGREEN], tick_color.mV[VBLUE], tick_color.mV[VALPHA] * 0.1f);  		gGL.vertex3fv(line_end.mV); -		line_mid = mScaleCenter + (mScaleSnapValue * mScaleDir) + (mSnapGuideDir2 * mSnapRegimeOffset); -		line_start = line_mid - (mScaleDir * (llmin(mScaleSnapValue, mSnapGuideLength * 0.5f))); -		line_end = line_mid + (mScaleDir * llmin(max_point_on_scale_line - mScaleSnapValue, mSnapGuideLength * 0.5f)); +		line_mid = mScaleCenter + (mScaleSnappedValue * mScaleDir) + (mSnapGuideDir2 * mSnapRegimeOffset); +		line_start = line_mid - (mScaleDir * (llmin(mScaleSnappedValue, mSnapGuideLength * 0.5f))); +		line_end = line_mid + (mScaleDir * llmin(max_point_on_scale_line - mScaleSnappedValue, mSnapGuideLength * 0.5f));  		gGL.vertex3fv(line_start.mV);  		gGL.color4fv(tick_color.mV);  		gGL.vertex3fv(line_mid.mV); @@ -1547,6 +1617,8 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		F32 dist_grid_axis = (drag_point - mScaleCenter) * mScaleDir;  		// find distance to nearest smallest grid unit +		F32 grid_multiple1 = llfloor(llmax(0.f, dist_grid_axis) / (mScaleSnapUnit1 / max_subdivisions)); +		F32 grid_multiple2 = llfloor(llmax(0.f, dist_grid_axis) / (mScaleSnapUnit2 / max_subdivisions));  		F32 grid_offset1 = fmodf(dist_grid_axis, mScaleSnapUnit1 / max_subdivisions);  		F32 grid_offset2 = fmodf(dist_grid_axis, mScaleSnapUnit2 / max_subdivisions); @@ -1569,7 +1641,8 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		{  			// draw snap guide line  			gGL.begin(LLRender::LINES); -			LLVector3 snap_line_center = mScaleCenter + (mScaleSnapValue * mScaleDir); +			//LLVector3 snap_line_center = mScaleCenter + (mScaleSnappedValue * mScaleDir); +			LLVector3 snap_line_center = bbox.localToAgent(unitVectorToLocalBBoxExtent( partToUnitVector( mManipPart ), bbox ));  			LLVector3 snap_line_start = snap_line_center + (mSnapGuideDir1 * mSnapRegimeOffset);  			LLVector3 snap_line_end = snap_line_center + (mSnapGuideDir2 * mSnapRegimeOffset); @@ -1592,15 +1665,15 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  				arrow_dir = snap_line_start - snap_line_center;  				arrow_dir.normVec(); -				gGL.vertex3fv((snap_line_start + arrow_dir * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_start + arrow_span * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_start - arrow_span * mBoxHandleSize).mV); +				gGL.vertex3fv((snap_line_start + arrow_dir * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_start + arrow_span * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_start - arrow_span * mSnapRegimeOffset * 0.1f).mV);  				arrow_dir = snap_line_end - snap_line_center;  				arrow_dir.normVec(); -				gGL.vertex3fv((snap_line_end + arrow_dir * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_end + arrow_span * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_end - arrow_span * mBoxHandleSize).mV); +				gGL.vertex3fv((snap_line_end + arrow_dir * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_end + arrow_span * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_end - arrow_span * mSnapRegimeOffset * 0.1f).mV);  			}  			gGL.end();  		} @@ -1622,9 +1695,9 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  			for (S32 i = start_tick; i <= stop_tick; i++)  			{  				F32 alpha = (1.f - (1.f *  ((F32)llabs(i) / (F32)num_ticks_per_side1))); -				LLVector3 tick_pos = drag_point + (mScaleDir * (mScaleSnapUnit1 / max_subdivisions * (F32)i - grid_offset1)); +				LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple1 + i) * (mScaleSnapUnit1 / max_subdivisions)); -				F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); +				F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit1, mTickPixelSpacing1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);  				if (fmodf((F32)(i + sub_div_offset_1), (max_subdivisions / cur_subdivisions)) != 0.f)  				{ @@ -1655,9 +1728,9 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  			for (S32 i = start_tick; i <= stop_tick; i++)  			{  				F32 alpha = (1.f - (1.f *  ((F32)llabs(i) / (F32)num_ticks_per_side2))); -				LLVector3 tick_pos = drag_point + (mScaleDir * (mScaleSnapUnit2 / max_subdivisions * (F32)i - grid_offset2)); - -				F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); +				LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple2 + i) * (mScaleSnapUnit2 / max_subdivisions)); +				 +				F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit2, mTickPixelSpacing2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);  				if (fmodf((F32)(i + sub_div_offset_2), (max_subdivisions / cur_subdivisions)) != 0.f)  				{ @@ -1695,7 +1768,9 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		{  			F32 tick_scale = 1.f;  			F32 alpha = grid_alpha * (1.f - (0.5f *  ((F32)llabs(i) / (F32)num_ticks_per_side1))); -			LLVector3 tick_pos = drag_point + (mScaleDir * (mScaleSnapUnit1 / max_subdivisions * (F32)i - grid_offset1)); +			F32 distance = (drag_point - mScaleCenter) * mScaleDir; +			(void) distance; +			LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple1 + i) * (mScaleSnapUnit1 / max_subdivisions));  			for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)  			{ @@ -1710,31 +1785,26 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  			{  				LLVector3 text_origin = tick_pos +   					(mSnapGuideDir1 * mSnapRegimeOffset * (1.f + tick_scale)); - +				  				EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode(); -				F32 tick_val; +				F32 tick_value;  				if (grid_mode == GRID_MODE_WORLD)  				{ -					tick_val = (tick_pos - mScaleCenter) * mScaleDir / (mScaleSnapUnit1 / grid_resolution); +					tick_value = (grid_multiple1 + i) / (max_subdivisions / grid_resolution);  				}  				else  				{ -					tick_val = (tick_pos - mScaleCenter) * mScaleDir / (mScaleSnapUnit1 * 2.f); -				} - -				if (getUniform()) -				{ -					tick_val *= 2.f; +					tick_value = (grid_multiple1 + i) / (2.f * max_subdivisions);  				}  				F32 text_highlight = 0.8f; -				if (is_approx_equal(tick_val, mScaleSnapValue) && mInSnapRegime) +				if (is_approx_equal(tick_value, mScaleSnappedValue) && mInSnapRegime)  				{  					text_highlight = 1.f;  				} -				renderTickValue(text_origin, tick_val, grid_mode == GRID_MODE_WORLD ? std::string("m") : std::string("x"), LLColor4(text_highlight, text_highlight, text_highlight, alpha)); +				renderTickValue(text_origin, tick_value, grid_mode == GRID_MODE_WORLD ? std::string("m") : std::string("x"), LLColor4(text_highlight, text_highlight, text_highlight, alpha));  			}  		} @@ -1747,7 +1817,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  			{  				F32 tick_scale = 1.f;  				F32 alpha = grid_alpha * (1.f - (0.5f *  ((F32)llabs(i) / (F32)num_ticks_per_side2))); -				LLVector3 tick_pos = drag_point + (mScaleDir * (mScaleSnapUnit2 / max_subdivisions * (F32)i - grid_offset2)); +				LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple2 + i) * (mScaleSnapUnit2 / max_subdivisions));  				for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)  				{ @@ -1764,29 +1834,24 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  						(mSnapGuideDir2 * mSnapRegimeOffset * (1.f + tick_scale));  					EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode(); -					F32 tick_val; +					F32 tick_value;  					if (grid_mode == GRID_MODE_WORLD)  					{ -						tick_val = (tick_pos - mScaleCenter) * mScaleDir / (mScaleSnapUnit2 / grid_resolution); +						tick_value = (grid_multiple2 + i) / (max_subdivisions / grid_resolution);  					}  					else  					{ -						tick_val = (tick_pos - mScaleCenter) * mScaleDir / (mScaleSnapUnit2 * 2.f); -					} - -					if (getUniform()) -					{ -						tick_val *= 2.f; +						tick_value = (grid_multiple2 + i) / (2.f * max_subdivisions);  					}  					F32 text_highlight = 0.8f; -					if (is_approx_equal(tick_val, mScaleSnapValue) && mInSnapRegime) +					if (is_approx_equal(tick_value, mScaleSnappedValue) && mInSnapRegime)  					{  						text_highlight = 1.f;  					} -					renderTickValue(text_origin, tick_val, grid_mode == GRID_MODE_WORLD ? std::string("m") : std::string("x"), LLColor4(text_highlight, text_highlight, text_highlight, alpha)); +					renderTickValue(text_origin, tick_value, grid_mode == GRID_MODE_WORLD ? std::string("m") : std::string("x"), LLColor4(text_highlight, text_highlight, text_highlight, alpha));  				}  			}  		} @@ -1881,28 +1946,28 @@ LLVector3 LLManipScale::cornerToUnitVector( S32 part ) const  	switch(part)  	{  		case LL_CORNER_NNN: -			vec.setVec(-F_SQRT3, -F_SQRT3, -F_SQRT3); +			vec.setVec(-OO_SQRT3, -OO_SQRT3, -OO_SQRT3);  			break;  		case LL_CORNER_NNP:		 -			vec.setVec(-F_SQRT3, -F_SQRT3, F_SQRT3); +			vec.setVec(-OO_SQRT3, -OO_SQRT3, OO_SQRT3);  			break;  		case LL_CORNER_NPN: -			vec.setVec(-F_SQRT3, F_SQRT3, -F_SQRT3); +			vec.setVec(-OO_SQRT3, OO_SQRT3, -OO_SQRT3);  			break;  		case LL_CORNER_NPP: -			vec.setVec(-F_SQRT3, F_SQRT3, F_SQRT3); +			vec.setVec(-OO_SQRT3, OO_SQRT3, OO_SQRT3);  			break;  		case LL_CORNER_PNN: -			vec.setVec(F_SQRT3, -F_SQRT3, -F_SQRT3); +			vec.setVec(OO_SQRT3, -OO_SQRT3, -OO_SQRT3);  			break;  		case LL_CORNER_PNP: -			vec.setVec(F_SQRT3, -F_SQRT3, F_SQRT3); +			vec.setVec(OO_SQRT3, -OO_SQRT3, OO_SQRT3);  			break;  		case LL_CORNER_PPN: -			vec.setVec(F_SQRT3, F_SQRT3, -F_SQRT3); +			vec.setVec(OO_SQRT3, OO_SQRT3, -OO_SQRT3);  			break;  		case LL_CORNER_PPP: -			vec.setVec(F_SQRT3, F_SQRT3, F_SQRT3); +			vec.setVec(OO_SQRT3, OO_SQRT3, OO_SQRT3);  			break;  		default:  			vec.clearVec(); diff --git a/indra/newview/llmanipscale.h b/indra/newview/llmanipscale.h index 5cb8898fd0..079fda76ce 100755 --- a/indra/newview/llmanipscale.h +++ b/indra/newview/llmanipscale.h @@ -64,7 +64,7 @@ public:  		ManipulatorHandle(LLVector3 pos, EManipPart id, EScaleManipulatorType type):mPosition(pos), mManipID(id), mType(type){}  	}; - +	static const S32 NUM_MANIPULATORS = 14;  	LLManipScale( LLToolComposite* composite );  	~LLManipScale(); @@ -91,7 +91,7 @@ private:  	void			renderFaces( const LLBBox& local_bbox );  	void			renderEdges( const LLBBox& local_bbox );  	void			renderBoxHandle( F32 x, F32 y, F32 z ); -	void			renderAxisHandle( const LLVector3& start, const LLVector3& end ); +	void			renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end );  	void			renderGuidelinesPart( const LLBBox& local_bbox );  	void			renderSnapGuides( const LLBBox& local_bbox ); @@ -135,7 +135,6 @@ private:  	}; -	F32				mBoxHandleSize;		// The size of the handles at the corners of the bounding box  	F32				mScaledBoxHandleSize; // handle size after scaling for selection feedback  	LLVector3d		mDragStartPointGlobal;  	LLVector3d		mDragStartCenterGlobal;	// The center of the bounding box of all selected objects at time of drag start @@ -157,12 +156,15 @@ private:  	LLVector3		mSnapDir1;  	LLVector3		mSnapDir2;  	F32				mSnapRegimeOffset; +	F32				mTickPixelSpacing1, +					mTickPixelSpacing2;  	F32				mSnapGuideLength;  	LLVector3		mScaleCenter;  	LLVector3		mScaleDir; -	F32				mScaleSnapValue; +	F32				mScaleSnappedValue;  	BOOL			mInSnapRegime; -	F32*			mManipulatorScales; +	F32				mManipulatorScales[NUM_MANIPULATORS]; +	F32				mBoxHandleSize[NUM_MANIPULATORS];		// The size of the handles at the corners of the bounding box  };  #endif  // LL_MANIPSCALE_H diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index da8235ee5f..0518ddf88d 100755 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -1247,7 +1247,7 @@ void LLManipTranslate::renderSnapGuides()  		// find distance to nearest smallest grid unit  		F32 offset_nearest_grid_unit = fmodf(dist_grid_axis, smallest_grid_unit_scale);  		// how many smallest grid units are we away from largest grid scale? -		S32 sub_div_offset = llround(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale); +		S32 sub_div_offset = llround(fmodf(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale);  		S32 num_ticks_per_side = llmax(1, llfloor(0.5f * guide_size_meters / smallest_grid_unit_scale));  		LLGLDepthTest gls_depth(GL_FALSE); diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp index 9b21fbf6b7..acdb16f432 100755 --- a/indra/newview/llpanelland.cpp +++ b/indra/newview/llpanelland.cpp @@ -145,7 +145,7 @@ void LLPanelLandInfo::refresh()  						&& ((gAgent.getID() == auth_buyer_id)  							|| (auth_buyer_id.isNull()))); -		if (is_public) +		if (is_public && !LLViewerParcelMgr::getInstance()->getParcelSelection()->getMultipleOwners())  		{  			getChildView("button buy land")->setEnabled(TRUE);  		} diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 343f2b413f..8da4948628 100755 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -1263,6 +1263,7 @@ bool LLLandmarksPanel::handleDragAndDropToTrash(BOOL drop, EDragAndDropType carg  		break;  	} +	updateVerbs();  	return true;  } diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index e501486ecb..0817b677bc 100755 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -129,6 +129,7 @@ BOOL LLPanelPlaceProfile::postBuild()  	mEstateNameText = getChild<LLTextBox>("estate_name");  	mEstateRatingText = getChild<LLTextBox>("estate_rating"); +	mEstateRatingIcon = getChild<LLIconCtrl>("estate_rating_icon");  	mEstateOwnerText = getChild<LLTextBox>("estate_owner");  	mCovenantText = getChild<LLTextEditor>("covenant"); @@ -201,6 +202,7 @@ void LLPanelPlaceProfile::resetLocation()  	mEstateNameText->setValue(loading);  	mEstateRatingText->setValue(loading); +	mEstateRatingIcon->setValue(loading);  	mEstateOwnerText->setValue(loading);  	mCovenantText->setValue(loading); @@ -348,6 +350,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mParcelRatingIcon->setValue(icon_m);  		mRegionRatingIcon->setValue(icon_m); +		mEstateRatingIcon->setValue(icon_m);  		break;  	case SIM_ACCESS_ADULT: @@ -355,6 +358,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mParcelRatingIcon->setValue(icon_r);  		mRegionRatingIcon->setValue(icon_r); +		mEstateRatingIcon->setValue(icon_r);  		break;  	default: @@ -362,6 +366,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mParcelRatingIcon->setValue(icon_pg);  		mRegionRatingIcon->setValue(icon_pg); +		mEstateRatingIcon->setValue(icon_pg);  	}  	std::string rating = LLViewerRegion::accessToString(sim_access); diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h index 01adfd4940..4547e14b2e 100755 --- a/indra/newview/llpanelplaceprofile.h +++ b/indra/newview/llpanelplaceprofile.h @@ -103,6 +103,7 @@ private:  	LLTextBox*			mEstateNameText;  	LLTextBox*			mEstateRatingText; +	LLIconCtrl*			mEstateRatingIcon;  	LLTextBox*			mEstateOwnerText;  	LLTextEditor*		mCovenantText; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 8fddd9523f..8c8b13e657 100755 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -45,6 +45,7 @@  #include "llviewermenu.h"  #include "lllandmarkactions.h"  #include "llclipboard.h" +#include "lltrans.h"  // Maximum number of items that can be added to a list in one pass.  // Used to limit time spent for items list update per frame. @@ -55,7 +56,8 @@ static const std::string COLLAPSED_BY_USER = "collapsed_by_user";  class LLTeleportHistoryFlatItem : public LLPanel  {  public: -	LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, const std::string &hl); +	LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, +										 	 LLDate date, const std::string &hl);  	virtual ~LLTeleportHistoryFlatItem();  	virtual BOOL postBuild(); @@ -66,8 +68,11 @@ public:  	void setIndex(S32 index) { mIndex = index; }  	const std::string& getRegionName() { return mRegionName;}  	void setRegionName(const std::string& name); +	void setDate(LLDate date);  	void setHighlightedText(const std::string& text);  	void updateTitle(); +	void updateTimestamp(); +	std::string getTimestamp();  	/*virtual*/ void setValue(const LLSD& value); @@ -84,12 +89,14 @@ private:  	LLButton* mProfileBtn;  	LLTextBox* mTitle; +	LLTextBox* mTimeTextBox;  	LLTeleportHistoryPanel::ContextMenu *mContextMenu;  	S32 mIndex;  	std::string mRegionName;  	std::string mHighlight; +	LLDate 		mDate;  	LLRootHandle<LLTeleportHistoryFlatItem> mItemHandle;  }; @@ -121,11 +128,13 @@ private:  ////////////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////////// -LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, const std::string &hl) +LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, +																LLDate date, const std::string &hl)  :	LLPanel(),  	mIndex(index),  	mContextMenu(context_menu),  	mRegionName(region_name), +	mDate(date),  	mHighlight(hl)  {  	buildFromFile( "panel_teleport_history_item.xml"); @@ -140,11 +149,14 @@ BOOL LLTeleportHistoryFlatItem::postBuild()  {  	mTitle = getChild<LLTextBox>("region"); +	mTimeTextBox = getChild<LLTextBox>("timestamp"); +  	mProfileBtn = getChild<LLButton>("profile_btn");  	mProfileBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onProfileBtnClick, this));  	updateTitle(); +	updateTimestamp();  	return true;  } @@ -179,6 +191,38 @@ void LLTeleportHistoryFlatItem::setRegionName(const std::string& name)  	mRegionName = name;  } +void LLTeleportHistoryFlatItem::setDate(LLDate date) +{ +	mDate = date; +} + +std::string LLTeleportHistoryFlatItem::getTimestamp() +{ +	const LLDate &date = mDate; +	std::string timestamp = ""; + +	LLDate now = LLDate::now(); +	S32 now_year, now_month, now_day, now_hour, now_min, now_sec; +	now.split(&now_year, &now_month, &now_day, &now_hour, &now_min, &now_sec); + +	const S32 seconds_in_day = 24 * 60 * 60; +	S32 seconds_today = now_hour * 60 * 60 + now_min * 60 + now_sec; +	S32 time_diff = (S32) now.secondsSinceEpoch() - (S32) date.secondsSinceEpoch(); + +	// Only show timestamp for today and yesterday +	if(time_diff < seconds_today + seconds_in_day) +	{ +		timestamp = "[" + LLTrans::getString("TimeHour12")+"]:[" +						+ LLTrans::getString("TimeMin")+"] ["+ LLTrans::getString("TimeAMPM")+"]"; +		LLSD substitution; +		substitution["datetime"] = (S32) date.secondsSinceEpoch(); +		LLStringUtil::format(timestamp, substitution); +	} + +	return timestamp; + +} +  void LLTeleportHistoryFlatItem::updateTitle()  {  	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255)); @@ -190,6 +234,17 @@ void LLTeleportHistoryFlatItem::updateTitle()  		mHighlight);  } +void LLTeleportHistoryFlatItem::updateTimestamp() +{ +	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255)); + +	LLTextUtil::textboxSetHighlightedVal( +		mTimeTextBox, +		LLStyle::Params().color(sFgColor), +		getTimestamp(), +		mHighlight); +} +  void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)  {  	getChildView("hovered_icon")->setVisible( true); @@ -248,9 +303,11 @@ LLTeleportHistoryFlatItemStorage::getFlatItemForPersistentItem (  		{  			item->setIndex(cur_item_index);  			item->setRegionName(persistent_item.mTitle); +			item->setDate(persistent_item.mDate);  			item->setHighlightedText(hl);  			item->setVisible(TRUE);  			item->updateTitle(); +			item->updateTimestamp();  		}  		else  		{ @@ -264,6 +321,7 @@ LLTeleportHistoryFlatItemStorage::getFlatItemForPersistentItem (  		item = new LLTeleportHistoryFlatItem(cur_item_index,  											 context_menu,  											 persistent_item.mTitle, +											 persistent_item.mDate,  											 hl);  		mItems.push_back(item->getItemHandle());  	} diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index b379ef7bdb..6c56d752ef 100755 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -90,6 +90,7 @@ void LLPreview::setObjectID(const LLUUID& object_id)  	{  		loadAsset();  	} +	refreshFromItem();  }  void LLPreview::setItem( LLInventoryItem* item ) @@ -99,6 +100,7 @@ void LLPreview::setItem( LLInventoryItem* item )  	{  		loadAsset();  	} +	refreshFromItem();  }  const LLInventoryItem *LLPreview::getItem() const diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index e694045f9a..6770db8140 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1876,7 +1876,7 @@ void LLLiveLSLEditor::loadAsset()  			mIsModifiable = item && gAgent.allowOperation(PERM_MODIFY,   										item->getPermissions(),  				   						GP_OBJECT_MANIPULATE); -			refreshFromItem(); +  			// This is commented out, because we don't completely  			// handle script exports yet.  			/* diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 7b894d8d98..0a8257f42b 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -62,6 +62,7 @@ static U32 sZombieGroups = 0;  U32 LLSpatialGroup::sNodeCount = 0;  U32 gOctreeMaxCapacity; +F32 gOctreeMinSize;  BOOL LLSpatialGroup::sNoDelete = FALSE; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index a76b4bbe09..cca079b4c9 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2801,6 +2801,7 @@ void LLStartUp::initNameCache()  	// capabilities for display name lookup  	LLAvatarNameCache::initClass(false,gSavedSettings.getBOOL("UsePeopleAPI"));  	LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getBOOL("UseDisplayNames")); +	LLAvatarNameCache::setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));  }  void LLStartUp::cleanupNameCache() diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index d307a31843..eabf6f0497 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1584,13 +1584,22 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)  	const LLUUID& session_id = payload["session_id"];  	const LLUUID& agent_id = payload["agent_id"];  	LLViewerInventoryItem * inv_item =  gInventory.getItem(payload["item_id"]); -	if (NULL == inv_item) +	LLViewerInventoryCategory * inv_cat =  gInventory.getCategory(payload["item_id"]); +	if (NULL == inv_item && NULL == inv_cat)  	{ -		llassert(NULL != inv_item); +		llassert( FALSE );  		return;  	} - -	if (LLGiveInventory::doGiveInventoryItem(agent_id, inv_item, session_id)) +	bool successfully_shared; +	if (inv_item) +	{ +		successfully_shared = LLGiveInventory::doGiveInventoryItem(agent_id, inv_item, session_id); +	} +	else +	{ +		successfully_shared = LLGiveInventory::doGiveInventoryCategory(agent_id, inv_cat, session_id); +	} +	if (successfully_shared)  	{  		if ("avatarpicker" == payload["d&d_dest"].asString())  		{ @@ -1600,8 +1609,8 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)  	}  } -static void show_item_sharing_confirmation(const std::string name, -					   LLViewerInventoryItem* inv_item, +static void show_object_sharing_confirmation(const std::string name, +					   LLInventoryObject* inv_item,  					   const LLSD& dest,  					   const LLUUID& dest_agent,  					   const LLUUID& session_id = LLUUID::null) @@ -1611,32 +1620,28 @@ static void show_item_sharing_confirmation(const std::string name,  		llassert(NULL != inv_item);  		return;  	} -	if(gInventory.getItem(inv_item->getUUID()) -		&& LLGiveInventory::isInventoryGiveAcceptable(inv_item)) -	{ -		LLSD substitutions; -		substitutions["RESIDENTS"] = name; -		substitutions["ITEMS"] = inv_item->getName(); -		LLSD payload; -		payload["agent_id"] = dest_agent; -		payload["item_id"] = inv_item->getUUID(); -		payload["session_id"] = session_id; -		payload["d&d_dest"] = dest.asString(); -		LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb); -	} +	LLSD substitutions; +	substitutions["RESIDENTS"] = name; +	substitutions["ITEMS"] = inv_item->getName(); +	LLSD payload; +	payload["agent_id"] = dest_agent; +	payload["item_id"] = inv_item->getUUID(); +	payload["session_id"] = session_id; +	payload["d&d_dest"] = dest.asString(); +	LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb);  }  static void get_name_cb(const LLUUID& id,  						const std::string& full_name, -						LLViewerInventoryItem* inv_item, +						LLInventoryObject* inv_obj,  						const LLSD& dest,  						const LLUUID& dest_agent)  { -	show_item_sharing_confirmation(full_name, -								   inv_item, -								   dest, -								   id, -								   LLUUID::null); +	show_object_sharing_confirmation(full_name, +								     inv_obj, +								     dest, +						  		     id, +								     LLUUID::null);  }  // function used as drag-and-drop handler for simple agent give inventory requests @@ -1662,10 +1667,11 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_  	case DAD_GESTURE:  	case DAD_CALLINGCARD:  	case DAD_MESH: +	case DAD_CATEGORY:  	{ -		LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; -		if(gInventory.getItem(inv_item->getUUID()) -			&& LLGiveInventory::isInventoryGiveAcceptable(inv_item)) +		LLInventoryObject* inv_obj = (LLInventoryObject*)cargo_data; +		if(gInventory.getCategory(inv_obj->getUUID()) || (gInventory.getItem(inv_obj->getUUID()) +			&& LLGiveInventory::isInventoryGiveAcceptable(dynamic_cast<LLInventoryItem*>(inv_obj))))  		{  			// *TODO: get multiple object transfers working  			*accept = ACCEPT_YES_COPY_SINGLE; @@ -1682,40 +1688,18 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_  					// Otherwise set up a callback to show the dialog when the name arrives.  					if (gCacheName->getFullName(dest_agent, fullname))  					{ -						show_item_sharing_confirmation(fullname, inv_item, dest, dest_agent, LLUUID::null); +						show_object_sharing_confirmation(fullname, inv_obj, dest, dest_agent, LLUUID::null);  					}  					else  					{ -						gCacheName->get(dest_agent, false, boost::bind(&get_name_cb, _1, _2, inv_item, dest, dest_agent)); +						gCacheName->get(dest_agent, false, boost::bind(&get_name_cb, _1, _2, inv_obj, dest, dest_agent));  					}  					return true;  				}  				// If an IM session with destination agent is found item offer will be logged in this session. -				show_item_sharing_confirmation(session->mName, inv_item, dest, dest_agent, session_id); -			} -		} -		else -		{ -			// It's not in the user's inventory (it's probably -			// in an object's contents), so disallow dragging -			// it here.  You can't give something you don't -			// yet have. -			*accept = ACCEPT_NO; -		} -		break; -	} -	case DAD_CATEGORY: -	{ -		LLViewerInventoryCategory* inv_cat = (LLViewerInventoryCategory*)cargo_data; -		if( gInventory.getCategory( inv_cat->getUUID() ) ) -		{ -			// *TODO: get multiple object transfers working -			*accept = ACCEPT_YES_COPY_SINGLE; -			if(drop) -			{ -				LLGiveInventory::doGiveInventoryCategory(dest_agent, inv_cat, session_id); +				show_object_sharing_confirmation(session->mName, inv_obj, dest, dest_agent, session_id);  			}  		}  		else diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 558159775f..6881ec4563 100755 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1672,17 +1672,7 @@ BOOL LLToolPie::handleRightClickPick()  			{  				name = node->mName;  			} -			std::string mute_msg; -			if (LLMuteList::getInstance()->isMuted(object->getID(), name)) -			{ -				mute_msg = LLTrans::getString("UnmuteObject"); -			} -			else -			{ -				mute_msg = LLTrans::getString("MuteObject2"); -			} -			 -			gMenuHolder->getChild<LLUICtrl>("Object Mute")->setValue(mute_msg); +  			gMenuObject->show(x, y);  			showVisualContextMenuEffect(); diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 70d3fc9462..5020518454 100755 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -368,6 +368,7 @@ static bool handleRepartition(const LLSD&)  	if (gPipeline.isInit())  	{  		gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity"); +		gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");  		gObjectList.repartitionObjects();  	}  	return true; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 9c08ec7e77..a3befdb046 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7815,7 +7815,7 @@ void handle_report_bug(const LLSD& param)  	replace["[ENVIRONMENT]"] = LLURI::escape(LLAppViewer::instance()->getViewerInfoString());  	LLSLURL location_url;  	LLAgentUI::buildSLURL(location_url); -	replace["[LOCATION]"] = location_url.getSLURLString(); +	replace["[LOCATION]"] = LLURI::escape(location_url.getSLURLString());  	LLUIString file_bug_url = gSavedSettings.getString("ReportBugURL");  	file_bug_url.setArgs(replace); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 00d28a4307..7c032f0a3b 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2416,10 +2416,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  					&& from_id.notNull() //not a system message  					&& to_id.notNull()) //not global message  		{ -			// return a standard "do not disturb" message, but only do it to online IM -			// (i.e. not other auto responses and not store-and-forward IM) - -			send_do_not_disturb_message(msg, from_id, session_id);  			// now store incoming IM in chat history @@ -2440,6 +2436,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  				region_id,  				position,  				true); + +			if (!gIMMgr->isDNDMessageSend(session_id)) +			{ +				// return a standard "do not disturb" message, but only do it to online IM +				// (i.e. not other auto responses and not store-and-forward IM) +				send_do_not_disturb_message(msg, from_id, session_id); +				gIMMgr->setDNDMessageSent(session_id, true); +			} +  		}  		else if (from_id.isNull())  		{ diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 1932f4e8ce..4b0442ac6b 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -2527,40 +2527,69 @@ void LLViewerRegion::unpackRegionHandshake()  	{  		LLUUID tmp_id; +		bool changed = false; + +		// Get the 4 textures for land  		msg->getUUID("RegionInfo", "TerrainDetail0", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(0));		  		compp->setDetailTextureID(0, tmp_id); +  		msg->getUUID("RegionInfo", "TerrainDetail1", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(1));		  		compp->setDetailTextureID(1, tmp_id); +  		msg->getUUID("RegionInfo", "TerrainDetail2", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(2));		  		compp->setDetailTextureID(2, tmp_id); +  		msg->getUUID("RegionInfo", "TerrainDetail3", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(3));		  		compp->setDetailTextureID(3, tmp_id); +		// Get the start altitude and range values for land textures  		F32 tmp_f32;  		msg->getF32("RegionInfo", "TerrainStartHeight00", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(0));  		compp->setStartHeight(0, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainStartHeight01", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(1));  		compp->setStartHeight(1, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainStartHeight10", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(2));  		compp->setStartHeight(2, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainStartHeight11", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(3));  		compp->setStartHeight(3, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange00", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(0));  		compp->setHeightRange(0, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange01", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(1));  		compp->setHeightRange(1, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange10", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(2));  		compp->setHeightRange(2, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange11", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(3));  		compp->setHeightRange(3, tmp_f32);  		// If this is an UPDATE (params already ready, we need to regenerate  		// all of our terrain stuff, by  		if (compp->getParamsReady())  		{ -			//this line creates frame stalls on region crossing and removing it appears to have no effect -			//getLand().dirtyAllPatches(); +			// Update if the land changed +			if (changed) +			{ +				getLand().dirtyAllPatches(); +			}  		}  		else  		{ diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index b98726900f..2209b24ca7 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1280,7 +1280,7 @@ S32Megabytes LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, fl  		//  - it's going to be swapping constantly regardless  		S32Megabytes max_vram(gGLManager.mVRAM); -		if(gGLManager.mIsATI) +		if(!get_recommended && gGLManager.mIsATI)  		{  			//shrink the availabe vram for ATI cards because some of them do not handel texture swapping well.  			max_vram = max_vram * 0.75f;  @@ -1295,15 +1295,15 @@ S32Megabytes LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, fl  	{  		if (!get_recommended)  		{ -			max_texmem = (S32Megabytes)512; +			max_texmem = (S32Megabytes) 2048;  		}  		else if (gSavedSettings.getBOOL("NoHardwareProbe")) //did not do hardware detection at startup  		{ -			max_texmem = (S32Megabytes)512; +			max_texmem = (S32Megabytes) 2048;  		}  		else  		{ -			max_texmem = (S32Megabytes)128; +			max_texmem = (S32Megabytes) 512;  		}  		LL_WARNS() << "VRAM amount not detected, defaulting to " << max_texmem << " MB" << LL_ENDL; @@ -1311,10 +1311,7 @@ S32Megabytes LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, fl  	S32Megabytes system_ram = gSysMemory.getPhysicalMemoryClamped(); // In MB  	//LL_INFOS() << "*** DETECTED " << system_ram << " MB of system memory." << LL_ENDL; -	if (get_recommended) -		max_texmem = llmin(max_texmem, system_ram/2); -	else -		max_texmem = llmin(max_texmem, system_ram); +	max_texmem = llmin(max_texmem, (S32Megabytes)(system_ram));      // limit the texture memory to a multiple of the default if we've found some cards to behave poorly otherwise  	max_texmem = llmin(max_texmem, (S32Megabytes) (mem_multiplier * max_texmem)); @@ -1344,7 +1341,7 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32Megabytes mem)  	mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting(false, mem_multiplier));  	if (mem != cur_mem)  	{ -		gSavedSettings.setS32("TextureMemory", mem.value()); +		gSavedSettings.setS32("TextureMemory", mem.value()/3);  		return; //listener will re-enter this function  	} diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index ec794e527d..4fae5c8e8e 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1059,7 +1059,7 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window,  LLCoordGL pos, MASK  	// *HACK: this should be rolled into the composite tool logic, not  	// hardcoded at the top level. -	if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance()) +	if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance() && gAgent.isInitialized())  	{  		// If the current tool didn't process the click, we should show  		// the pie menu.  This can be done by passing the event to the pie diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index d1108020ff..e1253d3fba 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1287,9 +1287,9 @@ BOOL LLVOVolume::calcLOD()  	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_LOD_INFO) &&  		mDrawable->getFace(0))  	{ -		//setDebugText(llformat("%.2f:%.2f, %d", debug_distance, radius, cur_detail)); +		//setDebugText(llformat("%.2f:%.2f, %d", mDrawable->mDistanceWRTCamera, radius, cur_detail)); -		//setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex())); +		setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex()));  	}  	if (cur_detail != mLOD) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 21ccec5c0a..b7b198fc02 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -492,6 +492,7 @@ void LLPipeline::init()  	refreshCachedSettings();  	gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity"); +	gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");  	sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD");  	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");  	sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips"); diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index d4df1ee71c..aa3d435e33 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -243,7 +243,7 @@ with the same filename but different name    <texture name="Icon_Dock_Foreground" file_name="windows/Icon_Dock_Foreground.png" preload="true" />    <texture name="Icon_Dock_Press" file_name="windows/Icon_Dock_Press.png" preload="true" /> -  <texture name="Icon_For_Sale" file_name="icons/Icon_For_sale.png" preload="false" /> +  <texture name="Icon_For_Sale" file_name="icons/Icon_For_Sale.png" preload="false" />    <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" /> @@ -344,8 +344,8 @@ with the same filename but different name    <texture name="ModelImport_Status_Warning" file_name="lag_status_warning.tga" preload="false"/>    <texture name="ModelImport_Status_Error" file_name="red_x.png" preload="false"/> -  <texture name="MouseLook_View_Off" file_name="bottomtray/MouseLook_view_off.png" preload="false" /> -  <texture name="MouseLook_View_On" file_name="bottomtray/MouseLook_view_on.png" preload="false" /> +  <texture name="MouseLook_View_Off" file_name="bottomtray/Mouselook_View_Off.png" preload="false" /> +  <texture name="MouseLook_View_On" file_name="bottomtray/Mouselook_View_On.png" preload="false" />    <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" />    <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml index 0df330b016..6d48180707 100755 --- a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Lokationer, billeder, web, søge historik)  	</text> -	<check_box label="Vis dig selv i søgeresultater" name="online_searchresults"/> +	<check_box label="Vis min profil info i søgeresultater" name="online_searchresults"/>  	<check_box label="Kun venner og grupper ved jeg er online" name="online_visibility"/>  	<check_box label="Kun venner og grupper kan sende besked til mig" name="voice_call_friends_only_check"/>  	<check_box label="Slå mikrofon fra når opkald slutter" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml index e21bed6bb5..afde50b981 100755 --- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Standorte, Bilder, Web, Suchverlauf)  	</text> -	<check_box label="In Suchergebnissen anzeigen" name="online_searchresults"/> +	<check_box label="Zeigen Sie mein Profil Informationen in Suchergebnisse" name="online_searchresults"/>  	<check_box label="Nur Freunde und Gruppen wissen, dass ich online bin" name="online_visibility"/>  	<check_box label="Nur Freunde und Gruppen können mich anrufen oder mir eine IM schicken" name="voice_call_friends_only_check"/>  	<check_box label="Mikrofon ausschalten, wenn Anrufe beendet werden" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml index 9deb0d2030..05594c2d86 100755 --- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml @@ -155,13 +155,12 @@       tool_tip="Compresses textures in video memory, allowing for higher resolution textures to be loaded at the cost of some color quality."       width="315" />      <slider -     control_name="TextureMemory"       decimal_digits="0"       follows="left|top"       height="20"       increment="16"       initial_value="32" -     label="Texture Memory (MB):" +     label="Video Memory (MB):"       label_width="195"       layout="topleft"       left="10" diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml index 9561f67941..c50c8c02fe 100755 --- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml @@ -203,47 +203,15 @@          <combo_box.item           label="Age > Age play"           name="Age__Age_play" -         value="31" /> +         value="31" />                 <combo_box.item -         label="Age > Adult Resident on Teen Second Life" -         name="Age__Adult_resident_on_Teen_Second_Life" -         value="32" /> -        <combo_box.item -         label="Age > Underage Resident outside of Teen Second Life" -         name="Age__Underage_resident_outside_of_Teen_Second_Life" -         value="33" /> -        <combo_box.item -         label="Assault > Combat sandbox / unsafe area" -         name="Assault__Combat_sandbox___unsafe_area" -         value="34" /> -        <combo_box.item -         label="Assault > Safe area" +         label="Assault > Shooting, pushing, or shoving another Resident in a Safe Area"           name="Assault__Safe_area" -         value="35" /> -        <combo_box.item -         label="Assault > Weapons testing sandbox" -         name="Assault__Weapons_testing_sandbox" -         value="36" /> -        <combo_box.item -         label="Commerce > Failure to deliver product or service" -         name="Commerce__Failure_to_deliver_product_or_service" -         value="38" /> +         value="35" />                  <combo_box.item           label="Disclosure > Real world information"           name="Disclosure__Real_world_information" -         value="39" /> -        <combo_box.item -         label="Disclosure > Remotely monitoring chat" -         name="Disclosure__Remotely_monitoring chat" -         value="40" /> -        <combo_box.item -         label="Disclosure > Second Life information/chat/IMs" -         name="Disclosure__Second_Life_information_chat_IMs" -         value="41" /> -        <combo_box.item -         label="Disturbing the peace > Unfair use of region resources" -         name="Disturbing_the_peace__Unfair_use_of_region_resources" -         value="42" /> +         value="39" />               <combo_box.item           label="Disturbing the peace > Excessive scripted objects"           name="Disturbing_the_peace__Excessive_scripted_objects" @@ -255,51 +223,15 @@          <combo_box.item           label="Disturbing the peace > Repetitive spam"           name="Disturbing_the_peace__Repetitive_spam" -         value="45" /> -        <combo_box.item -         label="Disturbing the peace > Unwanted advert spam" -         name="Disturbing_the_peace__Unwanted_advert_spam" -         value="46" /> -        <combo_box.item -         label="Fraud > L$" -         name="Fraud__L$" -         value="47" /> -        <combo_box.item -         label="Fraud > Land" -         name="Fraud__Land" -         value="48" /> -        <combo_box.item -         label="Fraud > Pyramid scheme or chain letter" -         name="Fraud__Pyramid_scheme_or_chain_letter" -         value="49" /> +         value="45" />                  <combo_box.item -         label="Fraud > US$" +         label="Fraud > L$ or USD $"           name="Fraud__US$" -         value="50" /> +         value="50" />                 <combo_box.item -         label="Harassment > Advert farms / visual spam" -         name="Harassment__Advert_farms___visual_spam" -         value="51" /> -        <combo_box.item -         label="Harassment > Defaming individuals or groups" -         name="Harassment__Defaming_individuals_or_groups" -         value="52" /> -        <combo_box.item -         label="Harassment > Impeding movement" -         name="Harassment__Impeding_movement" -         value="53" /> -        <combo_box.item -         label="Harassment > Sexual harassment" -         name="Harassment__Sexual_harassment" -         value="54" /> -        <combo_box.item -         label="Harassment > Solicting/inciting others to violate ToS" +         label="Harassment > Targeted behavior intended to disrupt"           name="Harassment__Solicting_inciting_others_to_violate_ToS" -         value="55" /> -        <combo_box.item -         label="Harassment > Verbal abuse" -         name="Harassment__Verbal_abuse" -         value="56" /> +         value="55" />                 <combo_box.item           label="Indecency > Broadly offensive content or conduct"           name="Indecency__Broadly_offensive_content_or_conduct" @@ -309,49 +241,21 @@           name="Indecency__Inappropriate_avatar_name"           value="59" />          <combo_box.item -         label="Indecency > Inappropriate content or conduct in a PG region" +         label="Indecency > Inappropriate content or conduct for Region Rating"           name="Indecency__Mature_content_in_PG_region" -         value="60" /> -        <combo_box.item -         label="Indecency > Inappropriate content or conduct in a Moderate region" -         name="Indecency__Inappropriate_content_in_Mature_region" -         value="69" /> -        <combo_box.item -         label="Intellectual property infringement > Content Removal" -         name="Intellectual_property_infringement_Content_Removal" -         value="66" /> -        <combo_box.item -         label="Intellectual property infringement > CopyBot or Permissions Exploit" -         name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" -         value="37" /> +         value="60" />                 <combo_box.item           label="Intolerance"           name="Intolerance" -         value="61" /> -        <combo_box.item -         label="Land > Abuse of sandbox resources" -         name="Land__Abuse_of_sandbox_resources" -         value="62" /> +         value="61" />                  <combo_box.item -         label="Land > Encroachment > Objects/textures" +         label="Land > Encroachment > Objects or textures"           name="Land__Encroachment__Objects_textures" -         value="63" /> +         value="63" />                  <combo_box.item -         label="Land > Encroachment > Particles" -         name="Land__Encroachment__Particles" -         value="64" /> -        <combo_box.item -         label="Land > Encroachment > Trees/plants" -         name="Land__Encroachment__Trees_plants" -         value="65" /> -        <combo_box.item -         label="Wagering/gambling" +         label="Wagering or Gambling"           name="Wagering_gambling" -         value="67" /> -        <combo_box.item -         label="Other" -         name="Other" -         value="68" /> +         value="67" />             </combo_box>      <text       type="string" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 8b9733df17..3c28233875 100755 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -150,7 +150,7 @@  	     parameter="Land" />  	</button>      <text -     height="30" +     height="20"       word_wrap="true"       use_ellipses="true"       type="string" @@ -294,24 +294,14 @@      <check_box       control_name="ScaleUniform"       height="19" -     label="" +     label="Stretch Both Sides"       layout="topleft"       left="143"       name="checkbox uniform"       top="48" -     width="20" /> -    <text -     height="19" -     label="Stretch Both Sides" -     left_delta="20" -     name="checkbox uniform label" -     top_delta="2" -     width="120" -     layout="topleft" -     follows="top|left" -     wrap="true"> -     	Stretch Both Sides -    </text> +     label_text.wrap="true" +     label_text.width="100" +     width="134" />      <check_box       control_name="ScaleStretchTextures"       height="19" diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 52ab7da515..5c98a98d3d 100755 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -130,17 +130,24 @@            function="Object.ReportAbuse" />        <menu_item_call.on_enable            function="Object.EnableReportAbuse" /> -    </menu_item_call> +    </menu_item_call>         <menu_item_call -        enabled="false" -        label="Block" -        name="Object Mute"> -      <menu_item_call.on_click +   		  label="Block"         +          name="Object Mute"> +        <menu_item_call.on_click            function="Object.Mute" /> -      <menu_item_call.on_enable +        <menu_item_call.on_visible            function="Object.EnableMute" />      </menu_item_call>      <menu_item_call +          label="Unblock"    +          name="Object Unmute"> +        <menu_item_call.on_click +          function="Object.Mute" /> +        <menu_item_call.on_visible +          function="Object.EnableUnmute" /> +    </menu_item_call> +    <menu_item_call          enabled="false"          label="Return"          name="Return..."> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 308acf0c0c..30239d6d01 100755 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -220,7 +220,7 @@              <layout_stack               border_size="0"               clip="false" -             follows="left|top|right" +             follows="left|top"               height="50"               layout="topleft"               mouse_opaque="false" @@ -251,10 +251,10 @@                  </layout_panel>                  <layout_panel                   follows="left|right" -                 height="60" +                 height="50"                   layout="topleft"                   min_height="50" -                 min_width="60" +                 min_width="50"                   mouse_opaque="false"                   name="for_sale_panel"                   top="0" @@ -264,7 +264,7 @@                       height="50"                       image_name="ForSale_Badge"                       layout="topleft" -                     left="10" +                     left="0"                       name="icon_for_sale"                       top="0"                       width="50" /> @@ -762,11 +762,19 @@                           top_pad="5"                           value="Rating:"                           width="80" /> +                        <icon +                         follows="top|left" +                         height="16" +                         image_name="Parcel_PG_Dark" +                         layout="topleft" +                         left_pad="0" +                         name="estate_rating_icon" +                         width="18" />                          <text                           follows="left|top|right"                           height="15"                           layout="topleft" -                         left_pad="0" +                         left_pad="10"                           name="estate_rating"                           top_delta="0"                           width="187" /> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index 78743d26bb..d7ffb73dda 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -47,7 +47,7 @@    <check_box        height="16"        enabled="false" -      label="Show me in Search results" +      label="Show my profile info in Search results"        layout="topleft"        left="30"        name="online_searchresults" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index c5b0be0616..26cac06648 100755 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -47,7 +47,20 @@       text_color="White"       top="4"       value="..." -     width="330" /> +     width="290" /> +    <text +     follows="right" +     height="20" +     layout="topleft" +     left_pad="5" +     right="-20" +     parse_urls="false" +     use_ellipses="true" +     name="timestamp" +     text_color="White" +     top="4" +     value="..." +     width="45" />      <button       follows="right"       height="20" diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml index c162130af6..fe312e3587 100755 --- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Localizaciones, imágenes, web, historial de búsqueda)  	</text> -	<check_box label="Mostrarme en los resultados de la búsqueda" name="online_searchresults"/> +	<check_box label="Mostrarme información de perfil en los resultados de la búsqueda" name="online_searchresults"/>  	<check_box label="Sólo saben si estoy conectado mis amigos y grupos" name="online_visibility"/>  	<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>  	<check_box label="Desconectar el micrófono cuando finalicen las llamadas" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml index cf1a374da6..a89676d119 100755 --- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml @@ -7,13 +7,13 @@  	<text name="cache_size_label_l">  		(endroits, images, web, historique des recherches)  	</text> -	<check_box label="M'afficher dans les résultats de recherche" name="online_searchresults"/> +	<check_box label="Afficher mon profil d'infos dans les résultats de recherche" name="online_searchresults"/>  	<check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/>  	<check_box label="Seuls mes amis et groupes peuvent m'appeler ou m'envoyer un IM" name="voice_call_friends_only_check"/>  	<check_box label="Fermer le micro à la fin d'un appel" name="auto_disengage_mic_check"/>  	<check_box label="Afficher mes repères favoris à la connexion (liste déroulante Lieu de départ)" name="favorites_on_login_check"/>  	<text name="Logs:"> -		Journaux de chat : +		Journaux de chat :  	</text>  	<check_box label="Sauvegarder les chats près de moi sur mon ordinateur" name="log_nearby_chat"/>  	<check_box label="Sauvegarder les IM sur mon ordinateur" name="log_instant_messages"/> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml index 41e7a59139..241ed8f162 100755 --- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Luoghi, immagini, web, cronologia ricerche)  	</text> -	<check_box label="Mostrami nei risultati della ricerca" name="online_searchresults"/> +	<check_box label="Mostra il mio profilo info nei risultati di ricerca" name="online_searchresults"/>  	<check_box label="Solo amici e gruppi mi vedono online" name="online_visibility"/>  	<check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/>  	<check_box label="Spegnere il microfono alla chiusura delle chiamate" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml index 420bbed572..3787f390e4 100755 --- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(位置、画像、web、検索履歴)  	</text> -	<check_box label="検索結果に表示" name="online_searchresults"/> +	<check_box label="検索結果に自分のプロフィール情報を表示する" name="online_searchresults"/>  	<check_box label="私のオンライン状態を確認できるのは、フレンドとグループだけ" name="online_visibility"/>  	<check_box label="フレンドとグループ以外からはコールと IM を受信しない" name="voice_call_friends_only_check"/>  	<check_box label="コールが終了したら自動的にマイクのスイッチを切る" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml index 5af2fed142..30b64bc977 100755 --- a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Miejsca, obrazy, przeglądarka internetowa, wyszukiwarka historii)  	</text> -	<check_box label="Pokaż mój profil w wynikach wyszukiwarki" name="online_searchresults"/> +	<check_box label="Pokaż mój informacje profilu w wynikach wyszukiwania" name="online_searchresults"/>  	<check_box label="Mój status online jest dostępny tylko dla znajomych i grup do których należę" name="online_visibility"/>  	<check_box label="Możliwość wysyłania wiadomości prywatnej (IM) oraz rozmowy głosowej tylko dla 
znajomych i grup do których należę" name="voice_call_friends_only_check" top_pad="15"/>  	<check_box label="Wyłącz mikrofon po zakończeniu rozmowy głosowej" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml index d7fb585e35..8ca05c948a 100755 --- a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Locações, imagens, web, histórico de busca)  	</text> -	<check_box label="Mostrar nos resultados de busca" name="online_searchresults"/> +	<check_box label="Mostrar meu perfil info em resultados de busca" name="online_searchresults"/>  	<check_box label="Apenas amigos e grupos sabem que estou online" name="online_visibility"/>  	<check_box label="Apenas amigos e grupos podem me chamar ou enviar MI" name="voice_call_friends_only_check"/>  	<check_box label="Desligar o microfone quando terminar chamadas" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml index 20bb839eed..ed6bed439c 100755 --- a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Места, картинки, страницы, журнал поиска)  	</text> -	<check_box label="Показывать меня в результатах поиска" name="online_searchresults"/> +	<check_box label="Показывать информацию моего профиля в результатах поиска" name="online_searchresults"/>  	<check_box label="Только друзья и группы видят, когда я на связи" name="online_visibility"/>  	<check_box label="Только друзья и группы могут звонить мне и отправлять IM" name="voice_call_friends_only_check"/>  	<check_box label="Отключать микрофон по окончании разговора" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml index 9111594979..285670a6ac 100755 --- a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Konumlar, görüntüler, web, arama geçmişi)  	</text> -	<check_box label="Arama sonuçlarında beni göster" name="online_searchresults"/> +	<check_box label="Arama sonuçlarında profil bilgilerini göster" name="online_searchresults"/>  	<check_box label="Çevrimiçi olduğumu sadece arkadaşlar ve gruplar bilsin" name="online_visibility"/>  	<check_box label="Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin" name="voice_call_friends_only_check"/>  	<check_box label="Aramaları sonlandırırken mikrofonu kapat" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml index 07fdfd87e3..d768cacb94 100755 --- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(位置、圖像、網頁、搜尋的歷史紀錄)  	</text> -	<check_box label="將我顯示在搜尋的結果中" name="online_searchresults"/> +	<check_box label="顯示在搜索結果我的個人資料信息" name="online_searchresults"/>  	<check_box label="只有我的朋友和群組知道我上線" name="online_visibility"/>  	<check_box label="只有我的朋友和群組可以 IM 或與我通話。" name="voice_call_friends_only_check"/>  	<check_box label="當通話結束時關閉麥克風" name="auto_disengage_mic_check"/> | 
