diff options
Diffstat (limited to 'indra/newview/llpanelprimmediacontrols.cpp')
| -rw-r--r-- | indra/newview/llpanelprimmediacontrols.cpp | 2214 | 
1 files changed, 1107 insertions, 1107 deletions
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 3dcffa91ac..1299c8c656 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -1,25 +1,25 @@ -/**  +/**   * @file llpanelprimmediacontrols.cpp   * @brief media controls popup panel   *   * $LicenseInfo:firstyear=2003&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, 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$   */ @@ -80,61 +80,61 @@ const S32 ADDR_LEFT_PAD = 3;  // LLPanelPrimMediaControls  // -LLPanelPrimMediaControls::LLPanelPrimMediaControls() :  -	mAlpha(1.f), -	mCurrentURL(""), -	mPreviousURL(""), -	mPauseFadeout(false), -	mUpdateSlider(true), -	mClearFaceOnFade(false), -	mCurrentRate(0.0), -	mMovieDuration(0.0), -	mTargetObjectID(LLUUID::null), -	mTargetObjectFace(0), -	mTargetImplID(LLUUID::null), -	mTargetObjectNormal(LLVector3::zero), -	mZoomObjectID(LLUUID::null), -	mZoomObjectFace(0), -	mVolumeSliderVisible(0), -	mZoomedCameraPos(), -	mWindowShade(NULL), -	mHideImmediately(false), +LLPanelPrimMediaControls::LLPanelPrimMediaControls() : +    mAlpha(1.f), +    mCurrentURL(""), +    mPreviousURL(""), +    mPauseFadeout(false), +    mUpdateSlider(true), +    mClearFaceOnFade(false), +    mCurrentRate(0.0), +    mMovieDuration(0.0), +    mTargetObjectID(LLUUID::null), +    mTargetObjectFace(0), +    mTargetImplID(LLUUID::null), +    mTargetObjectNormal(LLVector3::zero), +    mZoomObjectID(LLUUID::null), +    mZoomObjectFace(0), +    mVolumeSliderVisible(0), +    mZoomedCameraPos(), +    mWindowShade(NULL), +    mHideImmediately(false),      mSecureURL(false), -	mMediaPlaySliderCtrlMouseDownValue(0.0) +    mMediaPlaySliderCtrlMouseDownValue(0.0)  { -	mCommitCallbackRegistrar.add("MediaCtrl.Close",		boost::bind(&LLPanelPrimMediaControls::onClickClose, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.Back",		boost::bind(&LLPanelPrimMediaControls::onClickBack, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.Forward",	boost::bind(&LLPanelPrimMediaControls::onClickForward, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.Home",		boost::bind(&LLPanelPrimMediaControls::onClickHome, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.Stop",		boost::bind(&LLPanelPrimMediaControls::onClickStop, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.MediaStop",		boost::bind(&LLPanelPrimMediaControls::onClickMediaStop, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.Reload",	boost::bind(&LLPanelPrimMediaControls::onClickReload, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.Play",		boost::bind(&LLPanelPrimMediaControls::onClickPlay, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.Pause",		boost::bind(&LLPanelPrimMediaControls::onClickPause, this)); -	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.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)); -	mCommitCallbackRegistrar.add("MediaCtrl.ToggleMute",		boost::bind(&LLPanelPrimMediaControls::onToggleMute, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.ShowVolumeSlider",		boost::bind(&LLPanelPrimMediaControls::showVolumeSlider, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.HideVolumeSlider",		boost::bind(&LLPanelPrimMediaControls::hideVolumeSlider, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.SkipBack",		boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this)); -	mCommitCallbackRegistrar.add("MediaCtrl.SkipForward",	boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this)); -	 -	buildFromFile( "panel_prim_media_controls.xml"); -	mInactivityTimer.reset(); -	mFadeTimer.stop(); -	mCurrentZoom = ZOOM_NONE; -	mScrollState = SCROLL_NONE; - -	mPanelHandle.bind(this); -	 -	mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout"); -	mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime"); +    mCommitCallbackRegistrar.add("MediaCtrl.Close",     boost::bind(&LLPanelPrimMediaControls::onClickClose, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.Back",      boost::bind(&LLPanelPrimMediaControls::onClickBack, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.Forward",   boost::bind(&LLPanelPrimMediaControls::onClickForward, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.Home",      boost::bind(&LLPanelPrimMediaControls::onClickHome, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.Stop",      boost::bind(&LLPanelPrimMediaControls::onClickStop, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.MediaStop",     boost::bind(&LLPanelPrimMediaControls::onClickMediaStop, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.Reload",    boost::bind(&LLPanelPrimMediaControls::onClickReload, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.Play",      boost::bind(&LLPanelPrimMediaControls::onClickPlay, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.Pause",     boost::bind(&LLPanelPrimMediaControls::onClickPause, this)); +    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.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)); +    mCommitCallbackRegistrar.add("MediaCtrl.ToggleMute",        boost::bind(&LLPanelPrimMediaControls::onToggleMute, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.ShowVolumeSlider",      boost::bind(&LLPanelPrimMediaControls::showVolumeSlider, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.HideVolumeSlider",      boost::bind(&LLPanelPrimMediaControls::hideVolumeSlider, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.SkipBack",      boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this)); +    mCommitCallbackRegistrar.add("MediaCtrl.SkipForward",   boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this)); + +    buildFromFile( "panel_prim_media_controls.xml"); +    mInactivityTimer.reset(); +    mFadeTimer.stop(); +    mCurrentZoom = ZOOM_NONE; +    mScrollState = SCROLL_NONE; + +    mPanelHandle.bind(this); + +    mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout"); +    mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime");  }  LLPanelPrimMediaControls::~LLPanelPrimMediaControls() @@ -143,695 +143,695 @@ LLPanelPrimMediaControls::~LLPanelPrimMediaControls()  bool LLPanelPrimMediaControls::postBuild()  { -	mMediaRegion			= getChild<LLView>("media_region"); -	mBackCtrl				= getChild<LLUICtrl>("back"); -	mFwdCtrl				= getChild<LLUICtrl>("fwd"); -	mReloadCtrl				= getChild<LLUICtrl>("reload"); -	mPlayCtrl				= getChild<LLUICtrl>("play"); -	mPauseCtrl				= getChild<LLUICtrl>("pause"); -	mStopCtrl				= getChild<LLUICtrl>("stop"); -	mMediaStopCtrl			= getChild<LLUICtrl>("media_stop"); -	mHomeCtrl				= getChild<LLUICtrl>("home"); -	mUnzoomCtrl				= getChild<LLUICtrl>("close"); // This is actually "unzoom"  -	mOpenCtrl				= getChild<LLUICtrl>("new_window"); -	mZoomCtrl				= getChild<LLUICtrl>("zoom_frame"); -	mMediaProgressPanel		= getChild<LLPanel>("media_progress_indicator"); -	mMediaProgressBar		= getChild<LLProgressBar>("media_progress_bar"); -	mMediaAddressCtrl		= getChild<LLUICtrl>("media_address"); -	mMediaAddress			= getChild<LLLineEditor>("media_address_url"); -	mMediaPlaySliderPanel	= getChild<LLUICtrl>("media_play_position"); -	mMediaPlaySliderCtrl	= getChild<LLUICtrl>("media_play_slider"); -	mSkipFwdCtrl			= getChild<LLUICtrl>("skip_forward"); -	mSkipBackCtrl			= getChild<LLUICtrl>("skip_back"); -	mVolumeCtrl				= getChild<LLUICtrl>("media_volume"); -	mMuteBtn				= getChild<LLButton>("media_mute_button"); -	mVolumeSliderCtrl       = getChild<LLSliderCtrl>("volume_slider"); -	mWhitelistIcon			= getChild<LLIconCtrl>("media_whitelist_flag"); -	mSecureLockIcon			= getChild<LLIconCtrl>("media_secure_lock_flag"); -	mMediaControlsStack		= getChild<LLLayoutStack>("media_controls"); -	mLeftBookend			= getChild<LLUICtrl>("left_bookend"); -	mRightBookend			= getChild<LLUICtrl>("right_bookend"); -	mBackgroundImage		= LLUI::getUIImage(getString("control_background_image_name")); -	mVolumeSliderBackgroundImage		= LLUI::getUIImage(getString("control_background_image_name")); -	LLStringUtil::convertToF32(getString("skip_step"), mSkipStep); -	LLStringUtil::convertToS32(getString("min_width"), mMinWidth); -	LLStringUtil::convertToS32(getString("min_height"), mMinHeight); -	LLStringUtil::convertToF32(getString("zoom_near_padding"), mZoomNearPadding); -	LLStringUtil::convertToF32(getString("zoom_medium_padding"), mZoomMediumPadding); -	LLStringUtil::convertToF32(getString("zoom_far_padding"), mZoomFarPadding); -	LLStringUtil::convertToS32(getString("top_world_view_avoid_zone"), mTopWorldViewAvoidZone); - -	// These are currently removed...but getChild creates a "dummy" widget. -	// This class handles them missing. -	mMediaPanelScroll		= findChild<LLUICtrl>("media_panel_scroll"); -	mScrollUpCtrl			= findChild<LLButton>("scrollup"); -	mScrollLeftCtrl			= findChild<LLButton>("scrollleft"); -	mScrollRightCtrl		= findChild<LLButton>("scrollright"); -	mScrollDownCtrl			= findChild<LLButton>("scrolldown");	 -	 -	if (mScrollUpCtrl) -	{ -		mScrollUpCtrl->setClickedCallback(onScrollUp, this); -		mScrollUpCtrl->setHeldDownCallback(onScrollUpHeld, this); -		mScrollUpCtrl->setMouseUpCallback(onScrollStop, this); -	} -	if (mScrollLeftCtrl) -	{ -		mScrollLeftCtrl->setClickedCallback(onScrollLeft, this); -		mScrollLeftCtrl->setHeldDownCallback(onScrollLeftHeld, this); -		mScrollLeftCtrl->setMouseUpCallback(onScrollStop, this); -	} -	if (mScrollRightCtrl) -	{ -		mScrollRightCtrl->setClickedCallback(onScrollRight, this); -		mScrollRightCtrl->setHeldDownCallback(onScrollRightHeld, this); -		mScrollRightCtrl->setMouseUpCallback(onScrollStop, this); -	} -	if (mScrollDownCtrl) -	{ -		mScrollDownCtrl->setClickedCallback(onScrollDown, this); -		mScrollDownCtrl->setHeldDownCallback(onScrollDownHeld, this); -		mScrollDownCtrl->setMouseUpCallback(onScrollStop, this); -	} -		 -	mMediaAddress->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this )); -	 -	gAgent.setMouselookModeInCallback(boost::bind(&LLPanelPrimMediaControls::onMouselookModeIn, this)); - -	LLWindowShade::Params window_shade_params; -	window_shade_params.name = "window_shade"; - -	mCurrentZoom = ZOOM_NONE; -	// clicks on buttons do not remove keyboard focus from media -	setIsChrome(true); -	return true; +    mMediaRegion            = getChild<LLView>("media_region"); +    mBackCtrl               = getChild<LLUICtrl>("back"); +    mFwdCtrl                = getChild<LLUICtrl>("fwd"); +    mReloadCtrl             = getChild<LLUICtrl>("reload"); +    mPlayCtrl               = getChild<LLUICtrl>("play"); +    mPauseCtrl              = getChild<LLUICtrl>("pause"); +    mStopCtrl               = getChild<LLUICtrl>("stop"); +    mMediaStopCtrl          = getChild<LLUICtrl>("media_stop"); +    mHomeCtrl               = getChild<LLUICtrl>("home"); +    mUnzoomCtrl             = getChild<LLUICtrl>("close"); // This is actually "unzoom" +    mOpenCtrl               = getChild<LLUICtrl>("new_window"); +    mZoomCtrl               = getChild<LLUICtrl>("zoom_frame"); +    mMediaProgressPanel     = getChild<LLPanel>("media_progress_indicator"); +    mMediaProgressBar       = getChild<LLProgressBar>("media_progress_bar"); +    mMediaAddressCtrl       = getChild<LLUICtrl>("media_address"); +    mMediaAddress           = getChild<LLLineEditor>("media_address_url"); +    mMediaPlaySliderPanel   = getChild<LLUICtrl>("media_play_position"); +    mMediaPlaySliderCtrl    = getChild<LLUICtrl>("media_play_slider"); +    mSkipFwdCtrl            = getChild<LLUICtrl>("skip_forward"); +    mSkipBackCtrl           = getChild<LLUICtrl>("skip_back"); +    mVolumeCtrl             = getChild<LLUICtrl>("media_volume"); +    mMuteBtn                = getChild<LLButton>("media_mute_button"); +    mVolumeSliderCtrl       = getChild<LLSliderCtrl>("volume_slider"); +    mWhitelistIcon          = getChild<LLIconCtrl>("media_whitelist_flag"); +    mSecureLockIcon         = getChild<LLIconCtrl>("media_secure_lock_flag"); +    mMediaControlsStack     = getChild<LLLayoutStack>("media_controls"); +    mLeftBookend            = getChild<LLUICtrl>("left_bookend"); +    mRightBookend           = getChild<LLUICtrl>("right_bookend"); +    mBackgroundImage        = LLUI::getUIImage(getString("control_background_image_name")); +    mVolumeSliderBackgroundImage        = LLUI::getUIImage(getString("control_background_image_name")); +    LLStringUtil::convertToF32(getString("skip_step"), mSkipStep); +    LLStringUtil::convertToS32(getString("min_width"), mMinWidth); +    LLStringUtil::convertToS32(getString("min_height"), mMinHeight); +    LLStringUtil::convertToF32(getString("zoom_near_padding"), mZoomNearPadding); +    LLStringUtil::convertToF32(getString("zoom_medium_padding"), mZoomMediumPadding); +    LLStringUtil::convertToF32(getString("zoom_far_padding"), mZoomFarPadding); +    LLStringUtil::convertToS32(getString("top_world_view_avoid_zone"), mTopWorldViewAvoidZone); + +    // These are currently removed...but getChild creates a "dummy" widget. +    // This class handles them missing. +    mMediaPanelScroll       = findChild<LLUICtrl>("media_panel_scroll"); +    mScrollUpCtrl           = findChild<LLButton>("scrollup"); +    mScrollLeftCtrl         = findChild<LLButton>("scrollleft"); +    mScrollRightCtrl        = findChild<LLButton>("scrollright"); +    mScrollDownCtrl         = findChild<LLButton>("scrolldown"); + +    if (mScrollUpCtrl) +    { +        mScrollUpCtrl->setClickedCallback(onScrollUp, this); +        mScrollUpCtrl->setHeldDownCallback(onScrollUpHeld, this); +        mScrollUpCtrl->setMouseUpCallback(onScrollStop, this); +    } +    if (mScrollLeftCtrl) +    { +        mScrollLeftCtrl->setClickedCallback(onScrollLeft, this); +        mScrollLeftCtrl->setHeldDownCallback(onScrollLeftHeld, this); +        mScrollLeftCtrl->setMouseUpCallback(onScrollStop, this); +    } +    if (mScrollRightCtrl) +    { +        mScrollRightCtrl->setClickedCallback(onScrollRight, this); +        mScrollRightCtrl->setHeldDownCallback(onScrollRightHeld, this); +        mScrollRightCtrl->setMouseUpCallback(onScrollStop, this); +    } +    if (mScrollDownCtrl) +    { +        mScrollDownCtrl->setClickedCallback(onScrollDown, this); +        mScrollDownCtrl->setHeldDownCallback(onScrollDownHeld, this); +        mScrollDownCtrl->setMouseUpCallback(onScrollStop, this); +    } + +    mMediaAddress->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this )); + +    gAgent.setMouselookModeInCallback(boost::bind(&LLPanelPrimMediaControls::onMouselookModeIn, this)); + +    LLWindowShade::Params window_shade_params; +    window_shade_params.name = "window_shade"; + +    mCurrentZoom = ZOOM_NONE; +    // clicks on buttons do not remove keyboard focus from media +    setIsChrome(true); +    return true;  }  void LLPanelPrimMediaControls::setMediaFace(LLPointer<LLViewerObject> objectp, S32 face, viewer_media_t media_impl, LLVector3 pick_normal)  { -	if (media_impl.notNull() && objectp.notNull()) -	{ -		LLUUID prev_id = mTargetImplID; -		mTargetImplID = media_impl->getMediaTextureID(); -		mTargetObjectID = objectp->getID(); -		mTargetObjectFace = face; -		mTargetObjectNormal = pick_normal; -		mClearFaceOnFade = false; -		 -		if (prev_id != mTargetImplID) -			mVolumeSliderCtrl->setValue(media_impl->getVolume()); -	} -	else -	{ -		// This happens on a timer now. -//		mTargetImplID = LLUUID::null; -//		mTargetObjectID = LLUUID::null; -//		mTargetObjectFace = 0; -		mClearFaceOnFade = true; -	} - -	updateShape(); +    if (media_impl.notNull() && objectp.notNull()) +    { +        LLUUID prev_id = mTargetImplID; +        mTargetImplID = media_impl->getMediaTextureID(); +        mTargetObjectID = objectp->getID(); +        mTargetObjectFace = face; +        mTargetObjectNormal = pick_normal; +        mClearFaceOnFade = false; + +        if (prev_id != mTargetImplID) +            mVolumeSliderCtrl->setValue(media_impl->getVolume()); +    } +    else +    { +        // This happens on a timer now. +//      mTargetImplID = LLUUID::null; +//      mTargetObjectID = LLUUID::null; +//      mTargetObjectFace = 0; +        mClearFaceOnFade = true; +    } + +    updateShape();  }  void LLPanelPrimMediaControls::focusOnTarget()  { -	// Sets the media focus to the current target of the LLPanelPrimMediaControls. -	// This is how we transition from hover to focus when the user clicks on a control. -	LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -	if(media_impl) -	{ -		if (!media_impl->hasFocus()) -		{	 -			// The current target doesn't have media focus -- focus on it. -			LLViewerObject* objectp = getTargetObject(); -			LLViewerMediaFocus::getInstance()->setFocusFace(objectp, mTargetObjectFace, media_impl, mTargetObjectNormal); -		} -	}	 +    // Sets the media focus to the current target of the LLPanelPrimMediaControls. +    // This is how we transition from hover to focus when the user clicks on a control. +    LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +    if(media_impl) +    { +        if (!media_impl->hasFocus()) +        { +            // The current target doesn't have media focus -- focus on it. +            LLViewerObject* objectp = getTargetObject(); +            LLViewerMediaFocus::getInstance()->setFocusFace(objectp, mTargetObjectFace, media_impl, mTargetObjectNormal); +        } +    }  }  LLViewerMediaImpl* LLPanelPrimMediaControls::getTargetMediaImpl()  { -	return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mTargetImplID); +    return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mTargetImplID);  }  LLViewerObject* LLPanelPrimMediaControls::getTargetObject()  { -	return gObjectList.findObject(mTargetObjectID); +    return gObjectList.findObject(mTargetObjectID);  }  LLPluginClassMedia* LLPanelPrimMediaControls::getTargetMediaPlugin()  { -	LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl && impl->hasMedia()) -	{ -		return impl->getMediaPlugin(); -	} -	 -	return NULL; +    LLViewerMediaImpl* impl = getTargetMediaImpl(); +    if(impl && impl->hasMedia()) +    { +        return impl->getMediaPlugin(); +    } + +    return NULL;  }  void LLPanelPrimMediaControls::updateShape()  { -	LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -	LLViewerObject* objectp = getTargetObject(); -	 -	if(!media_impl || gFloaterTools->getVisible()) -	{ -		setVisible(false); -		return; -	} - -	LLPluginClassMedia* media_plugin = NULL; -	if(media_impl->hasMedia()) -	{ -		media_plugin = media_impl->getMediaPlugin(); -	} -	 -	LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - -	bool can_navigate = parcel->getMediaAllowNavigate(); -	bool enabled = false; -	bool is_zoomed = (mCurrentZoom != ZOOM_NONE) && (mTargetObjectID == mZoomObjectID) && (mTargetObjectFace == mZoomObjectFace) && !isZoomDistExceeding(); -	 -	// There is no such thing as "has_focus" being different from normal controls set -	// anymore (as of user feedback from bri 10/09).  So we cheat here and force 'has_focus' -	// to 'true' (or, actually, we use a setting) -	bool has_focus = (gSavedSettings.getBOOL("PrimMediaControlsUseHoverControlSet")) ? media_impl->hasFocus() : true; -	setVisible(enabled); - -	if (objectp) -	{ -		bool hasPermsControl = true; -		bool mini_controls = false; -		LLMediaEntry *media_data = objectp->getTE(mTargetObjectFace)->getMediaData(); -		if (media_data && NULL != dynamic_cast<LLVOVolume*>(objectp)) -		{ -			// Don't show the media controls if we do not have permissions -			enabled = dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL); -			hasPermsControl = dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL); -			mini_controls = (LLMediaEntry::MINI == media_data->getControls()); -		} -		const bool is_hud = objectp->isHUDAttachment(); -		 -		// -		// Set the state of the buttons -		// -		 -		// XXX RSP: TODO: FIXME: clean this up so that it is clearer what mode we are in, -		// and that only the proper controls get made visible/enabled according to that mode.  -		mBackCtrl->setVisible(has_focus); -		mFwdCtrl->setVisible(has_focus); -		mReloadCtrl->setVisible(has_focus); -		mStopCtrl->setVisible(false); -		mHomeCtrl->setVisible(has_focus); -		mZoomCtrl->setVisible(!is_zoomed); -		mUnzoomCtrl->setVisible(is_zoomed); -		mOpenCtrl->setVisible(true); -		mMediaAddressCtrl->setVisible(has_focus && !mini_controls); -		mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); -		mVolumeCtrl->setVisible(false); -		 -		mWhitelistIcon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false); -		// Disable zoom if HUD -		mZoomCtrl->setEnabled(!is_hud); -		mUnzoomCtrl->setEnabled(!is_hud); +    LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +    LLViewerObject* objectp = getTargetObject(); + +    if(!media_impl || gFloaterTools->getVisible()) +    { +        setVisible(false); +        return; +    } + +    LLPluginClassMedia* media_plugin = NULL; +    if(media_impl->hasMedia()) +    { +        media_plugin = media_impl->getMediaPlugin(); +    } + +    LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); + +    bool can_navigate = parcel->getMediaAllowNavigate(); +    bool enabled = false; +    bool is_zoomed = (mCurrentZoom != ZOOM_NONE) && (mTargetObjectID == mZoomObjectID) && (mTargetObjectFace == mZoomObjectFace) && !isZoomDistExceeding(); + +    // There is no such thing as "has_focus" being different from normal controls set +    // anymore (as of user feedback from bri 10/09).  So we cheat here and force 'has_focus' +    // to 'true' (or, actually, we use a setting) +    bool has_focus = (gSavedSettings.getBOOL("PrimMediaControlsUseHoverControlSet")) ? media_impl->hasFocus() : true; +    setVisible(enabled); + +    if (objectp) +    { +        bool hasPermsControl = true; +        bool mini_controls = false; +        LLMediaEntry *media_data = objectp->getTE(mTargetObjectFace)->getMediaData(); +        if (media_data && NULL != dynamic_cast<LLVOVolume*>(objectp)) +        { +            // Don't show the media controls if we do not have permissions +            enabled = dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL); +            hasPermsControl = dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL); +            mini_controls = (LLMediaEntry::MINI == media_data->getControls()); +        } +        const bool is_hud = objectp->isHUDAttachment(); + +        // +        // Set the state of the buttons +        // + +        // XXX RSP: TODO: FIXME: clean this up so that it is clearer what mode we are in, +        // and that only the proper controls get made visible/enabled according to that mode. +        mBackCtrl->setVisible(has_focus); +        mFwdCtrl->setVisible(has_focus); +        mReloadCtrl->setVisible(has_focus); +        mStopCtrl->setVisible(false); +        mHomeCtrl->setVisible(has_focus); +        mZoomCtrl->setVisible(!is_zoomed); +        mUnzoomCtrl->setVisible(is_zoomed); +        mOpenCtrl->setVisible(true); +        mMediaAddressCtrl->setVisible(has_focus && !mini_controls); +        mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); +        mVolumeCtrl->setVisible(false); + +        mWhitelistIcon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false); +        // Disable zoom if HUD +        mZoomCtrl->setEnabled(!is_hud); +        mUnzoomCtrl->setEnabled(!is_hud);          mSecureURL = false; -		mCurrentURL = media_impl->getCurrentMediaURL(); -		 -		mBackCtrl->setEnabled((media_impl != NULL) && media_impl->canNavigateBack() && can_navigate); -		mFwdCtrl->setEnabled((media_impl != NULL) && media_impl->canNavigateForward() && can_navigate); -		mStopCtrl->setEnabled(has_focus && can_navigate); -		mHomeCtrl->setEnabled(has_focus && can_navigate); -		LLPluginClassMediaOwner::EMediaStatus result = ((media_impl != NULL) && media_impl->hasMedia()) ? media_plugin->getStatus() : LLPluginClassMediaOwner::MEDIA_NONE; -		 -		mVolumeCtrl->setVisible(has_focus); -		mVolumeCtrl->setEnabled(has_focus); -		mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible()); -		mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible()); - -		if(media_plugin && media_plugin->pluginSupportsMediaTime()) -		{ -			mReloadCtrl->setEnabled(false); -			mReloadCtrl->setVisible(false); -			mMediaStopCtrl->setVisible(has_focus); -			mHomeCtrl->setVisible(has_focus); -			mBackCtrl->setVisible(false); -			mFwdCtrl->setVisible(false); -			mMediaAddressCtrl->setVisible(false); -			mMediaAddressCtrl->setEnabled(false); -			mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); -			mMediaPlaySliderPanel->setEnabled(has_focus && !mini_controls); -			mSkipFwdCtrl->setVisible(has_focus && !mini_controls); -			mSkipFwdCtrl->setEnabled(has_focus && !mini_controls); -			mSkipBackCtrl->setVisible(has_focus && !mini_controls); -			mSkipBackCtrl->setEnabled(has_focus && !mini_controls); -			 -			mVolumeCtrl->setVisible(has_focus); -			mVolumeCtrl->setEnabled(has_focus); -			mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible()); -			mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible()); -			 -			mWhitelistIcon->setVisible(false); +        mCurrentURL = media_impl->getCurrentMediaURL(); + +        mBackCtrl->setEnabled((media_impl != NULL) && media_impl->canNavigateBack() && can_navigate); +        mFwdCtrl->setEnabled((media_impl != NULL) && media_impl->canNavigateForward() && can_navigate); +        mStopCtrl->setEnabled(has_focus && can_navigate); +        mHomeCtrl->setEnabled(has_focus && can_navigate); +        LLPluginClassMediaOwner::EMediaStatus result = ((media_impl != NULL) && media_impl->hasMedia()) ? media_plugin->getStatus() : LLPluginClassMediaOwner::MEDIA_NONE; + +        mVolumeCtrl->setVisible(has_focus); +        mVolumeCtrl->setEnabled(has_focus); +        mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible()); +        mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible()); + +        if(media_plugin && media_plugin->pluginSupportsMediaTime()) +        { +            mReloadCtrl->setEnabled(false); +            mReloadCtrl->setVisible(false); +            mMediaStopCtrl->setVisible(has_focus); +            mHomeCtrl->setVisible(has_focus); +            mBackCtrl->setVisible(false); +            mFwdCtrl->setVisible(false); +            mMediaAddressCtrl->setVisible(false); +            mMediaAddressCtrl->setEnabled(false); +            mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); +            mMediaPlaySliderPanel->setEnabled(has_focus && !mini_controls); +            mSkipFwdCtrl->setVisible(has_focus && !mini_controls); +            mSkipFwdCtrl->setEnabled(has_focus && !mini_controls); +            mSkipBackCtrl->setVisible(has_focus && !mini_controls); +            mSkipBackCtrl->setEnabled(has_focus && !mini_controls); + +            mVolumeCtrl->setVisible(has_focus); +            mVolumeCtrl->setEnabled(has_focus); +            mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible()); +            mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible()); + +            mWhitelistIcon->setVisible(false);              mSecureURL = false; -			if (mMediaPanelScroll) -			{ -				mMediaPanelScroll->setVisible(false); -				mScrollUpCtrl->setVisible(false); -				mScrollDownCtrl->setVisible(false); -				mScrollRightCtrl->setVisible(false); -				mScrollDownCtrl->setVisible(false); -			} -			 -			F32 volume = media_impl->getVolume(); -			// movie's url changed -			if(mCurrentURL!=mPreviousURL) -			{ -				mMovieDuration = media_plugin->getDuration(); -				mPreviousURL = mCurrentURL; -			} -			 -			if(mMovieDuration == 0)  -			{ -				mMovieDuration = media_plugin->getDuration(); -				mMediaPlaySliderCtrl->setValue(0); -				mMediaPlaySliderCtrl->setEnabled(false); -			} -			// TODO: What if it's not fully loaded -			 -			if(mUpdateSlider && mMovieDuration!= 0) -			{ -				F64 current_time =  media_plugin->getCurrentTime(); -				F32 percent = current_time / mMovieDuration; -				mMediaPlaySliderCtrl->setValue(percent); -				mMediaPlaySliderCtrl->setEnabled(true); -			} -			 -			// video volume -			if(volume <= 0.0) -			{ -				mMuteBtn->setToggleState(true); -			} -			else if (volume >= 1.0) -			{ -				mMuteBtn->setToggleState(false); -			} -			else -			{ -				mMuteBtn->setToggleState(false); -			} -			 -			switch(result) -			{ -				case LLPluginClassMediaOwner::MEDIA_PLAYING: -					mPlayCtrl->setEnabled(false); -					mPlayCtrl->setVisible(false); -					mPauseCtrl->setEnabled(true); -					mPauseCtrl->setVisible(has_focus); -					 -					break; -				case LLPluginClassMediaOwner::MEDIA_PAUSED: -				default: -					mPauseCtrl->setEnabled(false); -					mPauseCtrl->setVisible(false); -					mPlayCtrl->setEnabled(true); -					mPlayCtrl->setVisible(has_focus); -					break; -			} -		} -		else   // web based -		{ -			if(media_plugin) -			{ -				mCurrentURL = media_plugin->getLocation(); -			} -			else -			{ -				mCurrentURL.clear(); -			} -			 -			mPlayCtrl->setVisible(false); -			mPauseCtrl->setVisible(false); -			mMediaStopCtrl->setVisible(false); -			mMediaAddressCtrl->setVisible(has_focus && !mini_controls); -			mMediaAddressCtrl->setEnabled(has_focus && !mini_controls); -			mMediaPlaySliderPanel->setVisible(false); -			mMediaPlaySliderPanel->setEnabled(false); -			mSkipFwdCtrl->setVisible(false); -			mSkipFwdCtrl->setEnabled(false); -			mSkipBackCtrl->setVisible(false); -			mSkipBackCtrl->setEnabled(false); -			 -			if(media_impl->getVolume() <= 0.0) -			{ -				mMuteBtn->setToggleState(true); -			} -			else -			{ -				mMuteBtn->setToggleState(false); -			} - -			if (mMediaPanelScroll) -			{ -				mMediaPanelScroll->setVisible(has_focus); -				mScrollUpCtrl->setVisible(has_focus); -				mScrollDownCtrl->setVisible(has_focus); -				mScrollRightCtrl->setVisible(has_focus); -				mScrollDownCtrl->setVisible(has_focus); -			} -			// TODO: get the secure lock bool from media plug in -			std::string prefix =  std::string("https://"); -			std::string test_prefix = mCurrentURL.substr(0, prefix.length()); -			LLStringUtil::toLower(test_prefix); +            if (mMediaPanelScroll) +            { +                mMediaPanelScroll->setVisible(false); +                mScrollUpCtrl->setVisible(false); +                mScrollDownCtrl->setVisible(false); +                mScrollRightCtrl->setVisible(false); +                mScrollDownCtrl->setVisible(false); +            } + +            F32 volume = media_impl->getVolume(); +            // movie's url changed +            if(mCurrentURL!=mPreviousURL) +            { +                mMovieDuration = media_plugin->getDuration(); +                mPreviousURL = mCurrentURL; +            } + +            if(mMovieDuration == 0) +            { +                mMovieDuration = media_plugin->getDuration(); +                mMediaPlaySliderCtrl->setValue(0); +                mMediaPlaySliderCtrl->setEnabled(false); +            } +            // TODO: What if it's not fully loaded + +            if(mUpdateSlider && mMovieDuration!= 0) +            { +                F64 current_time =  media_plugin->getCurrentTime(); +                F32 percent = current_time / mMovieDuration; +                mMediaPlaySliderCtrl->setValue(percent); +                mMediaPlaySliderCtrl->setEnabled(true); +            } + +            // video volume +            if(volume <= 0.0) +            { +                mMuteBtn->setToggleState(true); +            } +            else if (volume >= 1.0) +            { +                mMuteBtn->setToggleState(false); +            } +            else +            { +                mMuteBtn->setToggleState(false); +            } + +            switch(result) +            { +                case LLPluginClassMediaOwner::MEDIA_PLAYING: +                    mPlayCtrl->setEnabled(false); +                    mPlayCtrl->setVisible(false); +                    mPauseCtrl->setEnabled(true); +                    mPauseCtrl->setVisible(has_focus); + +                    break; +                case LLPluginClassMediaOwner::MEDIA_PAUSED: +                default: +                    mPauseCtrl->setEnabled(false); +                    mPauseCtrl->setVisible(false); +                    mPlayCtrl->setEnabled(true); +                    mPlayCtrl->setVisible(has_focus); +                    break; +            } +        } +        else   // web based +        { +            if(media_plugin) +            { +                mCurrentURL = media_plugin->getLocation(); +            } +            else +            { +                mCurrentURL.clear(); +            } + +            mPlayCtrl->setVisible(false); +            mPauseCtrl->setVisible(false); +            mMediaStopCtrl->setVisible(false); +            mMediaAddressCtrl->setVisible(has_focus && !mini_controls); +            mMediaAddressCtrl->setEnabled(has_focus && !mini_controls); +            mMediaPlaySliderPanel->setVisible(false); +            mMediaPlaySliderPanel->setEnabled(false); +            mSkipFwdCtrl->setVisible(false); +            mSkipFwdCtrl->setEnabled(false); +            mSkipBackCtrl->setVisible(false); +            mSkipBackCtrl->setEnabled(false); + +            if(media_impl->getVolume() <= 0.0) +            { +                mMuteBtn->setToggleState(true); +            } +            else +            { +                mMuteBtn->setToggleState(false); +            } + +            if (mMediaPanelScroll) +            { +                mMediaPanelScroll->setVisible(has_focus); +                mScrollUpCtrl->setVisible(has_focus); +                mScrollDownCtrl->setVisible(has_focus); +                mScrollRightCtrl->setVisible(has_focus); +                mScrollDownCtrl->setVisible(has_focus); +            } +            // TODO: get the secure lock bool from media plug in +            std::string prefix =  std::string("https://"); +            std::string test_prefix = mCurrentURL.substr(0, prefix.length()); +            LLStringUtil::toLower(test_prefix);              mSecureURL = has_focus && (test_prefix == prefix); -			S32 left_pad = mSecureURL ? mSecureLockIcon->getRect().getWidth() : ADDR_LEFT_PAD; -			mMediaAddress->setTextPadding(left_pad, 0); - -			if(mCurrentURL!=mPreviousURL) -			{ -				setCurrentURL(); -				mPreviousURL = mCurrentURL; -			} -			 -			if(result == LLPluginClassMediaOwner::MEDIA_LOADING) -			{ -				mReloadCtrl->setEnabled(false); -				mReloadCtrl->setVisible(false); -				mStopCtrl->setEnabled(true); -				mStopCtrl->setVisible(has_focus); -			} -			else -			{ -				mReloadCtrl->setEnabled(true); -				mReloadCtrl->setVisible(has_focus); -				mStopCtrl->setEnabled(false); -				mStopCtrl->setVisible(false); -			} -		} -		 -		 -		if(media_plugin) -		{ -			// -			// Handle progress bar -			// -			if(LLPluginClassMediaOwner::MEDIA_LOADING == media_plugin->getStatus()) -			{	 -				mMediaProgressPanel->setVisible(true); -				mMediaProgressBar->setValue(media_plugin->getProgressPercent()); -			} -			else -			{ -				mMediaProgressPanel->setVisible(false); -			} -		} -		 -		if(media_impl) -		{ -			// -			// Handle Scrolling -			// -			switch (mScrollState)  -			{ -				case SCROLL_UP: -					media_impl->scrollWheel(0, 0, 0, -1, MASK_NONE); -					break; -				case SCROLL_DOWN: -					media_impl->scrollWheel(0, 0, 0, 1, MASK_NONE); -					break; -				case SCROLL_LEFT: -					media_impl->scrollWheel(0, 0, 1, 0, MASK_NONE); -					//				media_impl->handleKeyHere(KEY_LEFT, MASK_NONE); -					break; -				case SCROLL_RIGHT: -					media_impl->scrollWheel(0, 0, -1, 0, MASK_NONE); -					//				media_impl->handleKeyHere(KEY_RIGHT, MASK_NONE); -					break; -				case SCROLL_NONE: -				default: -					break; -			} -		} -		 -		// Web plugins and HUD may have media controls invisible for user, but still need scroll mouse events. -		// LLView checks for visibleEnabledAndContains() and won't pass events to invisible panel, so instead -		// of hiding whole panel hide each control instead (if user has no perms). -		// Note: It might be beneficial to keep panel visible for all plugins to make behavior consistent, but  -		// for now limiting change to cases that need events. - -		if (!is_hud && (!media_plugin || media_plugin->pluginSupportsMediaTime())) -		{ -			setVisible(enabled); -		} -		else -		{ -			if( !hasPermsControl ) -			{ -				mBackCtrl->setVisible(false); -				mFwdCtrl->setVisible(false); -				mReloadCtrl->setVisible(false); -				mStopCtrl->setVisible(false); -				mHomeCtrl->setVisible(false); -				mZoomCtrl->setVisible(false); -				mUnzoomCtrl->setVisible(false); -				mOpenCtrl->setVisible(false); -				mMediaAddressCtrl->setVisible(false); -				mMediaPlaySliderPanel->setVisible(false); -				mVolumeCtrl->setVisible(false); -				mMediaProgressPanel->setVisible(false); -				mVolumeSliderCtrl->setVisible(false); -			} - -			setVisible(true); -		} -		 -		// -		// Calculate position and shape of the controls -		// -		std::vector<LLVector3>::iterator vert_it; -		std::vector<LLVector3>::iterator vert_end; -		std::vector<LLVector3> vect_face; -		 -		LLVolume* volume = objectp->getVolume(); -		 -		if (volume) -		{ -			const LLVolumeFace& vf = volume->getVolumeFace(mTargetObjectFace); -			 -			LLVector3 ext[2]; -			ext[0].set(vf.mExtents[0].getF32ptr()); -			ext[1].set(vf.mExtents[1].getF32ptr()); -			 -			LLVector3 center = (ext[0]+ext[1])*0.5f; -			LLVector3 size = (ext[1]-ext[0])*0.5f; -			LLVector3 vert[] = -			{ -				center + size.scaledVec(LLVector3(1,1,1)), -				center + size.scaledVec(LLVector3(-1,1,1)), -				center + size.scaledVec(LLVector3(1,-1,1)), -				center + size.scaledVec(LLVector3(-1,-1,1)), -				center + size.scaledVec(LLVector3(1,1,-1)), -				center + size.scaledVec(LLVector3(-1,1,-1)), -				center + size.scaledVec(LLVector3(1,-1,-1)), -				center + size.scaledVec(LLVector3(-1,-1,-1)), -			}; -			 -			LLVOVolume* vo = (LLVOVolume*) objectp; -			 -			for (U32 i = 0; i < 8; i++) -			{ -				vect_face.push_back(vo->volumePositionToAgent(vert[i])); -			} -		} -		vert_it = vect_face.begin(); -		vert_end = vect_face.end(); -		 -		glh::matrix4f mat; -		if (!is_hud)  -		{ -			mat = get_current_projection() * get_current_modelview(); -		} -		else { -			glh::matrix4f proj, modelview; -			if (get_hud_matrices(proj, modelview)) -				mat = proj * modelview; -		} -		LLVector3 min = LLVector3(1,1,1); -		LLVector3 max = LLVector3(-1,-1,-1); -		for(; vert_it != vert_end; ++vert_it) -		{ -			// project silhouette vertices into screen space -			glh::vec3f screen_vert = glh::vec3f(vert_it->mV);  -			mat.mult_matrix_vec(screen_vert); -			 -			// add to screenspace bounding box -			update_min_max(min, max, LLVector3(screen_vert.v)); -		} -		 -		// convert screenspace bbox to pixels (in screen coords) -		LLRect window_rect = gViewerWindow->getWorldViewRectScaled(); -		LLCoordGL screen_min; -		screen_min.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f); -		screen_min.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f); -		 -		LLCoordGL screen_max; -		screen_max.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f); -		screen_max.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f); -		 -		// grow panel so that screenspace bounding box fits inside "media_region" element of panel -		LLRect media_panel_rect; -		// Get the height of the controls (less the volume slider) -		S32 controls_height = mMediaControlsStack->getRect().getHeight() - mVolumeSliderCtrl->getRect().getHeight(); -		getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_panel_rect); -		media_panel_rect.mTop += controls_height; -		 -		// keep all parts of panel on-screen -		// Area of the top of the world view to avoid putting the controls -		window_rect.mTop -= mTopWorldViewAvoidZone; -		// Don't include "spacing" bookends on left & right of the media controls -		window_rect.mLeft -= mLeftBookend->getRect().getWidth(); -		window_rect.mRight += mRightBookend->getRect().getWidth(); -		// Don't include the volume slider -		window_rect.mBottom -= mVolumeSliderCtrl->getRect().getHeight(); -		media_panel_rect.intersectWith(window_rect); -		 -		// clamp to minimum size, keeping rect inside window -		S32 centerX = media_panel_rect.getCenterX(); -		S32 centerY = media_panel_rect.getCenterY(); -		// Shrink screen rect by min width and height, to ensure containment -		window_rect.stretch(-mMinWidth/2, -mMinHeight/2); -		window_rect.clampPointToRect(centerX, centerY); -		media_panel_rect.setCenterAndSize(centerX, centerY,  -										  llmax(mMinWidth, media_panel_rect.getWidth()), -										  llmax(mMinHeight, media_panel_rect.getHeight())); -		 -		// Finally set the size of the panel -		setShape(media_panel_rect, true); -		 -		// Test mouse position to see if the cursor is stationary -		LLCoordWindow cursor_pos_window; -		getWindow()->getCursorPosition(&cursor_pos_window); -		 -		// If last pos is not equal to current pos, the mouse has moved -		// We need to reset the timer, and make sure the panel is visible -		if(cursor_pos_window.mX != mLastCursorPos.mX || -		   cursor_pos_window.mY != mLastCursorPos.mY || -		   mScrollState != SCROLL_NONE) -		{ -			mInactivityTimer.start(); -			mLastCursorPos = cursor_pos_window; -		} -		 -		if(isMouseOver() || hasFocus()) -		{ -			// Never fade the controls if the mouse is over them or they have keyboard focus. -			mFadeTimer.stop(); -		} -		else if(!mClearFaceOnFade && (mInactivityTimer.getElapsedTimeF32() < mInactiveTimeout)) -		{ -			// Mouse is over the object, but has not been stationary for long enough to fade the UI -			mFadeTimer.stop(); -		} -		else if(! mFadeTimer.getStarted() ) -		{ -			// we need to start fading the UI (and we have not already started) -			mFadeTimer.reset(); -			mFadeTimer.start(); -		} -		else -		{ -			// I don't think this is correct anymore.  This is done in draw() after the fade has completed. -			//			setVisible(false); -		} -	} +            S32 left_pad = mSecureURL ? mSecureLockIcon->getRect().getWidth() : ADDR_LEFT_PAD; +            mMediaAddress->setTextPadding(left_pad, 0); + +            if(mCurrentURL!=mPreviousURL) +            { +                setCurrentURL(); +                mPreviousURL = mCurrentURL; +            } + +            if(result == LLPluginClassMediaOwner::MEDIA_LOADING) +            { +                mReloadCtrl->setEnabled(false); +                mReloadCtrl->setVisible(false); +                mStopCtrl->setEnabled(true); +                mStopCtrl->setVisible(has_focus); +            } +            else +            { +                mReloadCtrl->setEnabled(true); +                mReloadCtrl->setVisible(has_focus); +                mStopCtrl->setEnabled(false); +                mStopCtrl->setVisible(false); +            } +        } + + +        if(media_plugin) +        { +            // +            // Handle progress bar +            // +            if(LLPluginClassMediaOwner::MEDIA_LOADING == media_plugin->getStatus()) +            { +                mMediaProgressPanel->setVisible(true); +                mMediaProgressBar->setValue(media_plugin->getProgressPercent()); +            } +            else +            { +                mMediaProgressPanel->setVisible(false); +            } +        } + +        if(media_impl) +        { +            // +            // Handle Scrolling +            // +            switch (mScrollState) +            { +                case SCROLL_UP: +                    media_impl->scrollWheel(0, 0, 0, -1, MASK_NONE); +                    break; +                case SCROLL_DOWN: +                    media_impl->scrollWheel(0, 0, 0, 1, MASK_NONE); +                    break; +                case SCROLL_LEFT: +                    media_impl->scrollWheel(0, 0, 1, 0, MASK_NONE); +                    //              media_impl->handleKeyHere(KEY_LEFT, MASK_NONE); +                    break; +                case SCROLL_RIGHT: +                    media_impl->scrollWheel(0, 0, -1, 0, MASK_NONE); +                    //              media_impl->handleKeyHere(KEY_RIGHT, MASK_NONE); +                    break; +                case SCROLL_NONE: +                default: +                    break; +            } +        } + +        // Web plugins and HUD may have media controls invisible for user, but still need scroll mouse events. +        // LLView checks for visibleEnabledAndContains() and won't pass events to invisible panel, so instead +        // of hiding whole panel hide each control instead (if user has no perms). +        // Note: It might be beneficial to keep panel visible for all plugins to make behavior consistent, but +        // for now limiting change to cases that need events. + +        if (!is_hud && (!media_plugin || media_plugin->pluginSupportsMediaTime())) +        { +            setVisible(enabled); +        } +        else +        { +            if( !hasPermsControl ) +            { +                mBackCtrl->setVisible(false); +                mFwdCtrl->setVisible(false); +                mReloadCtrl->setVisible(false); +                mStopCtrl->setVisible(false); +                mHomeCtrl->setVisible(false); +                mZoomCtrl->setVisible(false); +                mUnzoomCtrl->setVisible(false); +                mOpenCtrl->setVisible(false); +                mMediaAddressCtrl->setVisible(false); +                mMediaPlaySliderPanel->setVisible(false); +                mVolumeCtrl->setVisible(false); +                mMediaProgressPanel->setVisible(false); +                mVolumeSliderCtrl->setVisible(false); +            } + +            setVisible(true); +        } + +        // +        // Calculate position and shape of the controls +        // +        std::vector<LLVector3>::iterator vert_it; +        std::vector<LLVector3>::iterator vert_end; +        std::vector<LLVector3> vect_face; + +        LLVolume* volume = objectp->getVolume(); + +        if (volume) +        { +            const LLVolumeFace& vf = volume->getVolumeFace(mTargetObjectFace); + +            LLVector3 ext[2]; +            ext[0].set(vf.mExtents[0].getF32ptr()); +            ext[1].set(vf.mExtents[1].getF32ptr()); + +            LLVector3 center = (ext[0]+ext[1])*0.5f; +            LLVector3 size = (ext[1]-ext[0])*0.5f; +            LLVector3 vert[] = +            { +                center + size.scaledVec(LLVector3(1,1,1)), +                center + size.scaledVec(LLVector3(-1,1,1)), +                center + size.scaledVec(LLVector3(1,-1,1)), +                center + size.scaledVec(LLVector3(-1,-1,1)), +                center + size.scaledVec(LLVector3(1,1,-1)), +                center + size.scaledVec(LLVector3(-1,1,-1)), +                center + size.scaledVec(LLVector3(1,-1,-1)), +                center + size.scaledVec(LLVector3(-1,-1,-1)), +            }; + +            LLVOVolume* vo = (LLVOVolume*) objectp; + +            for (U32 i = 0; i < 8; i++) +            { +                vect_face.push_back(vo->volumePositionToAgent(vert[i])); +            } +        } +        vert_it = vect_face.begin(); +        vert_end = vect_face.end(); + +        glh::matrix4f mat; +        if (!is_hud) +        { +            mat = get_current_projection() * get_current_modelview(); +        } +        else { +            glh::matrix4f proj, modelview; +            if (get_hud_matrices(proj, modelview)) +                mat = proj * modelview; +        } +        LLVector3 min = LLVector3(1,1,1); +        LLVector3 max = LLVector3(-1,-1,-1); +        for(; vert_it != vert_end; ++vert_it) +        { +            // project silhouette vertices into screen space +            glh::vec3f screen_vert = glh::vec3f(vert_it->mV); +            mat.mult_matrix_vec(screen_vert); + +            // add to screenspace bounding box +            update_min_max(min, max, LLVector3(screen_vert.v)); +        } + +        // convert screenspace bbox to pixels (in screen coords) +        LLRect window_rect = gViewerWindow->getWorldViewRectScaled(); +        LLCoordGL screen_min; +        screen_min.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f); +        screen_min.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f); + +        LLCoordGL screen_max; +        screen_max.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f); +        screen_max.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f); + +        // grow panel so that screenspace bounding box fits inside "media_region" element of panel +        LLRect media_panel_rect; +        // Get the height of the controls (less the volume slider) +        S32 controls_height = mMediaControlsStack->getRect().getHeight() - mVolumeSliderCtrl->getRect().getHeight(); +        getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_panel_rect); +        media_panel_rect.mTop += controls_height; + +        // keep all parts of panel on-screen +        // Area of the top of the world view to avoid putting the controls +        window_rect.mTop -= mTopWorldViewAvoidZone; +        // Don't include "spacing" bookends on left & right of the media controls +        window_rect.mLeft -= mLeftBookend->getRect().getWidth(); +        window_rect.mRight += mRightBookend->getRect().getWidth(); +        // Don't include the volume slider +        window_rect.mBottom -= mVolumeSliderCtrl->getRect().getHeight(); +        media_panel_rect.intersectWith(window_rect); + +        // clamp to minimum size, keeping rect inside window +        S32 centerX = media_panel_rect.getCenterX(); +        S32 centerY = media_panel_rect.getCenterY(); +        // Shrink screen rect by min width and height, to ensure containment +        window_rect.stretch(-mMinWidth/2, -mMinHeight/2); +        window_rect.clampPointToRect(centerX, centerY); +        media_panel_rect.setCenterAndSize(centerX, centerY, +                                          llmax(mMinWidth, media_panel_rect.getWidth()), +                                          llmax(mMinHeight, media_panel_rect.getHeight())); + +        // Finally set the size of the panel +        setShape(media_panel_rect, true); + +        // Test mouse position to see if the cursor is stationary +        LLCoordWindow cursor_pos_window; +        getWindow()->getCursorPosition(&cursor_pos_window); + +        // If last pos is not equal to current pos, the mouse has moved +        // We need to reset the timer, and make sure the panel is visible +        if(cursor_pos_window.mX != mLastCursorPos.mX || +           cursor_pos_window.mY != mLastCursorPos.mY || +           mScrollState != SCROLL_NONE) +        { +            mInactivityTimer.start(); +            mLastCursorPos = cursor_pos_window; +        } + +        if(isMouseOver() || hasFocus()) +        { +            // Never fade the controls if the mouse is over them or they have keyboard focus. +            mFadeTimer.stop(); +        } +        else if(!mClearFaceOnFade && (mInactivityTimer.getElapsedTimeF32() < mInactiveTimeout)) +        { +            // Mouse is over the object, but has not been stationary for long enough to fade the UI +            mFadeTimer.stop(); +        } +        else if(! mFadeTimer.getStarted() ) +        { +            // we need to start fading the UI (and we have not already started) +            mFadeTimer.reset(); +            mFadeTimer.start(); +        } +        else +        { +            // I don't think this is correct anymore.  This is done in draw() after the fade has completed. +            //          setVisible(false); +        } +    }  }  /*virtual*/  void LLPanelPrimMediaControls::draw()  { -	LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if (impl) -	{ -		LLNotificationPtr notification = impl->getCurrentNotification(); -		if (notification != mActiveNotification) -		{ -			mActiveNotification = notification; -			if (notification) -			{ -				showNotification(notification); -			} -			else -			{ -				hideNotification(); -			} -		} -	} - -	F32 alpha = getDrawContext().mAlpha; -	if(mHideImmediately) -	{ -		//hide this panel -		clearFaceOnFade(); - -		mHideImmediately = false; -	} -	else if(mFadeTimer.getStarted()) -	{ -		F32 time = mFadeTimer.getElapsedTimeF32(); -		alpha *= llmax(lerp(1.0, 0.0, time / mControlFadeTime), 0.0f); - -		if(time >= mControlFadeTime) -		{ -			//hide this panel -			clearFaceOnFade(); -		} -	} +    LLViewerMediaImpl* impl = getTargetMediaImpl(); +    if (impl) +    { +        LLNotificationPtr notification = impl->getCurrentNotification(); +        if (notification != mActiveNotification) +        { +            mActiveNotification = notification; +            if (notification) +            { +                showNotification(notification); +            } +            else +            { +                hideNotification(); +            } +        } +    } + +    F32 alpha = getDrawContext().mAlpha; +    if(mHideImmediately) +    { +        //hide this panel +        clearFaceOnFade(); + +        mHideImmediately = false; +    } +    else if(mFadeTimer.getStarted()) +    { +        F32 time = mFadeTimer.getElapsedTimeF32(); +        alpha *= llmax(lerp(1.0, 0.0, time / mControlFadeTime), 0.0f); + +        if(time >= mControlFadeTime) +        { +            //hide this panel +            clearFaceOnFade(); +        } +    }      // Show/hide the lock icon for secure browsing      mSecureLockIcon->setVisible(mSecureURL && !mMediaAddress->hasFocus()); -	 -	// Build rect for icon area in coord system of this panel -	// Assumes layout_stack is a direct child of this panel -	mMediaControlsStack->updateLayout(); -	 -	// adjust for layout stack spacing -	S32 space = mMediaControlsStack->getPanelSpacing() + 2; -	LLRect controls_bg_area = mMediaControlsStack->getRect(); -	 -	controls_bg_area.mTop += space + 2; -	 -	// adjust to ignore space from volume slider -	controls_bg_area.mBottom += mVolumeSliderCtrl->getRect().getHeight(); -	 -	// adjust to ignore space from left bookend padding -	controls_bg_area.mLeft += mLeftBookend->getRect().getWidth() - space; -	 -	// ignore space from right bookend padding -	controls_bg_area.mRight -= mRightBookend->getRect().getWidth() - space - 2; - -	// draw control background UI image -	 -	LLViewerObject* objectp = getTargetObject(); -	LLMediaEntry *media_data(0); - -	if( objectp ) -		media_data = objectp->getTE(mTargetObjectFace)->getMediaData(); - -	if( !dynamic_cast<LLVOVolume*>(objectp) || !media_data || dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL) ) -		mBackgroundImage->draw( controls_bg_area, UI_VERTEX_COLOR % alpha); - -	// draw volume slider background UI image -	if (mVolumeSliderCtrl->getVisible()) -	{ -		LLRect volume_slider_rect; -		screenRectToLocal(mVolumeSliderCtrl->calcScreenRect(), &volume_slider_rect); -		mVolumeSliderBackgroundImage->draw(volume_slider_rect, UI_VERTEX_COLOR % alpha); -	} -	 -	{ -		LLViewDrawContext context(alpha); -		LLPanel::draw(); -	} + +    // Build rect for icon area in coord system of this panel +    // Assumes layout_stack is a direct child of this panel +    mMediaControlsStack->updateLayout(); + +    // adjust for layout stack spacing +    S32 space = mMediaControlsStack->getPanelSpacing() + 2; +    LLRect controls_bg_area = mMediaControlsStack->getRect(); + +    controls_bg_area.mTop += space + 2; + +    // adjust to ignore space from volume slider +    controls_bg_area.mBottom += mVolumeSliderCtrl->getRect().getHeight(); + +    // adjust to ignore space from left bookend padding +    controls_bg_area.mLeft += mLeftBookend->getRect().getWidth() - space; + +    // ignore space from right bookend padding +    controls_bg_area.mRight -= mRightBookend->getRect().getWidth() - space - 2; + +    // draw control background UI image + +    LLViewerObject* objectp = getTargetObject(); +    LLMediaEntry *media_data(0); + +    if( objectp ) +        media_data = objectp->getTE(mTargetObjectFace)->getMediaData(); + +    if( !dynamic_cast<LLVOVolume*>(objectp) || !media_data || dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL) ) +        mBackgroundImage->draw( controls_bg_area, UI_VERTEX_COLOR % alpha); + +    // draw volume slider background UI image +    if (mVolumeSliderCtrl->getVisible()) +    { +        LLRect volume_slider_rect; +        screenRectToLocal(mVolumeSliderCtrl->calcScreenRect(), &volume_slider_rect); +        mVolumeSliderBackgroundImage->draw(volume_slider_rect, UI_VERTEX_COLOR % alpha); +    } + +    { +        LLViewDrawContext context(alpha); +        LLPanel::draw(); +    }  }  bool LLPanelPrimMediaControls::handleScrollWheel(S32 x, S32 y, S32 clicks) @@ -866,606 +866,606 @@ bool LLPanelPrimMediaControls::handleScrollHWheel(S32 x, S32 y, S32 clicks)  bool LLPanelPrimMediaControls::handleMouseDown(S32 x, S32 y, MASK mask)  { -	mInactivityTimer.start(); -	return LLPanel::handleMouseDown(x, y, mask); +    mInactivityTimer.start(); +    return LLPanel::handleMouseDown(x, y, mask);  }  bool LLPanelPrimMediaControls::handleMouseUp(S32 x, S32 y, MASK mask)  { -	mInactivityTimer.start(); -	return LLPanel::handleMouseUp(x, y, mask); +    mInactivityTimer.start(); +    return LLPanel::handleMouseUp(x, y, mask);  }  bool LLPanelPrimMediaControls::handleKeyHere( KEY key, MASK mask )  { -	mInactivityTimer.start(); -	return LLPanel::handleKeyHere(key, mask); +    mInactivityTimer.start(); +    return LLPanel::handleKeyHere(key, mask);  }  bool LLPanelPrimMediaControls::isMouseOver()  { -	bool result = false; -	 -	if( getVisible() ) -	{ -		LLCoordWindow cursor_pos_window; -		LLCoordScreen cursor_pos_screen; -		LLCoordGL cursor_pos_gl; -		S32 x, y; -		getWindow()->getCursorPosition(&cursor_pos_window); -		cursor_pos_gl = cursor_pos_window.convert(); -				 -		if(mMediaControlsStack->getVisible()) -		{ -			mMediaControlsStack->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); - -			LLView *hit_child = mMediaControlsStack->childFromPoint(x, y); -			if(hit_child && hit_child->getVisible()) -			{ -				// This was useful for debugging both coordinate translation and view hieararchy problems... -				// LL_INFOS() << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << LL_ENDL; - -				// This will be a direct child of the LLLayoutStack, which should be a layout_panel. -				// These may not shown/hidden by the logic in updateShape(), so we need to do another hit test on the children of the layout panel, -				// which are the actual controls. -				hit_child->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); -				 -				LLView *hit_child_2 = hit_child->childFromPoint(x, y); -				if(hit_child_2 && hit_child_2->getVisible()) -				{ -					// This was useful for debugging both coordinate translation and view hieararchy problems... -					// LL_INFOS() << "    mouse coords: " << x << ", " << y << " hit child 2 " << hit_child_2->getName() << LL_ENDL; -					result = true; -				} -			} -		} -	} - -	return result; +    bool result = false; + +    if( getVisible() ) +    { +        LLCoordWindow cursor_pos_window; +        LLCoordScreen cursor_pos_screen; +        LLCoordGL cursor_pos_gl; +        S32 x, y; +        getWindow()->getCursorPosition(&cursor_pos_window); +        cursor_pos_gl = cursor_pos_window.convert(); + +        if(mMediaControlsStack->getVisible()) +        { +            mMediaControlsStack->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); + +            LLView *hit_child = mMediaControlsStack->childFromPoint(x, y); +            if(hit_child && hit_child->getVisible()) +            { +                // This was useful for debugging both coordinate translation and view hieararchy problems... +                // LL_INFOS() << "mouse coords: " << x << ", " << y << " hit child " << hit_child->getName() << LL_ENDL; + +                // This will be a direct child of the LLLayoutStack, which should be a layout_panel. +                // These may not shown/hidden by the logic in updateShape(), so we need to do another hit test on the children of the layout panel, +                // which are the actual controls. +                hit_child->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); + +                LLView *hit_child_2 = hit_child->childFromPoint(x, y); +                if(hit_child_2 && hit_child_2->getVisible()) +                { +                    // This was useful for debugging both coordinate translation and view hieararchy problems... +                    // LL_INFOS() << "    mouse coords: " << x << ", " << y << " hit child 2 " << hit_child_2->getName() << LL_ENDL; +                    result = true; +                } +            } +        } +    } + +    return result;  }  void LLPanelPrimMediaControls::onClickClose()  { -	close(); +    close();  }  void LLPanelPrimMediaControls::close()  { -	resetZoomLevel(true); -	LLViewerMediaFocus::getInstance()->clearFocus(); -	setVisible(false); +    resetZoomLevel(true); +    LLViewerMediaFocus::getInstance()->clearFocus(); +    setVisible(false);  }  void LLPanelPrimMediaControls::onClickBack()  { -	focusOnTarget(); - -	LLViewerMediaImpl* impl =getTargetMediaImpl(); -	 -	if (impl) -	{ -		impl->navigateBack(); -	} +    focusOnTarget(); + +    LLViewerMediaImpl* impl =getTargetMediaImpl(); + +    if (impl) +    { +        impl->navigateBack(); +    }  }  void LLPanelPrimMediaControls::onClickForward()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if (impl) -	{ -		impl->navigateForward(); -	} +    if (impl) +    { +        impl->navigateForward(); +    }  }  void LLPanelPrimMediaControls::onClickHome()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl) -	{ -		impl->navigateHome(); -	} +    if(impl) +    { +        impl->navigateHome(); +    }  }  void LLPanelPrimMediaControls::onClickOpen()  { -	LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl) -	{ -		LLWeb::loadURL(impl->getCurrentMediaURL()); -	}	 +    LLViewerMediaImpl* impl = getTargetMediaImpl(); +    if(impl) +    { +        LLWeb::loadURL(impl->getCurrentMediaURL()); +    }  }  void LLPanelPrimMediaControls::onClickReload()  { -	focusOnTarget(); +    focusOnTarget(); -	//LLViewerMedia::navigateHome(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    //LLViewerMedia::navigateHome(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl) -	{ -		impl->navigateReload(); -	} +    if(impl) +    { +        impl->navigateReload(); +    }  }  void LLPanelPrimMediaControls::onClickPlay()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl) -	{ -		impl->play(); -	} +    if(impl) +    { +        impl->play(); +    }  }  void LLPanelPrimMediaControls::onClickPause()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl) -	{ -		impl->pause(); -	} +    if(impl) +    { +        impl->pause(); +    }  }  void LLPanelPrimMediaControls::onClickStop()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl) -	{ -		impl->navigateStop(); -	} +    if(impl) +    { +        impl->navigateStop(); +    }  }  void LLPanelPrimMediaControls::onClickMediaStop()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if(impl) -	{ -		impl->stop(); -	} +    if(impl) +    { +        impl->stop(); +    }  }  void LLPanelPrimMediaControls::onClickSkipBack()  { -	focusOnTarget(); - -	LLViewerMediaImpl* impl =getTargetMediaImpl(); -	 -	if (impl) -	{ -		impl->skipBack(mSkipStep); -	} +    focusOnTarget(); + +    LLViewerMediaImpl* impl =getTargetMediaImpl(); + +    if (impl) +    { +        impl->skipBack(mSkipStep); +    }  }  void LLPanelPrimMediaControls::onClickSkipForward()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* impl = getTargetMediaImpl(); +    LLViewerMediaImpl* impl = getTargetMediaImpl(); -	if (impl) -	{ -		impl->skipForward(mSkipStep); -	} +    if (impl) +    { +        impl->skipForward(mSkipStep); +    }  }  void LLPanelPrimMediaControls::onClickZoom()  { -	focusOnTarget(); -	 -	if(mCurrentZoom == ZOOM_NONE) -	{ -		nextZoomLevel(); -	} +    focusOnTarget(); + +    if(mCurrentZoom == ZOOM_NONE) +    { +        nextZoomLevel(); +    }  }  void LLPanelPrimMediaControls::nextZoomLevel()  { -	LLViewerObject* objectp = getTargetObject(); -	if(objectp && objectp->isHUDAttachment()) -	{ -		// Never allow zooming on HUD attachments. -		return; -	} -	 -	int index = 0; -	while (index < kNumZoomLevels) -	{ -		if (kZoomLevels[index] == mCurrentZoom)  -		{ -			index++; -			break; -		} -		index++; -	} -	mCurrentZoom = kZoomLevels[index % kNumZoomLevels]; -	updateZoom(); +    LLViewerObject* objectp = getTargetObject(); +    if(objectp && objectp->isHUDAttachment()) +    { +        // Never allow zooming on HUD attachments. +        return; +    } + +    int index = 0; +    while (index < kNumZoomLevels) +    { +        if (kZoomLevels[index] == mCurrentZoom) +        { +            index++; +            break; +        } +        index++; +    } +    mCurrentZoom = kZoomLevels[index % kNumZoomLevels]; +    updateZoom();  }  void LLPanelPrimMediaControls::resetZoomLevel(bool reset_camera)  { -	if(mCurrentZoom != ZOOM_NONE) -	{ -		mCurrentZoom = ZOOM_NONE; -		if(reset_camera) -		{ -			updateZoom(); -		} -	} +    if(mCurrentZoom != ZOOM_NONE) +    { +        mCurrentZoom = ZOOM_NONE; +        if(reset_camera) +        { +            updateZoom(); +        } +    }  }  void LLPanelPrimMediaControls::updateZoom()  { -	F32 zoom_padding = 0.0f; -	switch (mCurrentZoom) -	{ -	case ZOOM_NONE: -		{ -			gAgentCamera.setFocusOnAvatar(true, ANIMATE); -			break; -		} -	case ZOOM_FAR: -		{ -			zoom_padding = mZoomFarPadding; -			break; -		} -	case ZOOM_MEDIUM: -		{ -			zoom_padding = mZoomMediumPadding; -			break; -		} -	case ZOOM_NEAR: -		{ -			zoom_padding = mZoomNearPadding; -			break; -		} -	default: -		{ -			gAgentCamera.setFocusOnAvatar(true, ANIMATE); -			break; -		} -	} - -	if (zoom_padding > 0.0f) -	{	 -		// since we only zoom into medium for now, always set zoom_in constraint to true -		mZoomedCameraPos = LLViewerMediaFocus::setCameraZoom(getTargetObject(), mTargetObjectNormal, zoom_padding, true); -	} -	 -	// Remember the object ID/face we zoomed into, so we can update the zoom icon appropriately -	mZoomObjectID = mTargetObjectID; -	mZoomObjectFace = mTargetObjectFace; +    F32 zoom_padding = 0.0f; +    switch (mCurrentZoom) +    { +    case ZOOM_NONE: +        { +            gAgentCamera.setFocusOnAvatar(true, ANIMATE); +            break; +        } +    case ZOOM_FAR: +        { +            zoom_padding = mZoomFarPadding; +            break; +        } +    case ZOOM_MEDIUM: +        { +            zoom_padding = mZoomMediumPadding; +            break; +        } +    case ZOOM_NEAR: +        { +            zoom_padding = mZoomNearPadding; +            break; +        } +    default: +        { +            gAgentCamera.setFocusOnAvatar(true, ANIMATE); +            break; +        } +    } + +    if (zoom_padding > 0.0f) +    { +        // since we only zoom into medium for now, always set zoom_in constraint to true +        mZoomedCameraPos = LLViewerMediaFocus::setCameraZoom(getTargetObject(), mTargetObjectNormal, zoom_padding, true); +    } + +    // Remember the object ID/face we zoomed into, so we can update the zoom icon appropriately +    mZoomObjectID = mTargetObjectID; +    mZoomObjectFace = mTargetObjectFace;  }  void LLPanelPrimMediaControls::onScrollUp(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->focusOnTarget(); - -	LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); -	 -	if(impl) -	{ -		impl->scrollWheel(0, 0, 0, -1, MASK_NONE); -	} +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->focusOnTarget(); + +    LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); + +    if(impl) +    { +        impl->scrollWheel(0, 0, 0, -1, MASK_NONE); +    }  }  void LLPanelPrimMediaControls::onScrollUpHeld(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->mScrollState = SCROLL_UP; +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->mScrollState = SCROLL_UP;  }  void LLPanelPrimMediaControls::onScrollRight(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->focusOnTarget(); +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->focusOnTarget(); -	LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); +    LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); -	if(impl) -	{ -		impl->scrollWheel(0, 0, -1, 0, MASK_NONE); -//		impl->handleKeyHere(KEY_RIGHT, MASK_NONE); -	} +    if(impl) +    { +        impl->scrollWheel(0, 0, -1, 0, MASK_NONE); +//      impl->handleKeyHere(KEY_RIGHT, MASK_NONE); +    }  }  void LLPanelPrimMediaControls::onScrollRightHeld(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->mScrollState = SCROLL_RIGHT; +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->mScrollState = SCROLL_RIGHT;  }  void LLPanelPrimMediaControls::onScrollLeft(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->focusOnTarget(); +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->focusOnTarget(); -	LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); +    LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); -	if(impl) -	{ -		impl->scrollWheel(0, 0, 1, 0, MASK_NONE); -//		impl->handleKeyHere(KEY_LEFT, MASK_NONE); -	} +    if(impl) +    { +        impl->scrollWheel(0, 0, 1, 0, MASK_NONE); +//      impl->handleKeyHere(KEY_LEFT, MASK_NONE); +    }  }  void LLPanelPrimMediaControls::onScrollLeftHeld(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->mScrollState = SCROLL_LEFT; +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->mScrollState = SCROLL_LEFT;  }  void LLPanelPrimMediaControls::onScrollDown(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->focusOnTarget(); - -	LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); -	 -	if(impl) -	{ -		impl->scrollWheel(0, 0, 0, 1, MASK_NONE); -	} +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->focusOnTarget(); + +    LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); + +    if(impl) +    { +        impl->scrollWheel(0, 0, 0, 1, MASK_NONE); +    }  }  void LLPanelPrimMediaControls::onScrollDownHeld(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->mScrollState = SCROLL_DOWN; +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->mScrollState = SCROLL_DOWN;  }  void LLPanelPrimMediaControls::onScrollStop(void* user_data)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); -	this_panel->mScrollState = SCROLL_NONE; +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); +    this_panel->mScrollState = SCROLL_NONE;  }  void LLPanelPrimMediaControls::onCommitURL()  { -	focusOnTarget(); - -	std::string url = mMediaAddress->getValue().asString(); -	if(getTargetMediaImpl() && !url.empty()) -	{ -		getTargetMediaImpl()->navigateTo( url, "", true); - -		// Make sure keyboard focus is set to the media focus object. -		gFocusMgr.setKeyboardFocus(LLViewerMediaFocus::getInstance()); -			 -	} -	mPauseFadeout = false; -	mFadeTimer.start(); +    focusOnTarget(); + +    std::string url = mMediaAddress->getValue().asString(); +    if(getTargetMediaImpl() && !url.empty()) +    { +        getTargetMediaImpl()->navigateTo( url, "", true); + +        // Make sure keyboard focus is set to the media focus object. +        gFocusMgr.setKeyboardFocus(LLViewerMediaFocus::getInstance()); + +    } +    mPauseFadeout = false; +    mFadeTimer.start();  }  void LLPanelPrimMediaControls::onInputURL(LLFocusableElement* caller, void *userdata)  { -	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (userdata); -	this_panel->focusOnTarget(); +    LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (userdata); +    this_panel->focusOnTarget(); + +    this_panel->mPauseFadeout = true; +    this_panel->mFadeTimer.stop(); +    this_panel->mFadeTimer.reset(); -	this_panel->mPauseFadeout = true; -	this_panel->mFadeTimer.stop(); -	this_panel->mFadeTimer.reset(); -	  }  void LLPanelPrimMediaControls::setCurrentURL() -{	 +{  #ifdef USE_COMBO_BOX_FOR_MEDIA_URL -//	LLComboBox* media_address_combo	= getChild<LLComboBox>("media_address_combo"); -//	// redirects will navigate momentarily to about:blank, don't add to history -//	if (media_address_combo && mCurrentURL != "about:blank") -//	{ -//		media_address_combo->remove(mCurrentURL); -//		media_address_combo->add(mCurrentURL); -//		media_address_combo->selectByValue(mCurrentURL); -//	} +//  LLComboBox* media_address_combo = getChild<LLComboBox>("media_address_combo"); +//  // redirects will navigate momentarily to about:blank, don't add to history +//  if (media_address_combo && mCurrentURL != "about:blank") +//  { +//      media_address_combo->remove(mCurrentURL); +//      media_address_combo->add(mCurrentURL); +//      media_address_combo->selectByValue(mCurrentURL); +//  }  #else   // USE_COMBO_BOX_FOR_MEDIA_URL -	if (mMediaAddress && mCurrentURL != "about:blank") -	{ -		mMediaAddress->setValue(mCurrentURL); -	} -#endif	// USE_COMBO_BOX_FOR_MEDIA_URL +    if (mMediaAddress && mCurrentURL != "about:blank") +    { +        mMediaAddress->setValue(mCurrentURL); +    } +#endif  // USE_COMBO_BOX_FOR_MEDIA_URL  }  void LLPanelPrimMediaControls::onMediaPlaySliderCtrlMouseDown()  { -	mMediaPlaySliderCtrlMouseDownValue = mMediaPlaySliderCtrl->getValue().asReal(); +    mMediaPlaySliderCtrlMouseDownValue = mMediaPlaySliderCtrl->getValue().asReal(); -	mUpdateSlider = false; +    mUpdateSlider = false;  }  void LLPanelPrimMediaControls::onMediaPlaySliderCtrlMouseUp()  { -	F64 cur_value = mMediaPlaySliderCtrl->getValue().asReal(); - -	if (mMediaPlaySliderCtrlMouseDownValue != cur_value) -	{ -		focusOnTarget(); - -		LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -		if (media_impl) -		{ -			if (cur_value <= 0.0) -			{ -				media_impl->stop(); -			} -			else -			{ -				media_impl->seek(cur_value * mMovieDuration); -			} -		} - -		mUpdateSlider = true; -	} +    F64 cur_value = mMediaPlaySliderCtrl->getValue().asReal(); + +    if (mMediaPlaySliderCtrlMouseDownValue != cur_value) +    { +        focusOnTarget(); + +        LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +        if (media_impl) +        { +            if (cur_value <= 0.0) +            { +                media_impl->stop(); +            } +            else +            { +                media_impl->seek(cur_value * mMovieDuration); +            } +        } + +        mUpdateSlider = true; +    }  }  void LLPanelPrimMediaControls::onCommitVolumeUp()  { -	focusOnTarget(); - -	LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -	if (media_impl)  -	{ -		F32 volume = media_impl->getVolume(); -		 -		volume += 0.1f; -		if(volume >= 1.0f) -		{ -			volume = 1.0f; -		} -		 -		media_impl->setVolume(volume); -		mMuteBtn->setToggleState(false); -	} -}		 +    focusOnTarget(); + +    LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +    if (media_impl) +    { +        F32 volume = media_impl->getVolume(); + +        volume += 0.1f; +        if(volume >= 1.0f) +        { +            volume = 1.0f; +        } + +        media_impl->setVolume(volume); +        mMuteBtn->setToggleState(false); +    } +}  void LLPanelPrimMediaControls::onCommitVolumeDown()  { -	focusOnTarget(); - -	LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -	if (media_impl)  -	{ -		F32 volume = media_impl->getVolume(); -		 -		volume -= 0.1f; -		if(volume <= 0.0f) -		{ -			volume = 0.0f; -		} - -		media_impl->setVolume(volume); -		mMuteBtn->setToggleState(false); -	} -}		 +    focusOnTarget(); + +    LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +    if (media_impl) +    { +        F32 volume = media_impl->getVolume(); + +        volume -= 0.1f; +        if(volume <= 0.0f) +        { +            volume = 0.0f; +        } + +        media_impl->setVolume(volume); +        mMuteBtn->setToggleState(false); +    } +}  void LLPanelPrimMediaControls::onCommitVolumeSlider()  { -	focusOnTarget(); +    focusOnTarget(); -	LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -	if (media_impl)  -	{ -		media_impl->setVolume(mVolumeSliderCtrl->getValueF32()); -	} +    LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +    if (media_impl) +    { +        media_impl->setVolume(mVolumeSliderCtrl->getValueF32()); +    }  }  void LLPanelPrimMediaControls::onToggleMute()  { -	focusOnTarget(); - -	LLViewerMediaImpl* media_impl = getTargetMediaImpl(); -	if (media_impl)  -	{ -		F32 volume = media_impl->getVolume(); -		 -		if(volume > 0.0) -		{ -			media_impl->setVolume(0.0); -		} -		else if (mVolumeSliderCtrl->getValueF32() == 0.0) -		{ -			media_impl->setVolume(1.0); -			mVolumeSliderCtrl->setValue(1.0); -		} -		else  -		{ -			media_impl->setVolume(mVolumeSliderCtrl->getValueF32()); -		} -	} +    focusOnTarget(); + +    LLViewerMediaImpl* media_impl = getTargetMediaImpl(); +    if (media_impl) +    { +        F32 volume = media_impl->getVolume(); + +        if(volume > 0.0) +        { +            media_impl->setVolume(0.0); +        } +        else if (mVolumeSliderCtrl->getValueF32() == 0.0) +        { +            media_impl->setVolume(1.0); +            mVolumeSliderCtrl->setValue(1.0); +        } +        else +        { +            media_impl->setVolume(mVolumeSliderCtrl->getValueF32()); +        } +    }  }  void LLPanelPrimMediaControls::showVolumeSlider()  { -	mVolumeSliderVisible++; +    mVolumeSliderVisible++;  }  void LLPanelPrimMediaControls::hideVolumeSlider()  { -	mVolumeSliderVisible--; +    mVolumeSliderVisible--;  }  bool LLPanelPrimMediaControls::shouldVolumeSliderBeVisible()  { -	return mVolumeSliderVisible > 0; +    return mVolumeSliderVisible > 0;  }  bool LLPanelPrimMediaControls::isZoomDistExceeding()  { -	return (gAgentCamera.getCameraPositionGlobal() - mZoomedCameraPos).normalize() >= EXCEEDING_ZOOM_DISTANCE; +    return (gAgentCamera.getCameraPositionGlobal() - mZoomedCameraPos).normalize() >= EXCEEDING_ZOOM_DISTANCE;  }  void LLPanelPrimMediaControls::clearFaceOnFade()  { -	if(mClearFaceOnFade) -	{ -		// Hiding this object makes scroll events go missing after it fades out -		// (see DEV-41755 for a full description of the train wreck). -		// Only hide the controls when we're untargeting. -		setVisible(false); - -		mClearFaceOnFade = false; -		mVolumeSliderVisible = 0; -		mTargetImplID = LLUUID::null; -		mTargetObjectID = LLUUID::null; -		mTargetObjectFace = 0; -	} +    if(mClearFaceOnFade) +    { +        // Hiding this object makes scroll events go missing after it fades out +        // (see DEV-41755 for a full description of the train wreck). +        // Only hide the controls when we're untargeting. +        setVisible(false); + +        mClearFaceOnFade = false; +        mVolumeSliderVisible = 0; +        mTargetImplID = LLUUID::null; +        mTargetObjectID = LLUUID::null; +        mTargetObjectFace = 0; +    }  }  void LLPanelPrimMediaControls::onMouselookModeIn()  { -	LLViewerMediaFocus::getInstance()->clearHover(); -	mHideImmediately = true; +    LLViewerMediaFocus::getInstance()->clearHover(); +    mHideImmediately = true;  }  void LLPanelPrimMediaControls::showNotification(LLNotificationPtr notify)  { -	delete mWindowShade; -	LLWindowShade::Params params; -	params.rect = mMediaRegion->getLocalRect(); -	params.follows.flags = FOLLOWS_ALL; - -	//HACK: don't hardcode this -	if (notify->getIcon() == "Popup_Caution") -	{ -		params.bg_image.name = "Yellow_Gradient"; -		params.text_color = LLColor4::black; -	} -	else -	{ -		//HACK: make this a property of the notification itself, "cancellable" -		params.can_close = false; -		params.text_color.control = "LabelTextColor"; -	} - -	mWindowShade = LLUICtrlFactory::create<LLWindowShade>(params); - -	mMediaRegion->addChild(mWindowShade); -	mWindowShade->show(notify); +    delete mWindowShade; +    LLWindowShade::Params params; +    params.rect = mMediaRegion->getLocalRect(); +    params.follows.flags = FOLLOWS_ALL; + +    //HACK: don't hardcode this +    if (notify->getIcon() == "Popup_Caution") +    { +        params.bg_image.name = "Yellow_Gradient"; +        params.text_color = LLColor4::black; +    } +    else +    { +        //HACK: make this a property of the notification itself, "cancellable" +        params.can_close = false; +        params.text_color.control = "LabelTextColor"; +    } + +    mWindowShade = LLUICtrlFactory::create<LLWindowShade>(params); + +    mMediaRegion->addChild(mWindowShade); +    mWindowShade->show(notify);  }  void LLPanelPrimMediaControls::hideNotification()  { -	if (mWindowShade) -	{ -		mWindowShade->hide(); -	} +    if (mWindowShade) +    { +        mWindowShade->hide(); +    }  }  | 
