diff options
| -rwxr-xr-x | indra/newview/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterbigpreview.cpp | 109 | ||||
| -rw-r--r-- | indra/newview/llfloaterbigpreview.h | 56 | ||||
| -rw-r--r-- | indra/newview/llfloaterflickr.cpp | 36 | ||||
| -rw-r--r-- | indra/newview/llfloaterflickr.h | 2 | ||||
| -rw-r--r-- | indra/newview/llsnapshotlivepreview.h | 2 | ||||
| -rwxr-xr-x | indra/newview/llviewerfloaterreg.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_big_preview.xml | 25 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_flickr_photo.xml | 17 | 
9 files changed, 247 insertions, 4 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 793d972e1c..6d8d6b75a2 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -208,6 +208,7 @@ set(viewer_SOURCE_FILES      llfloateravatarpicker.cpp      llfloateravatartextures.cpp      llfloaterbeacons.cpp +    llfloaterbigpreview.cpp      llfloaterbuildoptions.cpp      llfloaterbulkpermission.cpp      llfloaterbump.cpp @@ -802,6 +803,7 @@ set(viewer_HEADER_FILES      llfloateravatarpicker.h      llfloateravatartextures.h      llfloaterbeacons.h +    llfloaterbigpreview.h      llfloaterbuildoptions.h      llfloaterbulkpermission.h      llfloaterbump.h diff --git a/indra/newview/llfloaterbigpreview.cpp b/indra/newview/llfloaterbigpreview.cpp new file mode 100644 index 0000000000..84a1523e7c --- /dev/null +++ b/indra/newview/llfloaterbigpreview.cpp @@ -0,0 +1,109 @@ +/**  +* @file llfloaterbigpreview.cpp +* @brief Display of extended (big) preview for snapshots and SL Share +* @author merov@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterbigpreview.h" + +#include "llfloaterreg.h" +#include "llsnapshotlivepreview.h" + +/////////////////////// +//LLFloaterBigPreview// +/////////////////////// + +LLFloaterBigPreview::LLFloaterBigPreview(const LLSD& key) : LLFloater(key), +    mPreviewPlaceholder(NULL), +    mFloaterOwner(NULL) +{ +} + +LLFloaterBigPreview::~LLFloaterBigPreview() +{ +	if (mPreviewHandle.get()) +	{ +		mPreviewHandle.get()->die(); +	} +} + +void LLFloaterBigPreview::onCancel() +{ +    closeFloater(); +} + +void LLFloaterBigPreview::closeOnFloaterOwnerClosing(LLFloater* floaterp) +{ +    if (floaterp == mFloaterOwner) +    { +        closeFloater(); +    } +} + +BOOL LLFloaterBigPreview::postBuild() +{ +	mPreviewPlaceholder = getChild<LLUICtrl>("big_preview_placeholder"); +	return LLFloater::postBuild(); +} + +void LLFloaterBigPreview::draw() +{ +	LLFloater::draw(); + +	LLSnapshotLivePreview * previewp = static_cast<LLSnapshotLivePreview *>(mPreviewHandle.get()); +     +    // 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()) +	{ +		const LLRect& preview_rect = mPreviewPlaceholder->getRect(); +//		const S32 thumbnail_w = previewp->getThumbnailWidth(); +//		const S32 thumbnail_h = previewp->getThumbnailHeight(); +         +		// calc preview offset within the preview rect +//		const S32 local_offset_x = (preview_rect.getWidth()  - thumbnail_w) / 2 ; +//		const S32 local_offset_y = (preview_rect.getHeight() - thumbnail_h) / 2 ; +		const S32 local_offset_x = 0 ; +		const S32 local_offset_y = 0 ; +         +		// 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(); +		LLColor4 color = LLColor4::white; +		gl_draw_scaled_image(offset_x, offset_y, +                             //thumbnail_w, thumbnail_h, +                             preview_rect.getWidth(), preview_rect.getHeight(), +                             previewp->getThumbnailImage(), color % alpha); +	} +} + diff --git a/indra/newview/llfloaterbigpreview.h b/indra/newview/llfloaterbigpreview.h new file mode 100644 index 0000000000..91b0968e88 --- /dev/null +++ b/indra/newview/llfloaterbigpreview.h @@ -0,0 +1,56 @@ +/**  +* @file   llfloaterbigpreview.h +* @brief  Display of extended (big) preview for snapshots and SL Share +* @author merov@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLFLOATERBIGPREVIEW_H +#define LL_LLFLOATERBIGPREVIEW_H + +#include "llfloater.h" +#include "llviewertexture.h" + +//class LLSnapshotLivePreview; + +class LLFloaterBigPreview : public LLFloater +{ +public: +	LLFloaterBigPreview(const LLSD& key); +    ~LLFloaterBigPreview(); +     +	BOOL postBuild(); +	void draw(); +	void onCancel(); + +    void setPreview(LLView* previewp) { mPreviewHandle = previewp->getHandle(); } +    void setFloaterOwner(LLFloater* floaterp) { mFloaterOwner = floaterp; } +    void closeOnFloaterOwnerClosing(LLFloater* floaterp); +	 +private: +	LLHandle<LLView> mPreviewHandle; +	LLUICtrl*  mPreviewPlaceholder; +    LLFloater* mFloaterOwner; +}; + +#endif // LL_LLFLOATERBIGPREVIEW_H + diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp index 61f1487d4b..21c619730c 100644 --- a/indra/newview/llfloaterflickr.cpp +++ b/indra/newview/llfloaterflickr.cpp @@ -44,6 +44,7 @@  #include "llslurl.h"  #include "lltrans.h"  #include "llsnapshotlivepreview.h" +#include "llfloaterbigpreview.h"  #include "llviewerregion.h"  #include "llviewercontrol.h"  #include "llviewermedia.h" @@ -76,6 +77,7 @@ mPostButton(NULL)  {  	mCommitCallbackRegistrar.add("SocialSharing.SendPhoto", boost::bind(&LLFlickrPhotoPanel::onSend, this));  	mCommitCallbackRegistrar.add("SocialSharing.RefreshPhoto", boost::bind(&LLFlickrPhotoPanel::onClickNewSnapshot, this)); +	mCommitCallbackRegistrar.add("SocialSharing.BigPreview", boost::bind(&LLFlickrPhotoPanel::onClickBigPreview, this));  }  LLFlickrPhotoPanel::~LLFlickrPhotoPanel() @@ -227,7 +229,7 @@ void LLFlickrPhotoPanel::onVisibilityChange(const LLSD& new_visibility)  			LLSnapshotLivePreview::Params p;  			p.rect(full_screen_rect);  			LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); -			mPreviewHandle = previewp->getHandle();	 +			mPreviewHandle = previewp->getHandle();              previewp->setContainer(this);  			previewp->setSnapshotType(previewp->SNAPSHOT_WEB); @@ -251,6 +253,18 @@ void LLFlickrPhotoPanel::onClickNewSnapshot()  	}  } +void LLFlickrPhotoPanel::onClickBigPreview() +{ +	LLFloaterBigPreview* big_preview_floater = dynamic_cast<LLFloaterBigPreview*>(LLFloaterReg::getInstance("big_preview")); +	if (big_preview_floater) +	{ +        LLSnapshotLivePreview* previewp = getPreviewView(); +		big_preview_floater->setPreview(previewp); +        big_preview_floater->setFloaterOwner(getParentByType<LLFloater>()); +	} +	LLFloaterReg::showInstance("big_preview"); +} +  void LLFlickrPhotoPanel::onSend()  {  	LLEventPumps::instance().obtain("FlickrConnectState").stopListening("LLFlickrPhotoPanel"); // just in case it is already listening @@ -340,6 +354,11 @@ void LLFlickrPhotoPanel::clearAndClose()  	LLFloater* floater = getParentByType<LLFloater>();  	if (floater)  	{ +        LLFloaterBigPreview* big_preview_floater = dynamic_cast<LLFloaterBigPreview*>(LLFloaterReg::getInstance("big_preview")); +        if (big_preview_floater) +        { +            big_preview_floater->closeOnFloaterOwnerClosing(floater); +        }  		floater->closeFloater();  	}  } @@ -615,8 +634,23 @@ LLFloaterFlickr::LLFloaterFlickr(const LLSD& key) : LLFloater(key),  	mCommitCallbackRegistrar.add("SocialSharing.Cancel", boost::bind(&LLFloaterFlickr::onCancel, this));  } +void LLFloaterFlickr::onClose(bool app_quitting) +{ +    LLFloaterBigPreview* big_preview_floater = dynamic_cast<LLFloaterBigPreview*>(LLFloaterReg::getInstance("big_preview")); +    if (big_preview_floater) +    { +        big_preview_floater->closeOnFloaterOwnerClosing(this); +    } +	LLFloater::onClose(app_quitting); +} +  void LLFloaterFlickr::onCancel()  { +    LLFloaterBigPreview* big_preview_floater = dynamic_cast<LLFloaterBigPreview*>(LLFloaterReg::getInstance("big_preview")); +    if (big_preview_floater) +    { +        big_preview_floater->closeOnFloaterOwnerClosing(this); +    }      closeFloater();  } diff --git a/indra/newview/llfloaterflickr.h b/indra/newview/llfloaterflickr.h index 319ab1278f..9fa4a258e2 100644 --- a/indra/newview/llfloaterflickr.h +++ b/indra/newview/llfloaterflickr.h @@ -48,6 +48,7 @@ public:  	LLSnapshotLivePreview* getPreviewView();  	void onVisibilityChange(const LLSD& new_visibility);  	void onClickNewSnapshot(); +    void onClickBigPreview();  	void onSend();  	bool onFlickrConnectStateChange(const LLSD& data); @@ -111,6 +112,7 @@ public:  	LLFloaterFlickr(const LLSD& key);  	BOOL postBuild();  	void draw(); +	void onClose(bool app_quitting);  	void onCancel();  	void showPhotoPanel(); diff --git a/indra/newview/llsnapshotlivepreview.h b/indra/newview/llsnapshotlivepreview.h index 7f3e7a080b..1b7b5290f8 100644 --- a/indra/newview/llsnapshotlivepreview.h +++ b/indra/newview/llsnapshotlivepreview.h @@ -113,7 +113,7 @@ public:  	LLPointer<LLImageFormatted>	getFormattedImage();  	LLPointer<LLImageRaw>		getEncodedImage(); -	/// Sets size of preview thumbnail image and thhe surrounding rect. +	/// Sets size of preview thumbnail image and the surrounding rect.  	void setThumbnailPlaceholderRect(const LLRect& rect) {mThumbnailPlaceholderRect = rect; }  	BOOL setThumbnailImageSize() ;  	void generateThumbnailImage(BOOL force_update = FALSE) ; diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 1f25110aa3..982522955c 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -38,6 +38,7 @@  #include "llfloateravatar.h"  #include "llfloateravatarpicker.h"  #include "llfloateravatartextures.h" +#include "llfloaterbigpreview.h"  #include "llfloaterbeacons.h"  #include "llfloaterbuildoptions.h"  #include "llfloaterbuy.h" @@ -324,6 +325,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("facebook", "floater_facebook.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFacebook>);  	LLFloaterReg::add("flickr", "floater_flickr.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFlickr>);  	LLFloaterReg::add("twitter", "floater_twitter.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTwitter>); +	LLFloaterReg::add("big_preview", "floater_big_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBigPreview>);  	LLFloaterUIPreviewUtil::registerFloater();  	LLFloaterReg::add("upload_anim_bvh", "floater_animation_bvh_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBvhPreview>, "upload"); diff --git a/indra/newview/skins/default/xui/en/floater_big_preview.xml b/indra/newview/skins/default/xui/en/floater_big_preview.xml new file mode 100644 index 0000000000..23698ccc40 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_big_preview.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<floater +  positioning="cascading" +  can_close="true" +  can_resize="false" +  can_minimize="false" +  help_topic="floater_big_preview" +  layout="topleft" +  name="floater_big_preview" +  save_rect="true" +  single_instance="true" +  reuse_instance="true" +  title="PREVIEW" +  height="465" +  width="770"> +  <panel +   height="450" +   width="750" +   visible="true" +   name="big_preview_placeholder" +   top="5" +   follows="all" +   left="10"> +  </panel> +</floater> diff --git a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml index 4516c01670..350c385cc3 100644 --- a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml @@ -82,7 +82,7 @@                  text_color="EmphasisColor"                  height="14"                  top_pad="-19" -                left_pad="-20" +                left_pad="-30"                  length="1"                  halign="center"                  name="working_lbl" @@ -92,6 +92,19 @@                  width="150">                  Refreshing...              </text> +            <button +                follows="right|top" +                height="23" +                label="Big Preview" +                left="200" +                top_pad="-19" +                name="big_preview_btn" +                tool_tip="Click to open big preview" +                visible="true" +                width="100" > +                <button.commit_callback +                function="SocialSharing.BigPreview" /> +            </button>              <text               length="1"               follows="top|left|right" @@ -99,7 +112,7 @@               height="16"               left="9"               name="title_label" -             top_pad="20" +             top_pad="15"               type="string">                Title:              </text>  | 
