summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoren Shih <seraph@lindenlab.com>2010-02-03 17:42:04 -0500
committerLoren Shih <seraph@lindenlab.com>2010-02-03 17:42:04 -0500
commit1e47e5b42d352d5d838eeb96984dbf6497020e32 (patch)
tree6c9d98c444eeaa242c946daad1a7ce0f9a9425cf
parentf5ade203cb0a714ac8a1f468765838a1d30b0eb6 (diff)
EXT-4022 : Texture previews don't work in object contents
This was broken long ago in viewer-2.0.0-2 when someone made the decision to stop passing in ObjectID to the texture preview floater.
-rw-r--r--indra/newview/llpreview.h2
-rw-r--r--indra/newview/llpreviewtexture.cpp58
-rw-r--r--indra/newview/llpreviewtexture.h3
3 files changed, 46 insertions, 17 deletions
diff --git a/indra/newview/llpreview.h b/indra/newview/llpreview.h
index 3b9f7f9882..551e247d8c 100644
--- a/indra/newview/llpreview.h
+++ b/indra/newview/llpreview.h
@@ -74,7 +74,7 @@ public:
/*virtual*/ BOOL postBuild();
- void setObjectID(const LLUUID& object_id);
+ virtual void setObjectID(const LLUUID& object_id);
void setItem( LLInventoryItem* item );
void setAssetId(const LLUUID& asset_id);
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 028807a6bd..dfc67d0126 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -74,22 +74,10 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
mLastHeight(0),
mLastWidth(0),
mAspectRatio(0.f),
- mPreviewToSave(FALSE)
+ mPreviewToSave(FALSE),
+ mImage(NULL)
{
- const LLViewerInventoryItem *item = static_cast<const LLViewerInventoryItem*>(getItem());
- if(item)
- {
- mShowKeepDiscard = item->getPermissions().getCreator() != gAgent.getID();
- mImageID = item->getAssetUUID();
- mIsCopyable = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
- }
- else // not an item, assume it's an asset id
- {
- mImageID = mItemUUID;
- mCopyToInv = TRUE;
- mIsCopyable = TRUE;
- }
-
+ updateImageID();
if (key.has("save_as"))
{
mPreviewToSave = TRUE;
@@ -97,7 +85,6 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE);
}
-
LLPreviewTexture::~LLPreviewTexture()
{
if( mLoadingFullImage )
@@ -493,3 +480,42 @@ LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus()
}
return mAssetStatus;
}
+
+void LLPreviewTexture::updateImageID()
+{
+ const LLViewerInventoryItem *item = static_cast<const LLViewerInventoryItem*>(getItem());
+ if(item)
+ {
+ mImageID = item->getAssetUUID();
+ mShowKeepDiscard = item->getPermissions().getCreator() != gAgent.getID();
+ mCopyToInv = FALSE;
+ mIsCopyable = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
+ }
+ else // not an item, assume it's an asset id
+ {
+ mImageID = mItemUUID;
+ mShowKeepDiscard = FALSE;
+ mCopyToInv = TRUE;
+ mIsCopyable = TRUE;
+ }
+
+}
+
+/* virtual */
+void LLPreviewTexture::setObjectID(const LLUUID& object_id)
+{
+ mObjectUUID = object_id;
+
+ const LLUUID old_image_id = mImageID;
+
+ // Update what image we're pointing to, such as if we just specified the mObjectID
+ // that this mItemID is part of.
+ updateImageID();
+
+ // If the imageID has changed, start over and reload the new image.
+ if (mImageID != old_image_id)
+ {
+ mAssetStatus = PREVIEW_ASSET_UNLOADED;
+ loadAsset();
+ }
+}
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index 980aecee6d..7cd2adad56 100644
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -69,6 +69,8 @@ public:
void openToSave();
static void onSaveAsBtn(void* data);
+
+ /*virtual*/ void setObjectID(const LLUUID& object_id);
protected:
void init();
/* virtual */ BOOL postBuild();
@@ -76,6 +78,7 @@ protected:
static void onAspectRatioCommit(LLUICtrl*,void* userdata);
private:
+ void updateImageID(); // set what image is being uploaded.
void updateDimensions();
LLUUID mImageID;
LLPointer<LLViewerFetchedTexture> mImage;