diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llfloaterbigpreview.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llsnapshotlivepreview.cpp | 54 | ||||
| -rw-r--r-- | indra/newview/llsnapshotlivepreview.h | 10 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_big_preview.xml | 2 | 
4 files changed, 66 insertions, 8 deletions
| diff --git a/indra/newview/llfloaterbigpreview.cpp b/indra/newview/llfloaterbigpreview.cpp index 84a1523e7c..d5f25d5f95 100644 --- a/indra/newview/llfloaterbigpreview.cpp +++ b/indra/newview/llfloaterbigpreview.cpp @@ -78,7 +78,7 @@ void LLFloaterBigPreview::draw()      // Display the preview if one is available      // HACK!!! We use the puny thumbnail image for the moment      // *TODO : Use the real large preview -	if (previewp && previewp->getThumbnailImage()) +	if (previewp && previewp->getBigThumbnailImage())  	{  		const LLRect& preview_rect = mPreviewPlaceholder->getRect();  //		const S32 thumbnail_w = previewp->getThumbnailWidth(); @@ -93,9 +93,7 @@ void LLFloaterBigPreview::draw()  		// calc preview offset within the floater rect  		S32 offset_x = preview_rect.mLeft   + local_offset_x;  		S32 offset_y = preview_rect.mBottom + local_offset_y; -         -        //llinfos << "Merov : draw, offset x = " << offset_x  << ", y = " <<  offset_y << ", thumbnail w = " <<  thumbnail_w << ", h = " <<  thumbnail_h << ", rect w = " << preview_rect.getWidth() << ", h = " << preview_rect.getHeight() << llendl; -         +                  		gGL.matrixMode(LLRender::MM_MODELVIEW);  		// Apply floater transparency to the texture unless the floater is focused.  		F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); @@ -103,7 +101,7 @@ void LLFloaterBigPreview::draw()  		gl_draw_scaled_image(offset_x, offset_y,                               //thumbnail_w, thumbnail_h,                               preview_rect.getWidth(), preview_rect.getHeight(), -                             previewp->getThumbnailImage(), color % alpha); +                             previewp->getBigThumbnailImage(), color % alpha);  	}  } diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index eef4ed78c8..2ab00419f9 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -75,7 +75,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLSnapshotLivePreview::Param  	mColor(1.f, 0.f, 0.f, 0.5f),   	mCurImageIndex(0),  	mPreviewImage(NULL), -	mThumbnailImage(NULL) , +    mThumbnailImage(NULL) , +    mBigThumbnailImage(NULL) ,  	mThumbnailWidth(0),  	mThumbnailHeight(0),      mThumbnailSubsampled(FALSE), @@ -115,6 +116,7 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLSnapshotLivePreview::Param  	mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ;  	mThumbnailUpdateLock = FALSE ;  	mThumbnailUpToDate   = FALSE ; +	mBigThumbnailUpToDate = FALSE ;  }  LLSnapshotLivePreview::~LLSnapshotLivePreview() @@ -205,6 +207,7 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail  	if (new_thumbnail)  	{  		mThumbnailUpToDate = FALSE ; +        mBigThumbnailUpToDate = FALSE;  	}  } @@ -602,6 +605,55 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)  	mThumbnailUpdateLock = FALSE ;		  } +LLViewerTexture* LLSnapshotLivePreview::getBigThumbnailImage() +{ +	if (mThumbnailUpdateLock) //in the process of updating +	{ +		return NULL; +	} +	if (mBigThumbnailUpToDate && mBigThumbnailImage)//already updated +	{ +		return mBigThumbnailImage; +	} +     +	LLPointer<LLImageRaw> raw = new LLImageRaw; +     +    // The big thumbnail is be a subsampled version of the preview (used in SL Share previews, i.e. Flickr, Twitter, Facebook) +    raw->resize( mPreviewImage->getWidth(), +                mPreviewImage->getHeight(), +                mPreviewImage->getComponents()); +    raw->copy(mPreviewImage); +    // Scale to the big thumbnail size +    if (!raw->scale(getBigThumbnailWidth(), getBigThumbnailHeight())) +    { +        raw = NULL ; +    } +     +	if (raw) +	{ +        // Filter +        // Note: filtering needs to be done *before* the scaling to power of 2 or the effect is distorted +        if (getFilter() != "") +        { +            std::string filter_path = LLImageFiltersManager::getInstance()->getFilterPath(getFilter()); +            if (filter_path != "") +            { +                LLImageFilter filter(filter_path); +                filter.executeFilter(raw); +            } +            else +            { +                llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl; +            } +        } +        // Scale to a power of 2 so it can be mapped to a texture +        raw->expandToPowerOfTwo(); +		mBigThumbnailImage = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE); +		mBigThumbnailUpToDate = TRUE ; +	} +     +    return mBigThumbnailImage ; +}  // Called often. Checks whether it's time to grab a new snapshot and if so, does it.  // Returns TRUE if new snapshot generated, FALSE otherwise. diff --git a/indra/newview/llsnapshotlivepreview.h b/indra/newview/llsnapshotlivepreview.h index 1b7b5290f8..baf3531e69 100644 --- a/indra/newview/llsnapshotlivepreview.h +++ b/indra/newview/llsnapshotlivepreview.h @@ -120,6 +120,11 @@ public:  	void resetThumbnailImage() { mThumbnailImage = NULL ; }  	void drawPreviewRect(S32 offset_x, S32 offset_y) ; +     +	LLViewerTexture* getBigThumbnailImage(); +	S32  getBigThumbnailWidth() const { return 3*mThumbnailWidth ; } +	S32  getBigThumbnailHeight() const { return 3*mThumbnailHeight ; } +  	// Returns TRUE when snapshot generated, FALSE otherwise.  	static BOOL onIdle( void* snapshot_preview ); @@ -145,7 +150,10 @@ private:  	BOOL                        mThumbnailUpdateLock ;  	BOOL                        mThumbnailUpToDate ;  	LLRect                      mThumbnailPlaceholderRect; -    BOOL                        mThumbnailSubsampled; // TRUE is the thumbnail is a subsampled version of the mPreviewImage +    BOOL                        mThumbnailSubsampled; // TRUE if the thumbnail is a subsampled version of the mPreviewImage +     +	LLPointer<LLViewerTexture>	mBigThumbnailImage ; +    BOOL                        mBigThumbnailUpToDate;  	S32							mCurImageIndex;      // The logic is mPreviewImage (raw frame) -> mFormattedImage (formatted / filtered) -> mPreviewImageEncoded (decoded back, to show artifacts) diff --git a/indra/newview/skins/default/xui/en/floater_big_preview.xml b/indra/newview/skins/default/xui/en/floater_big_preview.xml index 23698ccc40..c0bdd3d9bd 100644 --- a/indra/newview/skins/default/xui/en/floater_big_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_big_preview.xml @@ -2,7 +2,7 @@  <floater    positioning="cascading"    can_close="true" -  can_resize="false" +  can_resize="true"    can_minimize="false"    help_topic="floater_big_preview"    layout="topleft" | 
