diff options
| author | Monroe Linden <monroe@lindenlab.com> | 2009-10-30 17:46:48 -0700 | 
|---|---|---|
| committer | Monroe Linden <monroe@lindenlab.com> | 2009-10-30 17:46:48 -0700 | 
| commit | 9e602de33ae85bc78d6aa3c6bf45e29af7727796 (patch) | |
| tree | c33d060db8b0ee0c4abaebe3f5ff1539529db672 /indra | |
| parent | 123db56856ef0451e28fe7ac7ce3bcc27d3066f1 (diff) | |
On a double-click in the nearby media list, try to focus/zoom in on the prim holding the media.
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llviewermedia.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llviewermedia.h | 1 | ||||
| -rw-r--r-- | indra/newview/llviewermediafocus.cpp | 30 | ||||
| -rw-r--r-- | indra/newview/llviewermediafocus.h | 3 | 
4 files changed, 47 insertions, 0 deletions
| diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 44bffd2a08..e89f17cf72 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -2073,6 +2073,19 @@ const std::list< LLVOVolume* >* LLViewerMediaImpl::getObjectList() const  	return &mObjectList ;  } +LLVOVolume *LLViewerMediaImpl::getSomeObject() +{ +	LLVOVolume *result = NULL; +	 +	std::list< LLVOVolume* >::iterator iter = mObjectList.begin() ; +	if(iter != mObjectList.end()) +	{ +		result = *iter; +	} +	 +	return result; +} +  //////////////////////////////////////////////////////////////////////////////////////////  //static  void LLViewerMedia::toggleMusicPlay(void*) diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index b04432730a..dac0482078 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -250,6 +250,7 @@ public:  	void addObject(LLVOVolume* obj) ;  	void removeObject(LLVOVolume* obj) ;  	const std::list< LLVOVolume* >* getObjectList() const ; +	LLVOVolume *getSomeObject();  	void setUpdated(BOOL updated) ;  	BOOL isUpdated() ; diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index 0ef4679057..ffdac35e71 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -50,6 +50,7 @@  #include "llmediaentry.h"  #include "llkeyboard.h"  #include "lltoolmgr.h" +#include "llvovolume.h"  //  // LLViewerMediaFocus @@ -473,3 +474,32 @@ LLViewerObject* LLViewerMediaFocus::getHoverObject()  {  	return gObjectList.findObject(mHoverObjectID);  } + +void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id) +{ +	LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(media_id); +	 +	if(impl) +	{	 +		// Get the first object from the media impl's object list.  This is completely arbitrary, but should suffice. +		LLVOVolume *obj = impl->getSomeObject(); +		if(obj) +		{ +			// This media is attached to at least one object.  Figure out which face it's on. +			S32 face = obj->getFaceIndexWithMediaImpl(impl, -1); +			 +			// We don't have a proper pick normal here, and finding a face's real normal is... complicated. +			// For now, use +z to look at the top of the object. +			LLVector3 normal(0.0f, 0.0f, 1.0f); +			 +			// Attempt to focus/zoom on that face. +			setFocusFace(obj, face, impl, normal); +			 +			if(mMediaControls.get()) +			{ +				mMediaControls.get()->resetZoomLevel(); +				mMediaControls.get()->nextZoomLevel(); +			} +		} +	} +} diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h index c1179de39d..07a6f0c47b 100644 --- a/indra/newview/llviewermediafocus.h +++ b/indra/newview/llviewermediafocus.h @@ -81,6 +81,9 @@ public:  	LLViewerMediaImpl* getHoverMediaImpl();  	LLViewerObject* getHoverObject();  	S32 getHoverFace() { return mHoverObjectFace; } +	 +	// Try to focus/zoom on the specified media (if it's on an object in world). +	void focusZoomOnMedia(LLUUID media_id);  protected:  	/*virtual*/ void	onFocusReceived(); | 
