diff options
4 files changed, 46 insertions, 21 deletions
| diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 9b5b51f56a..c1e34b5c8f 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -572,6 +572,11 @@ void MediaPluginLibVLC::receiveMessage(const char* message_string)  				}  				else if (message_name == "seek")  				{ +					if (mDuration > 0) +					{ +						F64 normalized_offset = message_in.getValueReal("time") / mDuration; +						libvlc_media_player_set_position(mLibVLCMediaPlayer, normalized_offset); +					}  				}  				else if (message_name == "set_loop")  				{ diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 763657ebad..0bcd8a9e63 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -95,7 +95,8 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :  	mVolumeSliderVisible(0),  	mWindowShade(NULL),  	mHideImmediately(false), -    mSecureURL(false) +    mSecureURL(false), +	mMediaPlaySliderCtrlMouseDownValue(0.0)  {  	mCommitCallbackRegistrar.add("MediaCtrl.Close",		boost::bind(&LLPanelPrimMediaControls::onClickClose, this));  	mCommitCallbackRegistrar.add("MediaCtrl.Back",		boost::bind(&LLPanelPrimMediaControls::onClickBack, this)); @@ -109,7 +110,8 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :  	mCommitCallbackRegistrar.add("MediaCtrl.Open",		boost::bind(&LLPanelPrimMediaControls::onClickOpen, this));  	mCommitCallbackRegistrar.add("MediaCtrl.Zoom",		boost::bind(&LLPanelPrimMediaControls::onClickZoom, this));  	mCommitCallbackRegistrar.add("MediaCtrl.CommitURL",	boost::bind(&LLPanelPrimMediaControls::onCommitURL, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.JumpProgress",		boost::bind(&LLPanelPrimMediaControls::onCommitSlider, this)); +	mCommitCallbackRegistrar.add("MediaCtrl.MouseDown", boost::bind(&LLPanelPrimMediaControls::onMediaPlaySliderCtrlMouseDown, this)); +	mCommitCallbackRegistrar.add("MediaCtrl.MouseUp", boost::bind(&LLPanelPrimMediaControls::onMediaPlaySliderCtrlMouseUp, this));  	mCommitCallbackRegistrar.add("MediaCtrl.CommitVolumeUp",	boost::bind(&LLPanelPrimMediaControls::onCommitVolumeUp, this));  	mCommitCallbackRegistrar.add("MediaCtrl.CommitVolumeDown",	boost::bind(&LLPanelPrimMediaControls::onCommitVolumeDown, this));  	mCommitCallbackRegistrar.add("MediaCtrl.Volume",	boost::bind(&LLPanelPrimMediaControls::onCommitVolumeSlider, this)); @@ -1246,26 +1248,38 @@ void LLPanelPrimMediaControls::setCurrentURL()  #endif	// USE_COMBO_BOX_FOR_MEDIA_URL  } -void LLPanelPrimMediaControls::onCommitSlider() + +void LLPanelPrimMediaControls::onMediaPlaySliderCtrlMouseDown()  { -	focusOnTarget(); +	mMediaPlaySliderCtrlMouseDownValue = mMediaPlaySliderCtrl->getValue().asReal(); -	LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -	if (media_impl)  +	mUpdateSlider = false; +} + +void LLPanelPrimMediaControls::onMediaPlaySliderCtrlMouseUp() +{ +	F64 cur_value = mMediaPlaySliderCtrl->getValue().asReal(); + +	if (mMediaPlaySliderCtrlMouseDownValue != cur_value)  	{ -		// get slider value -		F64 slider_value = mMediaPlaySliderCtrl->getValue().asReal(); -		if(slider_value <= 0.0) -		{	 -			media_impl->stop(); -		} -		else  +		focusOnTarget(); + +		LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +		if (media_impl)  		{ -			media_impl->seek(slider_value*mMovieDuration); -			//mUpdateSlider= false; +			if (cur_value <= 0.0) +			{ +				media_impl->stop(); +			} +			else +			{ +				media_impl->seek(cur_value * mMovieDuration); +			}  		} + +		mUpdateSlider = true;  	} -}		 +}  void LLPanelPrimMediaControls::onCommitVolumeUp()  { diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h index 6d2eb3430e..21d5236074 100644 --- a/indra/newview/llpanelprimmediacontrols.h +++ b/indra/newview/llpanelprimmediacontrols.h @@ -107,8 +107,10 @@ private:  	void updateZoom();  	void setCurrentURL(); -	void onCommitSlider(); -	 + +	void onMediaPlaySliderCtrlMouseDown(); +	void onMediaPlaySliderCtrlMouseUp(); +  	void onCommitVolumeUp();  	void onCommitVolumeDown();  	void onCommitVolumeSlider(); @@ -219,6 +221,8 @@ private:  	S32 mVolumeSliderVisible;  	LLNotificationPtr mActiveNotification; + +	F64 mMediaPlaySliderCtrlMouseDownValue;  };  #endif // LL_PANELPRIMMEDIACONTROLS_H diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml index eb67d07601..068e4420bc 100644 --- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml @@ -374,9 +374,11 @@  		  layout="topleft"  		  tool_tip="Movie play progress"  		  width="200"> -		<slider_bar.commit_callback -			function="MediaCtrl.JumpProgress" /> -	  </slider_bar> +      <slider_bar.mouse_down_callback +        function="MediaCtrl.MouseDown" /> +      <slider_bar.mouse_up_callback +        function="MediaCtrl.MouseUp" /> +    </slider_bar>  	</layout_panel>  	<layout_panel  		name="skip_back" | 
