diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 1d6a4e8d83..8109f1da84 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -103,11 +103,7 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
mImageOldBoostLevel(LLGLTexture::BOOST_NONE),
mShowingButtons(false),
mDisplayNameCallback(false),
- mAvatarNameCallbackConnection(),
- // Performance improvement
- mCurrentImageWidth(0),
- mCurrentImageHeight(0)
- //
+ mAvatarNameCallbackConnection()
{
updateImageID();
if (key.has("save_as"))
@@ -151,6 +147,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("combo_aspect_ratio");
+ combo->removeall();
+
+ for (std::vector::const_iterator it = mRatiosList.begin(); it != mRatiosList.end(); ++it)
+ {
+ combo->add(*it);
+ }
+}
+
// virtual
BOOL LLPreviewTexture::postBuild()
{
@@ -191,27 +210,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("combo_aspect_ratio");
- combo->removeall();
-
- for (std::vector::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("combo_aspect_ratio");
combo->setCurrentByIndex(0);
// texture comment metadata reader
@@ -665,28 +669,35 @@ 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
// Performance improvement
- //getChild("dimensions")->setTextArg("[WIDTH]", llformat("%d", mImage->getFullWidth()));
- //getChild("dimensions")->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight()));
- if (mCurrentImageWidth != mImage->getFullWidth())
+ //getChild("dimensions")->setTextArg("[WIDTH]", llformat("%d", img_width));
+ //getChild("dimensions")->setTextArg("[HEIGHT]", llformat("%d", img_height));
+ if (img_width != mLastWidth)
{
- mDimensionsCtrl->setTextArg("[WIDTH]", llformat("%d", mImage->getFullWidth()));
- mCurrentImageWidth = mImage->getFullWidth();
+ mDimensionsCtrl->setTextArg("[WIDTH]", llformat("%d", img_width));
}
- if (mCurrentImageHeight != mImage->getFullHeight())
+ if (img_height != mLastHeight)
{
- mDimensionsCtrl->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight()));
- mCurrentImageHeight = mImage->getFullHeight();
+ mDimensionsCtrl->setTextArg("[HEIGHT]", llformat("%d", img_height));
}
- //
+ // Performance improvement
+
+ mLastHeight = img_height;
+ mLastWidth = img_width;
// Reshape the floater only when required
if (mUpdateDimensions)
@@ -1040,6 +1051,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(num)+":" + boost::lexical_cast(denom);
mRatiosList.push_back(ratio);
combo->add(ratio);
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index a6de652bcf..b60bcf92f4 100644
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -100,6 +100,7 @@ public:
protected:
void init();
+ void populateRatioList();
/* virtual */ BOOL postBuild();
bool setAspectRatio(const F32 width, const F32 height);
static void onAspectRatioCommit(LLUICtrl*,void* userdata);
@@ -136,9 +137,6 @@ private:
// Performance improvement
LLUICtrl* mDimensionsCtrl;
- S32 mCurrentImageWidth;
- S32 mCurrentImageHeight;
- //
LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList ;
std::vector mRatiosList;