From 47ae78f8cfc9ca71bf9837b06618d34737b07fc4 Mon Sep 17 00:00:00 2001
From: andreykproductengine <andreykproductengine@lindenlab.com>
Date: Wed, 7 Jun 2017 16:21:40 +0300
Subject: [PATCH] MAINT-7461 Fixed images not showing at correct proportions
 when opened for the first time

---
 indra/newview/llpreviewtexture.cpp | 64 +++++++++++++++++++-----------
 indra/newview/llpreviewtexture.h   |  1 +
 2 files changed, 42 insertions(+), 23 deletions(-)

diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 54eeebda28..12bcd89cb0 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -100,6 +100,29 @@ LLPreviewTexture::~LLPreviewTexture()
 	}
 }
 
+void LLPreviewTexture::populateRatioList()
+{
+	// Fill in ratios list with common aspect ratio values
+	mRatiosList.clear();
+	mRatiosList.push_back(LLTrans::getString("Unconstrained"));
+	mRatiosList.push_back("1:1");
+	mRatiosList.push_back("4:3");
+	mRatiosList.push_back("10:7");
+	mRatiosList.push_back("3:2");
+	mRatiosList.push_back("16:10");
+	mRatiosList.push_back("16:9");
+	mRatiosList.push_back("2:1");
+	
+	// Now fill combo box with provided list
+	LLComboBox* combo = getChild<LLComboBox>("combo_aspect_ratio");
+	combo->removeall();
+
+	for (std::vector<std::string>::const_iterator it = mRatiosList.begin(); it != mRatiosList.end(); ++it)
+	{
+		combo->add(*it);
+	}
+}
+
 // virtual
 BOOL LLPreviewTexture::postBuild()
 {
@@ -140,27 +163,12 @@ BOOL LLPreviewTexture::postBuild()
         }
     }
 
-	// Fill in ratios list with common aspect ratio values
-	mRatiosList.clear();
-	mRatiosList.push_back(LLTrans::getString("Unconstrained"));
-	mRatiosList.push_back("1:1");
-	mRatiosList.push_back("4:3");
-	mRatiosList.push_back("10:7");
-	mRatiosList.push_back("3:2");
-	mRatiosList.push_back("16:10");
-	mRatiosList.push_back("16:9");
-	mRatiosList.push_back("2:1");
-	
-	// Now fill combo box with provided list
-	LLComboBox* combo = getChild<LLComboBox>("combo_aspect_ratio");
-	combo->removeall();
-
-	for (std::vector<std::string>::const_iterator it = mRatiosList.begin(); it != mRatiosList.end(); ++it)
-	{
-		combo->add(*it);
-	}
+	// Fill in ratios list and combo box with common aspect ratio values
+	populateRatioList();
 
 	childSetCommitCallback("combo_aspect_ratio", onAspectRatioCommit, this);
+
+	LLComboBox* combo = getChild<LLComboBox>("combo_aspect_ratio");
 	combo->setCurrentByIndex(0);
 	
 	return LLPreview::postBuild();
@@ -446,16 +454,25 @@ void LLPreviewTexture::updateDimensions()
 		return;
 	}
 
-	if (mAssetStatus != PREVIEW_ASSET_LOADED)
+	S32 img_width = mImage->getFullWidth();
+	S32 img_height = mImage->getFullHeight();
+
+	if (mAssetStatus != PREVIEW_ASSET_LOADED
+		|| mLastWidth != img_width
+		|| mLastHeight != img_height)
 	{
 		mAssetStatus = PREVIEW_ASSET_LOADED;
 		// Asset has been fully loaded, adjust aspect ratio
 		adjustAspectRatio();
 	}
-	
+
+
 	// Update the width/height display every time
-	getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]",  llformat("%d", mImage->getFullWidth()));
-	getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight()));
+	getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]",  llformat("%d", img_width));
+	getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", img_height));
+
+	mLastHeight = img_height;
+	mLastWidth = img_width;
 
 	// Reshape the floater only when required
 	if (mUpdateDimensions)
@@ -582,6 +599,7 @@ void LLPreviewTexture::adjustAspectRatio()
 			if (found == mRatiosList.end())
 			{
 				// No existing ratio found, create an element that will show image at original ratio
+				populateRatioList(); // makes sure previous custom ratio is cleared
 				std::string ratio = boost::lexical_cast<std::string>(num)+":" + boost::lexical_cast<std::string>(denom);
 				mRatiosList.push_back(ratio);
 				combo->add(ratio);
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index b104a91c75..c156c48d0c 100644
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -67,6 +67,7 @@ public:
 	/*virtual*/ void setObjectID(const LLUUID& object_id);
 protected:
 	void				init();
+	void				populateRatioList();
 	/* virtual */ BOOL	postBuild();
 	bool				setAspectRatio(const F32 width, const F32 height);
 	static void			onAspectRatioCommit(LLUICtrl*,void* userdata);
-- 
GitLab