diff options
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/newview/app_settings/settings.xml | 44 | ||||
| -rw-r--r-- | indra/newview/llfloatersnapshot.cpp | 459 | 
2 files changed, 128 insertions, 375 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9c055bdc5a..0ad78cc8d2 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -10586,39 +10586,6 @@        <key>Value</key>        <integer>0</integer>      </map>   -    <key>SnapshotLocalLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next local snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map> -    <key>SnapshotProfileLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next profile snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map> -    <key>SnapshotPostcardLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next postcard snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>SnapshotQuality</key>      <map>        <key>Comment</key> @@ -10652,17 +10619,6 @@        <key>Value</key>        <string>http://photos.apps.staging.avatarsunited.com/viewer_config</string>      </map> -    <key>SnapshotTextureLastResolution</key> -    <map> -      <key>Comment</key> -      <string>Take next texture snapshot at this resolution</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>SpeedTest</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 80fc5fcdfc..13f544e784 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -100,9 +100,6 @@ S32 BORDER_WIDTH = 6;  const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 -static std::string lastSnapshotWidthName(S32 shot_type); -static std::string lastSnapshotHeightName(S32 shot_type); -  static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view");  ///---------------------------------------------------------------------------- @@ -138,7 +135,11 @@ public:  	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);  	void setSize(S32 w, S32 h); +	void setWidth(S32 w) { mWidth[mCurImageIndex] = w; } +	void setHeight(S32 h) { mHeight[mCurImageIndex] = h; }  	void getSize(S32& w, S32& h) const; +	S32 getWidth() const { return mWidth[mCurImageIndex]; } +	S32 getHeight() const { return mHeight[mCurImageIndex]; }  	S32 getDataSize() const { return mDataSize; }  	void setMaxImageSize(S32 size) ;  	S32  getMaxImageSize() {return mMaxImageSize ;} @@ -155,8 +156,9 @@ public:  	LLViewerTexture* getCurrentImage();  	F32 getImageAspect();  	F32 getAspect() ; -	LLRect getImageRect(); -	BOOL isImageScaled(); +	const LLRect& getImageRect() const { return mImageRect[mCurImageIndex]; } +	BOOL isImageScaled() const { return mImageScaled[mCurImageIndex]; } +	void setImageScaled(BOOL scaled) { mImageScaled[mCurImageIndex] = scaled; }  	const LLVector3d& getPosTakenGlobal() const { return mPosTakenGlobal; }  	void setSnapshotType(ESnapshotType type) { mSnapshotType = type; } @@ -171,6 +173,7 @@ public:  	LLPointer<LLImageFormatted>	getFormattedImage() const { return mFormattedImage; }  	LLPointer<LLImageRaw>		getEncodedImage() const { return mPreviewImageEncoded; } +	/// Sets size of preview thumbnail image and thhe surrounding rect.  	BOOL setThumbnailImageSize() ;  	void generateThumbnailImage(BOOL force_update = FALSE) ;  	void resetThumbnailImage() { mThumbnailImage = NULL ; } @@ -299,7 +302,7 @@ LLViewerTexture* LLSnapshotLivePreview::getCurrentImage()  F32 LLSnapshotLivePreview::getAspect()  { -	F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]); +	F32 image_aspect_ratio = ((F32)getWidth()) / ((F32)getHeight());  	F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight());  	if (!mKeepAspectRatio)//gSavedSettings.getBOOL("KeepAspectForSnapshot")) @@ -314,7 +317,7 @@ F32 LLSnapshotLivePreview::getAspect()  F32 LLSnapshotLivePreview::getImageAspect()  { -	if (!mViewerImage[mCurImageIndex]) +	if (!getCurrentImage())  	{  		return 0.f;  	} @@ -322,33 +325,25 @@ F32 LLSnapshotLivePreview::getImageAspect()  	return getAspect() ;	  } -LLRect LLSnapshotLivePreview::getImageRect() -{ -	return mImageRect[mCurImageIndex]; -} - -BOOL LLSnapshotLivePreview::isImageScaled() -{ -	return mImageScaled[mCurImageIndex]; -} -  void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail, F32 delay)   { -	lldebugs << "updateSnapshot: mSnapshotUpToDate = " << mSnapshotUpToDate << llendl; -	if (mSnapshotUpToDate) +	// Invalidate current image. +	lldebugs << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << llendl; +	if (getSnapshotUpToDate())  	{  		S32 old_image_index = mCurImageIndex;  		mCurImageIndex = (mCurImageIndex + 1) % 2;  -		mWidth[mCurImageIndex] = mWidth[old_image_index]; -		mHeight[mCurImageIndex] = mHeight[old_image_index]; +		setWidth(mWidth[old_image_index]); +		setHeight(mHeight[old_image_index]);  		mFallAnimTimer.start();		  	}  	mSnapshotUpToDate = FALSE; 		 +	// Update snapshot source rect depending on whether we keep the aspect ratio.  	LLRect& rect = mImageRect[mCurImageIndex];  	rect.set(0, getRect().getHeight(), getRect().getWidth(), 0); -	F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]); +	F32 image_aspect_ratio = ((F32)getWidth()) / ((F32)getHeight());  	F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight());  	if (mKeepAspectRatio)//gSavedSettings.getBOOL("KeepAspectForSnapshot")) @@ -369,13 +364,18 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail  		}  	} +	// Stop shining animation.  	mShineAnimTimer.stop(); + +	// Update snapshot if requested.  	if (new_snapshot)  	{  		mSnapshotDelayTimer.start();  		mSnapshotDelayTimer.setTimerExpirySec(delay);  		LLFloaterSnapshot::preUpdate();  	} + +	// Update thumbnail if requested.  	if(new_thumbnail)  	{  		mThumbnailUpToDate = FALSE ; @@ -435,23 +435,23 @@ void LLSnapshotLivePreview::drawPreviewRect(S32 offset_x, S32 offset_y)  //called when the frame is frozen.  void LLSnapshotLivePreview::draw()  { -	if (mViewerImage[mCurImageIndex].notNull() && +	if (getCurrentImage() &&  	    mPreviewImageEncoded.notNull() && -	    mSnapshotUpToDate) +	    getSnapshotUpToDate())  	{  		LLColor4 bg_color(0.f, 0.f, 0.3f, 0.4f);  		gl_rect_2d(getRect(), bg_color); -		LLRect &rect = mImageRect[mCurImageIndex]; -		LLRect shadow_rect = mImageRect[mCurImageIndex]; +		const LLRect& rect = getImageRect(); +		LLRect shadow_rect = rect;  		shadow_rect.stretch(BORDER_WIDTH);  		gl_drop_shadow(shadow_rect.mLeft, shadow_rect.mTop, shadow_rect.mRight, shadow_rect.mBottom, LLColor4(0.f, 0.f, 0.f, mNeedsFlash ? 0.f :0.5f), 10);  		LLColor4 image_color(1.f, 1.f, 1.f, 1.f);  		gGL.color4fv(image_color.mV); -		gGL.getTexUnit(0)->bind(mViewerImage[mCurImageIndex]); +		gGL.getTexUnit(0)->bind(getCurrentImage());  		// calculate UV scale -		F32 uv_width = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mWidth[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getWidth(), 1.f); -		F32 uv_height = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mHeight[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getHeight(), 1.f); +		F32 uv_width = isImageScaled() ? 1.f : llmin((F32)getWidth() / (F32)getCurrentImage()->getWidth(), 1.f); +		F32 uv_height = isImageScaled() ? 1.f : llmin((F32)getHeight() / (F32)getCurrentImage()->getHeight(), 1.f);  		glPushMatrix();  		{  			glTranslatef((F32)rect.mLeft, (F32)rect.mBottom, 0.f); @@ -491,6 +491,7 @@ void LLSnapshotLivePreview::draw()  			mFlashAlpha = lerp(mFlashAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f));  		} +		// Draw shining animation if appropriate.  		if (mShineCountdown > 0)  		{  			mShineCountdown--; @@ -501,6 +502,7 @@ void LLSnapshotLivePreview::draw()  		}  		else if (mShineAnimTimer.getStarted())  		{ +			lldebugs << "Drawing shining animation" << llendl;  			F32 shine_interp = llmin(1.f, mShineAnimTimer.getElapsedTimeF32() / SHINE_TIME);  			// draw "shine" effect @@ -545,7 +547,7 @@ void LLSnapshotLivePreview::draw()  	{  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  		gGL.color4f(1.f, 1.f, 1.f, 1.f); -		LLRect outline_rect = mImageRect[mCurImageIndex]; +		const LLRect& outline_rect = getImageRect();  		gGL.begin(LLRender::QUADS);  		{  			gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH); @@ -577,6 +579,7 @@ void LLSnapshotLivePreview::draw()  		S32 old_image_index = (mCurImageIndex + 1) % 2;  		if (mViewerImage[old_image_index].notNull() && mFallAnimTimer.getElapsedTimeF32() < FALL_TIME)  		{ +			lldebugs << "Drawing fall animation" << llendl;  			F32 fall_interp = mFallAnimTimer.getElapsedTimeF32() / FALL_TIME;  			F32 alpha = clamp_rescale(fall_interp, 0.f, 1.f, 0.8f, 0.4f);  			LLColor4 image_color(1.f, 1.f, 1.f, alpha); @@ -620,13 +623,14 @@ void LLSnapshotLivePreview::reshape(S32 width, S32 height, BOOL called_from_pare  	LLView::reshape(width, height, called_from_parent);  	if (old_rect.getWidth() != width || old_rect.getHeight() != height)  	{ +		lldebugs << "window reshaped, updating thumbnail" << llendl;  		updateSnapshot(FALSE, TRUE);  	}  }  BOOL LLSnapshotLivePreview::setThumbnailImageSize()  { -	if(mWidth[mCurImageIndex] < 10 || mHeight[mCurImageIndex] < 10) +	if(getWidth() < 10 || getHeight() < 10)  	{  		return FALSE ;  	} @@ -662,11 +666,11 @@ BOOL LLSnapshotLivePreview::setThumbnailImageSize()  	S32 left = 0 , top = mThumbnailHeight, right = mThumbnailWidth, bottom = 0 ;  	if(!mKeepAspectRatio)  	{ -		F32 ratio_x = (F32)mWidth[mCurImageIndex] / window_width ; -		F32 ratio_y = (F32)mHeight[mCurImageIndex] / window_height ; +		F32 ratio_x = (F32)getWidth() / window_width ; +		F32 ratio_y = (F32)getHeight() / window_height ; -		//if(mWidth[mCurImageIndex] > window_width || -		//	mHeight[mCurImageIndex] > window_height ) +		//if(getWidth() > window_width || +		//	getHeight() > window_height )  		{  			if(ratio_x > ratio_y)  			{ @@ -698,11 +702,11 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)  	{  		return ;  	} -	if(mThumbnailUpToDate && !force_update)//already updated +	if(getThumbnailUpToDate() && !force_update)//already updated  	{  		return ;  	} -	if(mWidth[mCurImageIndex] < 10 || mHeight[mCurImageIndex] < 10) +	if(getWidth() < 10 || getHeight() < 10)  	{  		return ;  	} @@ -750,15 +754,13 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)  BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  {  	LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)snapshot_preview; - -#if 1 // XXX tmp -	if (previewp->mWidth[previewp->mCurImageIndex] == 0 || previewp->mHeight[previewp->mCurImageIndex] == 0) +	if (previewp->getWidth() == 0 || previewp->getHeight() == 0)  	{ -		llwarns << "Incorrect dimensions: " << previewp->mWidth[previewp->mCurImageIndex] << "x" << previewp->mHeight[previewp->mCurImageIndex] << llendl; +		llwarns << "Incorrect dimensions: " << previewp->getWidth() << "x" << previewp->getHeight() << llendl;  		return FALSE;  	} -#endif +	// If we're in freeze-frame mode and camera has moved, update snapshot.  	LLVector3 new_camera_pos = LLViewerCamera::getInstance()->getOrigin();  	LLQuaternion new_camera_rot = LLViewerCamera::getInstance()->getQuaternion();  	if (gSavedSettings.getBOOL("FreezeTime") &&  @@ -768,6 +770,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  		previewp->mCameraRot = new_camera_rot;  		// request a new snapshot whenever the camera moves, with a time delay  		BOOL autosnap = gSavedSettings.getBOOL("AutoSnapshot"); +		lldebugs << "camera moved, updating thumbnail" << llendl;  		previewp->updateSnapshot(  			autosnap, // whether a new snapshot is needed or merely invalidate the existing one  			FALSE, // or if 1st arg is false, whether to produce a new thumbnail image. @@ -801,13 +804,13 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  	previewp->setEnabled(FALSE);  	previewp->getWindow()->incBusyCount(); -	previewp->mImageScaled[previewp->mCurImageIndex] = FALSE; +	previewp->setImageScaled(FALSE);  	// grab the raw image and encode it into desired format  	if(gViewerWindow->rawSnapshot(  							previewp->mPreviewImage, -							previewp->mWidth[previewp->mCurImageIndex], -							previewp->mHeight[previewp->mCurImageIndex], +							previewp->getWidth(), +							previewp->getHeight(),  							previewp->mKeepAspectRatio,//gSavedSettings.getBOOL("KeepAspectForSnapshot"),  							previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_TEXTURE,  							gSavedSettings.getBOOL("RenderUIInSnapshot"), @@ -831,7 +834,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  				previewp->mPreviewImage->getComponents());  			scaled->biasedScaleToPowerOfTwo(512); -			previewp->mImageScaled[previewp->mCurImageIndex] = TRUE; +			previewp->setImageScaled(TRUE);  			if (formatted->encode(scaled, 0.f))  			{  				previewp->mDataSize = formatted->getDataSize(); @@ -886,7 +889,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  			{  				// go ahead and shrink image to appropriate power of 2 for display  				scaled->biasedScaleToPowerOfTwo(1024); -				previewp->mImageScaled[previewp->mCurImageIndex] = TRUE; +				previewp->setImageScaled(TRUE);  			}  			else  			{ @@ -933,14 +936,14 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  void LLSnapshotLivePreview::setSize(S32 w, S32 h)  {  	lldebugs << "setSize(" << w << ", " << h << ")" << llendl; -	mWidth[mCurImageIndex] = w; -	mHeight[mCurImageIndex] = h; +	setWidth(w); +	setHeight(h);  }  void LLSnapshotLivePreview::getSize(S32& w, S32& h) const  { -	w = mWidth[mCurImageIndex]; -	h = mHeight[mCurImageIndex]; +	w = getWidth(); +	h = getHeight();  }  void LLSnapshotLivePreview::saveTexture() @@ -959,7 +962,7 @@ void LLSnapshotLivePreview::saveTexture()  	scaled->biasedScaleToPowerOfTwo(512);  	lldebugs << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << llendl; -			 +  	if (formatted->encode(scaled, 0.0f))  	{  		LLVFile::writeFile(formatted->getData(), formatted->getDataSize(), gVFS, new_asset_id, LLAssetType::AT_TEXTURE); @@ -1068,24 +1071,18 @@ public:  	static void onClickMore(void* data) ;  	static void onClickUICheck(LLUICtrl *ctrl, void* data);  	static void onClickHUDCheck(LLUICtrl *ctrl, void* data); -#if 0 -	static void onClickKeepAspectCheck(LLUICtrl *ctrl, void* data); -#endif  	static void applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked);  	static void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE);  	static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);  	static void onCommitLayerTypes(LLUICtrl* ctrl, void*data);  	static void onImageQualityChange(LLFloaterSnapshot* view, S32 quality_val);  	static void onImageFormatChange(LLFloaterSnapshot* view); -#if 0 -	static void onCommitSnapshotType(LLUICtrl* ctrl, void* data); -	static void onCommitCustomResolution(LLUICtrl *ctrl, void* data); -#endif  	static void applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h);  	static void onSnapshotUploadFinished(bool status);  	static void onSendingPostcardFinished(bool status); -	static void resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ;  	static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); +	static void setImageSizeSpinnersValues(LLFloaterSnapshot *view, S32 width, S32 height) ; +	static void updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed);  	static LLPanelSnapshot* getActivePanel(LLFloaterSnapshot* floater, bool ok_if_not_found = true);  	static LLSnapshotLivePreview::ESnapshotType getActiveSnapshotType(LLFloaterSnapshot* floater); @@ -1256,16 +1253,9 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)  		previewp->mKeepAspectRatio = TRUE;  		floaterp->getChild<LLComboBox>("profile_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotProfileLastResolution", 0); -  		floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotPostcardLastResolution", 0); -  		floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotTextureLastResolution", 0); -  		floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0); -		gSavedSettings.setS32("SnapshotLocalLastResolution", 0);  		LLSnapshotLivePreview* previewp = getPreviewView(floaterp);  		previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); @@ -1349,19 +1339,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  	floater->getChildView("share_to_web")->setVisible( gSavedSettings.getBOOL("SnapshotSharingEnabled"));  #endif -#if 0 -	floater->getChildView("postcard_size_combo")->setVisible( FALSE); -	floater->getChildView("texture_size_combo")->setVisible( FALSE); -	floater->getChildView("local_size_combo")->setVisible( FALSE); -#endif - -	floater->getChild<LLComboBox>("profile_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotProfileLastResolution")); -	floater->getChild<LLComboBox>("postcard_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution")); -	floater->getChild<LLComboBox>("texture_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution")); -	floater->getChild<LLComboBox>("local_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));  	floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat")); - -	// *TODO: Separate settings for Web images from postcards  	enableAspectRatioCheckbox(floater, !floater->impl.mAspectRatioCheckOff);  	setAspectRatioCheckboxValue(floater, gSavedSettings.getBOOL("KeepAspectForSnapshot"));  	floater->getChildView("layer_types")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL); @@ -1375,19 +1353,20 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  		// Initialize spinners.  		if (width_ctrl->getValue().asInteger() == 0)  		{ -			S32 w = gSavedSettings.getS32(lastSnapshotWidthName(shot_type)); +			S32 w = gViewerWindow->getWindowWidthRaw();  			lldebugs << "Initializing width spinner (" << width_ctrl->getName() << "): " << w << llendl;  			width_ctrl->setValue(w);  		}  		if (height_ctrl->getValue().asInteger() == 0)  		{ -			S32 h = gSavedSettings.getS32(lastSnapshotHeightName(shot_type)); +			S32 h = gViewerWindow->getWindowHeightRaw();  			lldebugs << "Initializing height spinner (" << height_ctrl->getName() << "): " << h << llendl;  			height_ctrl->setValue(h);  		} +		// Сlamp snapshot resolution to window size when showing UI or HUD in snapshot.  		if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) -		{ //clamp snapshot resolution to window size when showing UI or HUD in snapshot +		{  			S32 width = gViewerWindow->getWindowWidthRaw();  			S32 height = gViewerWindow->getWindowHeightRaw(); @@ -1441,6 +1420,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  		&& got_bytes  		&& previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" )); +	// Update the width and height spinners based on the corresponding resolution combos. (?)  	switch(shot_type)  	{  	  case LLSnapshotLivePreview::SNAPSHOT_WEB: @@ -1520,6 +1500,7 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp,  	if (previewp)  	{  		BOOL autosnap = gSavedSettings.getBOOL("AutoSnapshot"); +		lldebugs << "updating " << (autosnap ? "snapshot" : "thumbnail") << llendl;  		previewp->updateSnapshot(autosnap, update_thumbnail, autosnap ? AUTO_SNAPSHOT_TIME_DELAY : 0.f);  	}  } @@ -1532,6 +1513,7 @@ void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)  	if (previewp && view)  	{  		view->impl.setStatus(Impl::STATUS_READY); +		lldebugs << "updating snapshot" << llendl;  		previewp->updateSnapshot(TRUE);  	}  } @@ -1559,17 +1541,8 @@ void LLFloaterSnapshot::Impl::onClickMore(void* data)  	{  		view->impl.setStatus(Impl::STATUS_READY);  		gSavedSettings.setBOOL("AdvanceSnapshot", !visible); -#if 0 -		view->translate( 0, view->getUIWinHeightShort() - view->getUIWinHeightLong() ); -		view->reshape(view->getRect().getWidth(), view->getUIWinHeightLong()); -#endif  		updateControls(view) ;  		updateLayout(view) ; -		// *TODO: redundant? -		if(getPreviewView(view)) -		{ -			getPreviewView(view)->setThumbnailImageSize() ; -		}  	}  } @@ -1601,16 +1574,6 @@ void LLFloaterSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data)  	}  } -#if 0 -// static -void LLFloaterSnapshot::Impl::onClickKeepAspectCheck(LLUICtrl* ctrl, void* data) -{ -	LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl; -	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; -	applyKeepAspectCheck(view, check->get()); -} -#endif -  // static  void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked)  { @@ -1625,11 +1588,9 @@ void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL  			S32 w, h ;  			previewp->getSize(w, h) ; -			if(checkImageSize(previewp, w, h, TRUE, previewp->getMaxImageSize())) -			{ -				resetSnapshotSizeOnUI(view, w, h) ; -			} +			updateSpinners(view, previewp, w, h, TRUE); // may change w and h +			lldebugs << "updating thumbnail" << llendl;  			previewp->setSize(w, h) ;  			previewp->updateSnapshot(FALSE, TRUE);  			checkAutoSnapshot(previewp, TRUE); @@ -1664,39 +1625,31 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde  		previewp->mKeepAspectRatio = FALSE ;  		return ;  	} -	 -	if(0 == index) //current window size -	{ -		view->impl.mAspectRatioCheckOff = true ; -		enableAspectRatioCheckbox(view, FALSE); -		if(previewp) -		{ -			previewp->mKeepAspectRatio = TRUE ; -		} +	BOOL keep_aspect = FALSE, enable_cb = FALSE; + +	if (0 == index) // current window size +	{ +		enable_cb = FALSE; +		keep_aspect = TRUE;  	} -	else if(-1 == index) //custom +	else if (-1 == index) // custom  	{ -		view->impl.mAspectRatioCheckOff = false ; -		enableAspectRatioCheckbox(view, TRUE); - -		if(previewp) -		{ -			previewp->mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ; -		} +		enable_cb = TRUE; +		keep_aspect = gSavedSettings.getBOOL("KeepAspectForSnapshot");  	} -	else +	else // predefined resolution  	{ -		view->impl.mAspectRatioCheckOff = true ; -		enableAspectRatioCheckbox(view, FALSE); - -		if(previewp) -		{ -			previewp->mKeepAspectRatio = FALSE ; -		} +		enable_cb = FALSE; +		keep_aspect = FALSE;  	} -	return ; +	view->impl.mAspectRatioCheckOff = !enable_cb; +	enableAspectRatioCheckbox(view, enable_cb); +	if (previewp) +	{ +		previewp->mKeepAspectRatio = keep_aspect; +	}  }  // Show/hide upload progress indicators. @@ -1743,27 +1696,6 @@ void LLFloaterSnapshot::Impl::setFinished(LLFloaterSnapshot* floater, bool finis  	}  } -static std::string lastSnapshotWidthName(S32 shot_type) -{ -	switch (shot_type) -	{ -	  case LLSnapshotLivePreview::SNAPSHOT_WEB:		 return "LastSnapshotToProfileWidth"; -	  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailWidth"; -	  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryWidth"; -	  default:                                       return "LastSnapshotToDiskWidth"; -	} -} -static std::string lastSnapshotHeightName(S32 shot_type) -{ -	switch (shot_type) -	{ -	  case LLSnapshotLivePreview::SNAPSHOT_WEB:	     return "LastSnapshotToProfileHeight"; -	  case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailHeight"; -	  case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:  return "LastSnapshotToInventoryHeight"; -	  default:                                       return "LastSnapshotToDiskHeight"; -	} -} -  // static  void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update)  { @@ -1776,12 +1708,6 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  		return;  	} -	// save off all selected resolution values -	gSavedSettings.setS32("SnapshotProfileLastResolution",  view->getChild<LLComboBox>("profile_size_combo")->getCurrentIndex()); -	gSavedSettings.setS32("SnapshotPostcardLastResolution", view->getChild<LLComboBox>("postcard_size_combo")->getCurrentIndex()); -	gSavedSettings.setS32("SnapshotTextureLastResolution",  view->getChild<LLComboBox>("texture_size_combo")->getCurrentIndex()); -	gSavedSettings.setS32("SnapshotLocalLastResolution",    view->getChild<LLComboBox>("local_size_combo")->getCurrentIndex()); -  	std::string sdstring = combobox->getSelectedValue();  	LLSD sdres;  	std::stringstream sstream(sdstring); @@ -1805,7 +1731,6 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  		else if (width == -1 || height == -1)  		{  			// load last custom value -#if 1  			S32 new_width = 0, new_height = 0;  			LLPanelSnapshot* spanel = getActivePanel(view);  			if (spanel) @@ -1816,23 +1741,14 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  			}  			else  			{ -				const S32 shot_type = getActiveSnapshotType(view); -				lldebugs << "Loading saved res for shot_type " << shot_type << llendl; -				new_width = gSavedSettings.getS32(lastSnapshotWidthName(shot_type)); -				new_height = gSavedSettings.getS32(lastSnapshotHeightName(shot_type)); +				lldebugs << "No custom res chosen, setting preview res from window: " +					<< gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; +				new_width = gViewerWindow->getWindowWidthRaw(); +				new_height = gViewerWindow->getWindowHeightRaw();  			}  			llassert(new_width > 0 && new_height > 0);  			previewp->setSize(new_width, new_height); -#else -			LLPanelSnapshot* spanel = getActivePanel(view); -			if (spanel) -			{ -				lldebugs << "Setting custom preview res : " << spanel->getTypedPreviewWidth() << "x" << spanel->getTypedPreviewHeight() << llendl; -				previewp->setSize(spanel->getTypedPreviewWidth(), spanel->getTypedPreviewHeight()); -			} -			//previewp->setSize(gSavedSettings.getS32(lastSnapshotWidthName()), gSavedSettings.getS32(lastSnapshotHeightName())); -#endif  		}  		else  		{ @@ -1851,11 +1767,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  			height = llmin(height, gViewerWindow->getWindowHeightRaw());  		} -		 -		if(checkImageSize(previewp, width, height, TRUE, previewp->getMaxImageSize())) -		{ -			resetSnapshotSizeOnUI(view, width, height) ; -		} +		updateSpinners(view, previewp, width, height, TRUE); // may change width and height  		if(getWidthSpinner(view)->getValue().asInteger() != width || getHeightSpinner(view)->getValue().asInteger() != height)  		{ @@ -1869,6 +1781,7 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  			// hide old preview as the aspect ratio could be wrong  			checkAutoSnapshot(previewp, FALSE); +			lldebugs << "updating thumbnail" << llendl;  			getPreviewView(view)->updateSnapshot(FALSE, TRUE);  			if(do_update)  			{ @@ -1915,93 +1828,29 @@ void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshot* view)  	if (view)  	{  		gSavedSettings.setS32("SnapshotFormat", getImageFormat(view)); +		lldebugs << "image format changed, updating snapshot" << llendl;  		getPreviewView(view)->updateSnapshot(TRUE);  		updateControls(view);  		setNeedRefresh(view, false); // we're refreshing  	}  } -#if 0 -//static  -void LLFloaterSnapshot::Impl::onCommitSnapshotType(LLUICtrl* ctrl, void* data) -{ -	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;		 -	if (view) -	{ -		gSavedSettings.setS32("LastSnapshotType", getTypeIndex(view)); -		getPreviewView(view)->updateSnapshot(TRUE); -		updateControls(view); -	} -} -#endif -  // Sets the named size combo to "custom" mode.  // static  void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname)  {  	LLComboBox* combo = floater->getChild<LLComboBox>(comboname); -  	combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index - -	if(comboname == "postcard_size_combo")  -	{ -		gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex()); -	} -	else if(comboname == "profile_size_combo") -	{ -		gSavedSettings.setS32("SnapshotProfileLastResolution", combo->getCurrentIndex()); -	} -	else if(comboname == "texture_size_combo")  -	{ -		gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex()); -	} -	else if(comboname == "local_size_combo")  -	{ -		gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex()); -	} -  	checkAspectRatio(floater, -1); // -1 means custom  } - - +// Update supplied width and height according to the constrain proportions flag; limit them by max_val.  //static  BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value)  {  	S32 w = width ;  	S32 h = height ; -	//if texture, ignore aspect ratio setting, round image size to power of 2. -#if 0 // Don't round texture sizes; textures are commonly stretched in world, profiles, etc and need to be "squashed" during upload, not cropped here -	if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType")) -	{ -		if(width > max_value) -		{ -			width = max_value ; -		} -		if(height > max_value) -		{ -			height = max_value ; -		} - -		//round to nearest power of 2 based on the direction of movement -		// i.e. higher power of two if increasing texture resolution -		if(gSavedSettings.getS32("LastSnapshotToInventoryWidth") < width || -			gSavedSettings.getS32("LastSnapshotToInventoryHeight") < height) -		{ -			// Up arrow pressed -			width = get_next_power_two(width, MAX_TEXTURE_SIZE) ; -			height = get_next_power_two(height, MAX_TEXTURE_SIZE) ; -		} -		else -		{ -			// Down or no change -			width = get_lower_power_two(width, MAX_TEXTURE_SIZE) ; -			height = get_lower_power_two(height, MAX_TEXTURE_SIZE) ; -		} -	} -	else -#endif  	if(previewp && previewp->mKeepAspectRatio)  	{  		if(gViewerWindow->getWindowWidthRaw() < 1 || gViewerWindow->getWindowHeightRaw() < 1) @@ -2037,32 +1886,25 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3  			}  		}  	} -	else -	{ -	}  	return (w != width || h != height) ;  }  //static -void LLFloaterSnapshot::Impl::resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) +void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view, S32 width, S32 height)  {  	getWidthSpinner(view)->forceSetValue(width);  	getHeightSpinner(view)->forceSetValue(height); -	gSavedSettings.setS32(lastSnapshotWidthName(getActiveSnapshotType(view)), width); -	gSavedSettings.setS32(lastSnapshotHeightName(getActiveSnapshotType(view)), height);  } -#if 0 -//static -void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* data) +// static +void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed)  { -	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; -	S32 w = llfloor((F32)getWidthSpinner(view)->getValue().asReal()); -	S32 h = llfloor((F32)getHeightSpinner(view)->getValue().asReal()); -	applyCustomResolution(view, w, h); +	if (checkImageSize(previewp, width, height, is_width_changed, previewp->getMaxImageSize())) +	{ +		setImageSizeSpinnersValues(view, width, height); +	}  } -#endif  // static  void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h) @@ -2070,68 +1912,38 @@ void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32  	bool need_refresh = false;  	lldebugs << "applyCustomResolution(" << w << ", " << h << ")" << llendl; -	if (view) +	if (!view) return; + +	LLSnapshotLivePreview* previewp = getPreviewView(view); +	if (previewp)  	{ -		LLSnapshotLivePreview* previewp = getPreviewView(view); -		if (previewp) -		{ -			S32 curw,curh; -			previewp->getSize(curw, curh); -			 -			if (w != curw || h != curh) -			{ -				BOOL update_ = FALSE ; -				//if to upload a snapshot, process spinner input in a special way. -#if 0  // Don't round texture sizes; textures are commonly stretched in world, profiles, etc and need to be "squashed" during upload, not cropped here -				if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType")) -				{ -					S32 spinner_increment = (S32)((LLSpinCtrl*)ctrl)->getIncrement() ; -					S32 dw = w - curw ; -					S32 dh = h - curh ; -					dw = (dw == spinner_increment) ? 1 : ((dw == -spinner_increment) ? -1 : 0) ; -					dh = (dh == spinner_increment) ? 1 : ((dh == -spinner_increment) ? -1 : 0) ; - -					if(dw) -					{ -						w = (dw > 0) ? curw << dw : curw >> -dw ; -						update_ = TRUE ; -					} -					if(dh) -					{ -						h = (dh > 0) ? curh << dh : curh >> -dh ; -						update_ = TRUE ; -					} -				} -#endif -				previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ; -				 -				// Check image size changes the value of height and width -				if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize()) -					|| update_) -				{ -					resetSnapshotSizeOnUI(view, w, h) ; -				} +		S32 curw,curh; +		previewp->getSize(curw, curh); -				previewp->setSize(w,h); -				checkAutoSnapshot(previewp, FALSE); -				previewp->updateSnapshot(FALSE, TRUE); -				comboSetCustom(view, "profile_size_combo"); -				comboSetCustom(view, "postcard_size_combo"); -				comboSetCustom(view, "texture_size_combo"); -				comboSetCustom(view, "local_size_combo"); -				need_refresh = true; -			} -		} +		if (w != curw || h != curh) +		{ +			//if to upload a snapshot, process spinner input in a special way. +			previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ; -		gSavedSettings.setS32(lastSnapshotWidthName(getActiveSnapshotType(view)), w); -		gSavedSettings.setS32(lastSnapshotHeightName(getActiveSnapshotType(view)), h); +			updateSpinners(view, previewp, w, h, w != curw); // may change w and h -		updateControls(view); -		if (need_refresh) -		{ -			setNeedRefresh(view, true); // need to do this after updateControls() +			previewp->setSize(w,h); +			checkAutoSnapshot(previewp, FALSE); +			lldebugs << "applied custom resolution, updating thumbnail" << llendl; +			previewp->updateSnapshot(FALSE, TRUE); +			comboSetCustom(view, "profile_size_combo"); +			comboSetCustom(view, "postcard_size_combo"); +			comboSetCustom(view, "texture_size_combo"); +			comboSetCustom(view, "local_size_combo"); +			need_refresh = true;  		}  	} + +	updateControls(view); +	if (need_refresh) +	{ +		setNeedRefresh(view, true); // need to do this after updateControls() +	}  }  // static @@ -2187,10 +1999,6 @@ BOOL LLFloaterSnapshot::postBuild()  		LLWebSharing::instance().init();  	} -#if 0 -	childSetCommitCallback("snapshot_type_radio", Impl::onCommitSnapshotType, this); -#endif -	  	mRefreshBtn = getChild<LLUICtrl>("new_snapshot_btn");  	childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this);  	mRefreshLabel = getChild<LLUICtrl>("refresh_lbl"); @@ -2199,31 +2007,18 @@ BOOL LLFloaterSnapshot::postBuild()  	childSetAction("advanced_options_btn", Impl::onClickMore, this); -#if 0 -	childSetCommitCallback("snapshot_width", Impl::onCommitCustomResolution, this); -	childSetCommitCallback("snapshot_height", Impl::onCommitCustomResolution, this); -#endif -  	childSetCommitCallback("ui_check", Impl::onClickUICheck, this);  	getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot"));  	childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this);  	getChild<LLUICtrl>("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot")); -#if 0 -	childSetCommitCallback("keep_aspect_check", Impl::onClickKeepAspectCheck, this); -#endif  	impl.setAspectRatioCheckboxValue(this, gSavedSettings.getBOOL("KeepAspectForSnapshot"));  	childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this);  	getChild<LLUICtrl>("layer_types")->setValue("colors");  	getChildView("layer_types")->setEnabled(FALSE); -#if 0 // leads to crash later if one of the settings values is 0 -	impl.getWidthSpinner(this)->setValue(gSavedSettings.getS32(lastSnapshotWidthName())); -	impl.getHeightSpinner(this)->setValue(gSavedSettings.getS32(lastSnapshotHeightName())); -#endif -  	getChild<LLUICtrl>("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame"));  	childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this); @@ -2342,6 +2137,7 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)  	LLSnapshotLivePreview* preview = LLFloaterSnapshot::Impl::getPreviewView(this);  	if(preview)  	{ +		lldebugs << "opened, updating snapshot" << llendl;  		preview->updateSnapshot(TRUE);  	}  	focusFirstItem(FALSE); @@ -2423,14 +2219,15 @@ void LLFloaterSnapshot::update()  		return;  	BOOL changed = FALSE; +	lldebugs << "npreviews: " << LLSnapshotLivePreview::sList.size() << llendl;  	for (std::set<LLSnapshotLivePreview*>::iterator iter = LLSnapshotLivePreview::sList.begin();  		 iter != LLSnapshotLivePreview::sList.end(); ++iter)  	{  		changed |= LLSnapshotLivePreview::onIdle(*iter);  	} -	lldebugs << "changed: " << changed << llendl;  	if(changed)  	{ +		lldebugs << "changed" << llendl;  		inst->impl.updateControls(inst);  	}  } | 
