diff options
| -rw-r--r-- | .hgtags | 8 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llfloatersnapshot.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/lltoast.cpp | 146 | ||||
| -rw-r--r-- | indra/newview/lltoast.h | 8 | 
5 files changed, 111 insertions, 74 deletions
@@ -229,6 +229,14 @@ c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start  a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release  a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release  3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start +a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release +fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release +a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release +fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release  3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1  3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1  8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start +fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release +fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release +bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release +bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b45f9c55fb..0861fe85a8 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -75,6 +75,7 @@  //#include "llfirstuse.h"  #include "llrender.h"  #include "llteleporthistory.h" +#include "lltoast.h"  #include "lllocationhistory.h"  #include "llfasttimerview.h"  #include "llvector4a.h" @@ -4051,6 +4052,7 @@ void LLAppViewer::idle()  	LLFrameTimer::updateFrameTime();  	LLFrameTimer::updateFrameCount();  	LLEventTimer::updateClass(); +	LLNotificationsUI::LLToast::updateClass();  	LLCriticalDamp::updateInterpolants();  	LLMortician::updateClass();  	LLFilePickerThread::clearDead();  //calls LLFilePickerThread::notify() diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 1b3290d5a8..cc7a1b2368 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -333,8 +333,7 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail  	{  		S32 old_image_index = mCurImageIndex;  		mCurImageIndex = (mCurImageIndex + 1) % 2;  -		setWidth(mWidth[old_image_index]); -		setHeight(mHeight[old_image_index]); +		setSize(mWidth[old_image_index], mHeight[old_image_index]);  		mFallAnimTimer.start();		  	}  	mSnapshotUpToDate = FALSE; 		 @@ -833,7 +832,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  				previewp->mPreviewImage->getHeight(),  				previewp->mPreviewImage->getComponents()); -			scaled->biasedScaleToPowerOfTwo(512); +			scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);  			previewp->setImageScaled(TRUE);  			if (formatted->encode(scaled, 0.f))  			{ @@ -960,7 +959,7 @@ void LLSnapshotLivePreview::saveTexture()  												  mPreviewImage->getHeight(),  												  mPreviewImage->getComponents()); -	scaled->biasedScaleToPowerOfTwo(512); +	scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);  	lldebugs << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << llendl;  	if (formatted->encode(scaled, 0.0f)) @@ -1447,7 +1446,6 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  	if (previewp)  	{ -		lldebugs << "Setting snapshot type (" << shot_type << "), format (" << shot_format << ")" << llendl;  		previewp->setSnapshotType(shot_type);  		previewp->setSnapshotFormat(shot_format);  		previewp->setSnapshotBufferType(layer_type); @@ -1460,6 +1458,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  		info["have-snapshot"] = got_snap;  		current_panel->updateControls(info);  	} +	lldebugs << "finished updating controls" << llendl;  }  // static @@ -1696,6 +1695,7 @@ void LLFloaterSnapshot::Impl::setFinished(LLFloaterSnapshot* floater, bool finis  	}  } +// Apply a new resolution selected from the given combobox.  // static  void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update)  { @@ -1738,6 +1738,13 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  				lldebugs << "Loading typed res from panel " << spanel->getName() << llendl;  				new_width = spanel->getTypedPreviewWidth();  				new_height = spanel->getTypedPreviewHeight(); + +				// Limit custom size for inventory snapshots to 512x512 px. +				if (getActiveSnapshotType(view) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE) +				{ +					new_width = llmin(new_width, MAX_TEXTURE_SIZE); +					new_height = llmin(new_height, MAX_TEXTURE_SIZE); +				}  			}  			else  			{ @@ -1864,11 +1871,11 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3  		//change another value proportionally  		if(isWidthChanged)  		{ -			height = (S32)(width / aspect_ratio) ; +			height = llround(width / aspect_ratio) ;  		}  		else  		{ -			width = (S32)(height * aspect_ratio) ; +			width = llround(height * aspect_ratio) ;  		}  		//bound w/h by the max_value diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index c4b226b70b..da691a2d0c 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -140,7 +140,9 @@ LLToast::LLToast(const LLToast::Params& p)  	// init callbacks if present  	if(!p.on_delete_toast().empty()) +	{  		mOnDeleteToastSignal.connect(p.on_delete_toast()); +	}  }  void LLToast::reshape(S32 width, S32 height, BOOL called_from_parent) @@ -236,7 +238,9 @@ void LLToast::setCanFade(bool can_fade)  {   	mCanFade = can_fade;   	if(!mCanFade) +	{  		mTimer->stop(); +	}  }  //-------------------------------------------------------------------------- @@ -328,55 +332,6 @@ void LLToast::draw()  			drawChild(mHideBtn);  		}  	} - -	updateHoveredState(); - -	LLToastLifeTimer* timer = getTimer(); -	if (!timer) -	{ -		return; -	} - -	// Started timer means the mouse had left the toast previously. -	// If toast is hovered in the current frame we should handle -	// a mouse enter event. -	if(timer->getStarted() && mIsHovered) -	{ -		mOnToastHoverSignal(this, MOUSE_ENTER); - -		updateTransparency(); - -		//toasts fading is management by Screen Channel - -		sendChildToFront(mHideBtn); -		if(mHideBtn && mHideBtn->getEnabled()) -		{ -			mHideBtn->setVisible(TRUE); -		} -		mToastMouseEnterSignal(this, getValue()); -	} -	// Stopped timer means the mouse had entered the toast previously. -	// If the toast is not hovered in the current frame we should handle -	// a mouse leave event. -	else if(!timer->getStarted() && !mIsHovered) -	{ -		mOnToastHoverSignal(this, MOUSE_LEAVE); - -		updateTransparency(); - -		//toasts fading is management by Screen Channel - -		if(mHideBtn && mHideBtn->getEnabled()) -		{ -			if( mHideBtnPressed ) -			{ -				mHideBtnPressed = false; -				return; -			} -			mHideBtn->setVisible(FALSE); -		} -		mToastMouseLeaveSignal(this, getValue()); -	}  }  //-------------------------------------------------------------------------- @@ -440,28 +395,80 @@ void LLToast::updateHoveredState()  	{  		// mouse is not over this toast  		mIsHovered = false; -		return;  	} +	else +	{ +		bool is_overlapped_by_other_floater = false; -	bool is_overlapped_by_other_floater = false; - -	const child_list_t* child_list = gFloaterView->getChildList(); +		const child_list_t* child_list = gFloaterView->getChildList(); -	// find this toast in gFloaterView child list to check whether any floater -	// with higher Z-order is visible under the mouse pointer overlapping this toast -	child_list_const_reverse_iter_t r_iter = std::find(child_list->rbegin(), child_list->rend(), this); -	if (r_iter != child_list->rend()) -	{ -		// skip this toast and proceed to views above in Z-order -		for (++r_iter; r_iter != child_list->rend(); ++r_iter) +		// find this toast in gFloaterView child list to check whether any floater +		// with higher Z-order is visible under the mouse pointer overlapping this toast +		child_list_const_reverse_iter_t r_iter = std::find(child_list->rbegin(), child_list->rend(), this); +		if (r_iter != child_list->rend())  		{ -			LLView* view = *r_iter; -			is_overlapped_by_other_floater = view->isInVisibleChain() && view->calcScreenRect().pointInRect(x, y); -			if (is_overlapped_by_other_floater) break; +			// skip this toast and proceed to views above in Z-order +			for (++r_iter; r_iter != child_list->rend(); ++r_iter) +			{ +				LLView* view = *r_iter; +				is_overlapped_by_other_floater = view->isInVisibleChain() && view->calcScreenRect().pointInRect(x, y); +				if (is_overlapped_by_other_floater) +				{ +					break; +				} +			}  		} + +		mIsHovered = !is_overlapped_by_other_floater;  	} -	mIsHovered = !is_overlapped_by_other_floater; +	LLToastLifeTimer* timer = getTimer(); +	 +	if (timer) +	{	 +		// Started timer means the mouse had left the toast previously. +		// If toast is hovered in the current frame we should handle +		// a mouse enter event. +		if(timer->getStarted() && mIsHovered) +		{ +			mOnToastHoverSignal(this, MOUSE_ENTER); +			 +			updateTransparency(); +			 +			//toasts fading is management by Screen Channel +			 +			sendChildToFront(mHideBtn); +			if(mHideBtn && mHideBtn->getEnabled()) +			{ +				mHideBtn->setVisible(TRUE); +			} +			 +			mToastMouseEnterSignal(this, getValue()); +		} +		// Stopped timer means the mouse had entered the toast previously. +		// If the toast is not hovered in the current frame we should handle +		// a mouse leave event. +		else if(!timer->getStarted() && !mIsHovered) +		{ +			mOnToastHoverSignal(this, MOUSE_LEAVE); +			 +			updateTransparency(); +			 +			//toasts fading is management by Screen Channel +			 +			if(mHideBtn && mHideBtn->getEnabled()) +			{ +				if( mHideBtnPressed ) +				{ +					mHideBtnPressed = false; +					return; +				} +				mHideBtn->setVisible(FALSE); +			} +			 +			mToastMouseLeaveSignal(this, getValue()); +		} +	}  }  void LLToast::setBackgroundOpaque(BOOL b) @@ -553,3 +560,14 @@ S32	LLToast::notifyParent(const LLSD& info)  	return LLModalDialog::notifyParent(info);  } + +//static +void LLToast::updateClass() +{ +	for (LLInstanceTracker<LLToast>::instance_iter iter = LLInstanceTracker<LLToast>::beginInstances(); iter != LLInstanceTracker<LLToast>::endInstances(); )  +	{ +		LLToast& toast = *iter++; +		 +		toast.updateHoveredState(); +	} +} diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 77229e7beb..0b06728935 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -27,7 +27,7 @@  #ifndef LL_LLTOAST_H  #define LL_LLTOAST_H - +#include "llinstancetracker.h"  #include "llpanel.h"  #include "llmodaldialog.h"  #include "lleventtimer.h" @@ -69,7 +69,7 @@ private :   * Represents toast pop-up.   * This is a parent view for all toast panels.   */ -class LLToast : public LLModalDialog +class LLToast : public LLModalDialog, public LLInstanceTracker<LLToast>  {  	friend class LLToastLifeTimer;  public: @@ -102,6 +102,8 @@ public:  		Params();  	}; +	 +	static void updateClass();  	LLToast(const LLToast::Params& p);  	virtual ~LLToast(); @@ -221,7 +223,7 @@ private:  	F32			mToastLifetime; // in seconds  	F32			mToastFadingTime; // in seconds - +	  	LLPanel*		mPanel;  	LLButton*		mHideBtn;  | 
