diff options
-rw-r--r-- | indra/llui/lllayoutstack.h | 5 | ||||
-rw-r--r-- | indra/newview/llpanelprimmediacontrols.cpp | 374 | ||||
-rw-r--r-- | indra/newview/llpanelprimmediacontrols.h | 45 | ||||
-rw-r--r-- | indra/newview/llviewermedia.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llviewermedia.h | 3 | ||||
-rw-r--r-- | indra/newview/llviewerparcelmedia.cpp | 26 | ||||
-rw-r--r-- | indra/newview/llviewerparcelmedia.h | 2 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_prim_media_controls.xml | 274 |
8 files changed, 417 insertions, 318 deletions
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index 3a073fa1b2..9cbcb285dc 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -81,8 +81,8 @@ public: S32 getNumPanels() { return mPanels.size(); } void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize); - - + + void updateLayout(BOOL force_resize = FALSE); static void updateClass(); protected: @@ -92,7 +92,6 @@ protected: private: struct LayoutPanel; - void updateLayout(BOOL force_resize = FALSE); void calcMinExtents(); S32 getDefaultHeight(S32 cur_height); S32 getDefaultWidth(S32 cur_width); diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 24de2dcdfc..12ad070efd 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -44,6 +44,7 @@ #include "llbutton.h" #include "llface.h" #include "llcombobox.h" +#include "lllayoutstack.h" #include "llslider.h" #include "llhudview.h" #include "lliconctrl.h" @@ -84,8 +85,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() : mUpdateSlider(true), mClearFaceOnFade(false), mCurrentRate(0.0), - mMovieDuration(0.0), - mUpdatePercent(0) + mMovieDuration(0.0) { mCommitCallbackRegistrar.add("MediaCtrl.Close", boost::bind(&LLPanelPrimMediaControls::onClickClose, this)); mCommitCallbackRegistrar.add("MediaCtrl.Back", boost::bind(&LLPanelPrimMediaControls::onClickBack, this)); @@ -117,37 +117,69 @@ LLPanelPrimMediaControls::~LLPanelPrimMediaControls() BOOL LLPanelPrimMediaControls::postBuild() { - LLButton* scroll_up_ctrl = getChild<LLButton>("scrollup"); - if (scroll_up_ctrl) + 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<LLUICtrl>("media_address_url"); + mMediaPlaySliderPanel = getChild<LLUICtrl>("media_play_position"); + mMediaPlaySliderCtrl = getChild<LLUICtrl>("media_play_slider"); + mVolumeCtrl = getChild<LLUICtrl>("media_volume"); + mVolumeBtn = getChild<LLButton>("media_volume_button"); + mVolumeUpCtrl = getChild<LLUICtrl>("volume_up"); + mVolumeDownCtrl = getChild<LLUICtrl>("volume_down"); + 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")); + + // 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) { - scroll_up_ctrl->setClickedCallback(onScrollUp, this); - scroll_up_ctrl->setHeldDownCallback(onScrollUpHeld, this); - scroll_up_ctrl->setMouseUpCallback(onScrollStop, this); + mScrollUpCtrl->setClickedCallback(onScrollUp, this); + mScrollUpCtrl->setHeldDownCallback(onScrollUpHeld, this); + mScrollUpCtrl->setMouseUpCallback(onScrollStop, this); } - LLButton* scroll_left_ctrl = getChild<LLButton>("scrollleft"); - if (scroll_left_ctrl) + if (mScrollLeftCtrl) { - scroll_left_ctrl->setClickedCallback(onScrollLeft, this); - scroll_left_ctrl->setHeldDownCallback(onScrollLeftHeld, this); - scroll_left_ctrl->setMouseUpCallback(onScrollStop, this); + mScrollLeftCtrl->setClickedCallback(onScrollLeft, this); + mScrollLeftCtrl->setHeldDownCallback(onScrollLeftHeld, this); + mScrollLeftCtrl->setMouseUpCallback(onScrollStop, this); } - LLButton* scroll_right_ctrl = getChild<LLButton>("scrollright"); - if (scroll_right_ctrl) + if (mScrollRightCtrl) { - scroll_right_ctrl->setClickedCallback(onScrollRight, this); - scroll_right_ctrl->setHeldDownCallback(onScrollRightHeld, this); - scroll_right_ctrl->setMouseUpCallback(onScrollStop, this); + mScrollRightCtrl->setClickedCallback(onScrollRight, this); + mScrollRightCtrl->setHeldDownCallback(onScrollRightHeld, this); + mScrollRightCtrl->setMouseUpCallback(onScrollStop, this); } - LLButton* scroll_down_ctrl = getChild<LLButton>("scrolldown"); - if (scroll_down_ctrl) + if (mScrollDownCtrl) { - scroll_down_ctrl->setClickedCallback(onScrollDown, this); - scroll_down_ctrl->setHeldDownCallback(onScrollDownHeld, this); - scroll_down_ctrl->setMouseUpCallback(onScrollStop, this); + mScrollDownCtrl->setClickedCallback(onScrollDown, this); + mScrollDownCtrl->setHeldDownCallback(onScrollDownHeld, this); + mScrollDownCtrl->setMouseUpCallback(onScrollStop, this); } - LLUICtrl* media_address = getChild<LLUICtrl>("media_address"); - media_address->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this )); + mMediaAddress->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this )); mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout"); mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime"); @@ -261,90 +293,63 @@ void LLPanelPrimMediaControls::updateShape() // // Set the state of the buttons // - LLUICtrl* back_ctrl = getChild<LLUICtrl>("back"); - LLUICtrl* fwd_ctrl = getChild<LLUICtrl>("fwd"); - LLUICtrl* reload_ctrl = getChild<LLUICtrl>("reload"); - LLUICtrl* play_ctrl = getChild<LLUICtrl>("play"); - LLUICtrl* pause_ctrl = getChild<LLUICtrl>("pause"); - LLUICtrl* stop_ctrl = getChild<LLUICtrl>("stop"); - LLUICtrl* media_stop_ctrl = getChild<LLUICtrl>("media_stop"); - LLUICtrl* home_ctrl = getChild<LLUICtrl>("home"); - LLUICtrl* unzoom_ctrl = getChild<LLUICtrl>("close"); // This is actually "unzoom" - LLUICtrl* open_ctrl = getChild<LLUICtrl>("new_window"); - LLUICtrl* zoom_ctrl = getChild<LLUICtrl>("zoom_frame"); - LLPanel* media_loading_panel = getChild<LLPanel>("media_progress_indicator"); - LLUICtrl* media_address_ctrl = getChild<LLUICtrl>("media_address"); - LLUICtrl* media_play_slider_panel = getChild<LLUICtrl>("media_play_position"); - LLUICtrl* media_play_slider_ctrl = getChild<LLUICtrl>("media_play_slider"); - LLUICtrl* volume_ctrl = getChild<LLUICtrl>("media_volume"); - LLButton* volume_btn = getChild<LLButton>("media_volume_button"); - LLUICtrl* volume_up_ctrl = getChild<LLUICtrl>("volume_up"); - LLUICtrl* volume_down_ctrl = getChild<LLUICtrl>("volume_down"); - LLIconCtrl* whitelist_icon = getChild<LLIconCtrl>("media_whitelist_flag"); - LLIconCtrl* secure_lock_icon = getChild<LLIconCtrl>("media_secure_lock_flag"); - - LLUICtrl* media_panel_scroll = getChild<LLUICtrl>("media_panel_scroll"); - LLUICtrl* scroll_up_ctrl = getChild<LLUICtrl>("scrollup"); - LLUICtrl* scroll_left_ctrl = getChild<LLUICtrl>("scrollleft"); - LLUICtrl* scroll_right_ctrl = getChild<LLUICtrl>("scrollright"); - LLUICtrl* scroll_down_ctrl = getChild<LLUICtrl>("scrolldown"); // 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. - back_ctrl->setVisible(has_focus); - fwd_ctrl->setVisible(has_focus); - reload_ctrl->setVisible(has_focus); - stop_ctrl->setVisible(false); - home_ctrl->setVisible(has_focus); - zoom_ctrl->setVisible(!is_zoomed); - unzoom_ctrl->setVisible(has_focus && is_zoomed); - open_ctrl->setVisible(true); - media_address_ctrl->setVisible(has_focus && !mini_controls); - media_play_slider_panel->setVisible(has_focus && !mini_controls); - volume_ctrl->setVisible(false); - volume_up_ctrl->setVisible(false); - volume_down_ctrl->setVisible(false); + 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(has_focus && is_zoomed); + mOpenCtrl->setVisible(true); + mMediaAddressCtrl->setVisible(has_focus && !mini_controls); + mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); + mVolumeCtrl->setVisible(false); + mVolumeUpCtrl->setVisible(false); + mVolumeDownCtrl->setVisible(false); - whitelist_icon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false); + mWhitelistIcon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false); // Disable zoom if HUD - zoom_ctrl->setEnabled(!objectp->isHUDAttachment()); - unzoom_ctrl->setEnabled(!objectp->isHUDAttachment()); - secure_lock_icon->setVisible(false); + mZoomCtrl->setEnabled(!objectp->isHUDAttachment()); + mUnzoomCtrl->setEnabled(!objectp->isHUDAttachment()); + mSecureLockIcon->setVisible(false); mCurrentURL = media_impl->getCurrentMediaURL(); - back_ctrl->setEnabled((media_impl != NULL) && media_impl->canNavigateBack() && can_navigate); - fwd_ctrl->setEnabled((media_impl != NULL) && media_impl->canNavigateForward() && can_navigate); - stop_ctrl->setEnabled(has_focus && can_navigate); - home_ctrl->setEnabled(has_focus && can_navigate); + 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; if(media_plugin && media_plugin->pluginSupportsMediaTime()) { - reload_ctrl->setEnabled(FALSE); - reload_ctrl->setVisible(FALSE); - media_stop_ctrl->setVisible(has_focus); - home_ctrl->setVisible(FALSE); - back_ctrl->setEnabled(has_focus); - fwd_ctrl->setEnabled(has_focus); - media_address_ctrl->setVisible(false); - media_address_ctrl->setEnabled(false); - media_play_slider_panel->setVisible(has_focus && !mini_controls); - media_play_slider_panel->setEnabled(has_focus && !mini_controls); + mReloadCtrl->setEnabled(FALSE); + mReloadCtrl->setVisible(FALSE); + mMediaStopCtrl->setVisible(has_focus); + mHomeCtrl->setVisible(FALSE); + mBackCtrl->setEnabled(has_focus); + mFwdCtrl->setEnabled(has_focus); + mMediaAddressCtrl->setVisible(false); + mMediaAddressCtrl->setEnabled(false); + mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); + mMediaPlaySliderPanel->setEnabled(has_focus && !mini_controls); - volume_ctrl->setVisible(has_focus); - volume_up_ctrl->setVisible(has_focus); - volume_down_ctrl->setVisible(has_focus); - volume_ctrl->setEnabled(has_focus); - - whitelist_icon->setVisible(false); - secure_lock_icon->setVisible(false); - if (media_panel_scroll) + mVolumeCtrl->setVisible(has_focus); + mVolumeUpCtrl->setVisible(has_focus); + mVolumeDownCtrl->setVisible(has_focus); + mVolumeCtrl->setEnabled(has_focus); + + mWhitelistIcon->setVisible(false); + mSecureLockIcon->setVisible(false); + if (mMediaPanelScroll) { - media_panel_scroll->setVisible(false); - scroll_up_ctrl->setVisible(false); - scroll_left_ctrl->setVisible(false); - scroll_right_ctrl->setVisible(false); - scroll_down_ctrl->setVisible(false); + mMediaPanelScroll->setVisible(false); + mScrollUpCtrl->setVisible(false); + mScrollDownCtrl->setVisible(false); + mScrollRightCtrl->setVisible(false); + mScrollDownCtrl->setVisible(false); } F32 volume = media_impl->getVolume(); @@ -358,8 +363,8 @@ void LLPanelPrimMediaControls::updateShape() if(mMovieDuration == 0) { mMovieDuration = media_plugin->getDuration(); - media_play_slider_ctrl->setValue(0); - media_play_slider_ctrl->setEnabled(false); + mMediaPlaySliderCtrl->setValue(0); + mMediaPlaySliderCtrl->setEnabled(false); } // TODO: What if it's not fully loaded @@ -367,48 +372,48 @@ void LLPanelPrimMediaControls::updateShape() { F64 current_time = media_plugin->getCurrentTime(); F32 percent = current_time / mMovieDuration; - media_play_slider_ctrl->setValue(percent); - media_play_slider_ctrl->setEnabled(true); + mMediaPlaySliderCtrl->setValue(percent); + mMediaPlaySliderCtrl->setEnabled(true); } // video vloume if(volume <= 0.0) { - volume_up_ctrl->setEnabled(TRUE); - volume_down_ctrl->setEnabled(FALSE); + mVolumeUpCtrl->setEnabled(TRUE); + mVolumeDownCtrl->setEnabled(FALSE); media_impl->setVolume(0.0); - volume_btn->setToggleState(true); + mVolumeBtn->setToggleState(true); } else if (volume >= 1.0) { - volume_up_ctrl->setEnabled(FALSE); - volume_down_ctrl->setEnabled(TRUE); + mVolumeUpCtrl->setEnabled(FALSE); + mVolumeDownCtrl->setEnabled(TRUE); media_impl->setVolume(1.0); - volume_btn->setToggleState(false); + mVolumeBtn->setToggleState(false); } else { - volume_up_ctrl->setEnabled(TRUE); - volume_down_ctrl->setEnabled(TRUE); + mVolumeUpCtrl->setEnabled(TRUE); + mVolumeDownCtrl->setEnabled(TRUE); } switch(result) { case LLPluginClassMediaOwner::MEDIA_PLAYING: - play_ctrl->setEnabled(FALSE); - play_ctrl->setVisible(FALSE); - pause_ctrl->setEnabled(TRUE); - pause_ctrl->setVisible(has_focus); - media_stop_ctrl->setEnabled(TRUE); + mPlayCtrl->setEnabled(FALSE); + mPlayCtrl->setVisible(FALSE); + mPauseCtrl->setEnabled(TRUE); + mPauseCtrl->setVisible(has_focus); + mMediaStopCtrl->setEnabled(TRUE); break; case LLPluginClassMediaOwner::MEDIA_PAUSED: default: - pause_ctrl->setEnabled(FALSE); - pause_ctrl->setVisible(FALSE); - play_ctrl->setEnabled(TRUE); - play_ctrl->setVisible(has_focus); - media_stop_ctrl->setEnabled(FALSE); + mPauseCtrl->setEnabled(FALSE); + mPauseCtrl->setVisible(FALSE); + mPlayCtrl->setEnabled(TRUE); + mPlayCtrl->setVisible(has_focus); + mMediaStopCtrl->setEnabled(FALSE); break; } } @@ -423,28 +428,28 @@ void LLPanelPrimMediaControls::updateShape() mCurrentURL.clear(); } - play_ctrl->setVisible(FALSE); - pause_ctrl->setVisible(FALSE); - media_stop_ctrl->setVisible(FALSE); - media_address_ctrl->setVisible(has_focus && !mini_controls); - media_address_ctrl->setEnabled(has_focus && !mini_controls); - media_play_slider_panel->setVisible(FALSE); - media_play_slider_panel->setEnabled(FALSE); + 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); - volume_ctrl->setVisible(FALSE); - volume_up_ctrl->setVisible(FALSE); - volume_down_ctrl->setVisible(FALSE); - volume_ctrl->setEnabled(FALSE); - volume_up_ctrl->setEnabled(FALSE); - volume_down_ctrl->setEnabled(FALSE); + mVolumeCtrl->setVisible(FALSE); + mVolumeUpCtrl->setVisible(FALSE); + mVolumeDownCtrl->setVisible(FALSE); + mVolumeCtrl->setEnabled(FALSE); + mVolumeUpCtrl->setEnabled(FALSE); + mVolumeDownCtrl->setEnabled(FALSE); - if (media_panel_scroll) + if (mMediaPanelScroll) { - media_panel_scroll->setVisible(has_focus); - scroll_up_ctrl->setVisible(has_focus); - scroll_left_ctrl->setVisible(has_focus); - scroll_right_ctrl->setVisible(has_focus); - scroll_down_ctrl->setVisible(has_focus); + 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://"); @@ -452,7 +457,7 @@ void LLPanelPrimMediaControls::updateShape() LLStringUtil::toLower(test_prefix); if(test_prefix == prefix) { - secure_lock_icon->setVisible(has_focus); + mSecureLockIcon->setVisible(has_focus); } if(mCurrentURL!=mPreviousURL) @@ -463,17 +468,17 @@ void LLPanelPrimMediaControls::updateShape() if(result == LLPluginClassMediaOwner::MEDIA_LOADING) { - reload_ctrl->setEnabled(FALSE); - reload_ctrl->setVisible(FALSE); - stop_ctrl->setEnabled(TRUE); - stop_ctrl->setVisible(has_focus); + mReloadCtrl->setEnabled(FALSE); + mReloadCtrl->setVisible(FALSE); + mStopCtrl->setEnabled(TRUE); + mStopCtrl->setVisible(has_focus); } else { - reload_ctrl->setEnabled(TRUE); - reload_ctrl->setVisible(has_focus); - stop_ctrl->setEnabled(FALSE); - stop_ctrl->setVisible(FALSE); + mReloadCtrl->setEnabled(TRUE); + mReloadCtrl->setVisible(has_focus); + mStopCtrl->setEnabled(FALSE); + mStopCtrl->setVisible(FALSE); } } @@ -483,16 +488,15 @@ void LLPanelPrimMediaControls::updateShape() // // Handle progress bar // - mUpdatePercent = media_plugin->getProgressPercent(); - if(mUpdatePercent<100.0f) - { - media_loading_panel->setVisible(true); - getChild<LLProgressBar>("media_progress_bar")->setPercent(mUpdatePercent); - gFocusMgr.setTopCtrl(media_loading_panel); + if(LLPluginClassMediaOwner::MEDIA_LOADING == media_plugin->getStatus()) + { + mMediaProgressPanel->setVisible(true); + mMediaProgressBar->setPercent(media_plugin->getProgressPercent()); + gFocusMgr.setTopCtrl(mMediaProgressPanel); } else { - media_loading_panel->setVisible(false); + mMediaProgressPanel->setVisible(false); gFocusMgr.setTopCtrl(NULL); } } @@ -589,11 +593,10 @@ void LLPanelPrimMediaControls::updateShape() // grow panel so that screenspace bounding box fits inside "media_region" element of HUD LLRect media_controls_rect; getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_controls_rect); - LLView* media_region = getChild<LLView>("media_region"); - media_controls_rect.mLeft -= media_region->getRect().mLeft; - media_controls_rect.mBottom -= media_region->getRect().mBottom; - media_controls_rect.mTop += getRect().getHeight() - media_region->getRect().mTop; - media_controls_rect.mRight += getRect().getWidth() - media_region->getRect().mRight; + media_controls_rect.mLeft -= mMediaRegion->getRect().mLeft; + media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom; + media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop; + media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight; LLRect old_hud_rect = media_controls_rect; // keep all parts of HUD on-screen @@ -669,6 +672,20 @@ void LLPanelPrimMediaControls::draw() } } + // Build rect for icon area in coord system of this panel + // Assumes layout_stack is a direct child of this panel + mMediaControlsStack->updateLayout(); + LLRect icon_area = mMediaControlsStack->getRect(); + + // adjust to ignore space from left bookend padding + icon_area.mLeft += mLeftBookend->getRect().getWidth(); + + // ignore space from right bookend padding + icon_area.mRight -= mRightBookend->getRect().getWidth(); + + // get UI image + mBackgroundImage->draw( icon_area, UI_VERTEX_COLOR % alpha); + { LLViewDrawContext context(alpha); LLPanel::draw(); @@ -711,16 +728,12 @@ bool LLPanelPrimMediaControls::isMouseOver() S32 x, y; getWindow()->getCursorPosition(&cursor_pos_window); getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl); - - LLView* controls_view = NULL; - controls_view = getChild<LLView>("media_controls"); - - //FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow? - if(controls_view && controls_view->getVisible()) + + if(mMediaControlsStack->getVisible()) { - controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); + mMediaControlsStack->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y); - LLView *hit_child = controls_view->childFromPoint(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... @@ -1002,8 +1015,7 @@ void LLPanelPrimMediaControls::onCommitURL() { focusOnTarget(); - LLUICtrl *media_address_ctrl = getChild<LLUICtrl>("media_address_url"); - std::string url = media_address_ctrl->getValue().asString(); + std::string url = mMediaAddress->getValue().asString(); if(getTargetMediaImpl() && !url.empty()) { getTargetMediaImpl()->navigateTo( url, "", true); @@ -1032,19 +1044,18 @@ void LLPanelPrimMediaControls::onInputURL(LLFocusableElement* caller, void *user 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, ADD_SORTED); - 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, ADD_SORTED); +// media_address_combo->selectByValue(mCurrentURL); +// } #else // USE_COMBO_BOX_FOR_MEDIA_URL - LLLineEditor* media_address_url = getChild<LLLineEditor>("media_address_url"); - if (media_address_url && mCurrentURL != "about:blank") + if (mMediaAddress && mCurrentURL != "about:blank") { - media_address_url->setValue(mCurrentURL); + mMediaAddress->setValue(mCurrentURL); } #endif // USE_COMBO_BOX_FOR_MEDIA_URL } @@ -1053,12 +1064,11 @@ void LLPanelPrimMediaControls::onCommitSlider() { focusOnTarget(); - LLSlider* media_play_slider_ctrl = getChild<LLSlider>("media_play_slider"); LLViewerMediaImpl* media_impl = getTargetMediaImpl(); if (media_impl) { // get slider value - F64 slider_value = media_play_slider_ctrl->getValue().asReal(); + F64 slider_value = mMediaPlaySliderCtrl->getValue().asReal(); if(slider_value <= 0.0) { media_impl->stop(); @@ -1087,7 +1097,7 @@ void LLPanelPrimMediaControls::onCommitVolumeUp() } media_impl->setVolume(volume); - getChild<LLButton>("media_volume")->setToggleState(false); + mVolumeBtn->setToggleState(false); } } @@ -1107,7 +1117,7 @@ void LLPanelPrimMediaControls::onCommitVolumeDown() } media_impl->setVolume(volume); - getChild<LLButton>("media_volume")->setToggleState(false); + mVolumeBtn->setToggleState(false); } } diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h index 3ec7aa2356..124fa9cce4 100644 --- a/indra/newview/llpanelprimmediacontrols.h +++ b/indra/newview/llpanelprimmediacontrols.h @@ -35,7 +35,11 @@ #include "llpanel.h" #include "llviewermedia.h" +class LLButton; class LLCoordWindow; +class LLIconCtrl; +class LLLayoutStack; +class LLProgressBar; class LLViewerMediaImpl; class LLPanelPrimMediaControls : public LLPanel @@ -119,6 +123,44 @@ private: LLViewerMediaImpl* getTargetMediaImpl(); LLViewerObject* getTargetObject(); LLPluginClassMedia* getTargetMediaPlugin(); + +private: + + LLView *mMediaRegion; + LLUICtrl *mBackCtrl; + LLUICtrl *mFwdCtrl; + LLUICtrl *mReloadCtrl; + LLUICtrl *mPlayCtrl; + LLUICtrl *mPauseCtrl; + LLUICtrl *mStopCtrl; + LLUICtrl *mMediaStopCtrl; + LLUICtrl *mHomeCtrl; + LLUICtrl *mUnzoomCtrl; + LLUICtrl *mOpenCtrl; + LLUICtrl *mZoomCtrl; + LLPanel *mMediaProgressPanel; + LLProgressBar *mMediaProgressBar; + LLUICtrl *mMediaAddressCtrl; + LLUICtrl *mMediaAddress; + LLUICtrl *mMediaPlaySliderPanel; + LLUICtrl *mMediaPlaySliderCtrl; + LLUICtrl *mVolumeCtrl; + LLButton *mVolumeBtn; + LLUICtrl *mVolumeUpCtrl; + LLUICtrl *mVolumeDownCtrl; + LLIconCtrl *mWhitelistIcon; + LLIconCtrl *mSecureLockIcon; + LLLayoutStack *mMediaControlsStack; + LLUICtrl *mLeftBookend; + LLUICtrl *mRightBookend; + LLUIImage* mBackgroundImage; + + LLUICtrl *mMediaPanelScroll; + LLButton *mScrollUpCtrl; + LLButton *mScrollLeftCtrl; + LLButton *mScrollRightCtrl; + LLButton *mScrollDownCtrl; + bool mPauseFadeout; bool mUpdateSlider; bool mClearFaceOnFade; @@ -137,8 +179,7 @@ private: std::string mPreviousURL; F64 mCurrentRate; F64 mMovieDuration; - int mUpdatePercent; - + LLUUID mTargetObjectID; S32 mTargetObjectFace; LLUUID mTargetImplID; diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index b4164a94e8..251d7d4a13 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -54,6 +54,8 @@ #include <boost/bind.hpp> // for SkinFolder listener #include <boost/signals2.hpp> +/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "AutoPlayMedia"; + // Move this to its own file. LLViewerMediaEventEmitter::~LLViewerMediaEventEmitter() @@ -322,7 +324,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s // If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent, // do a navigate. - if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self) + if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))) && !update_from_self) { needs_navigate = (media_entry->getCurrentURL() != previous_url); } @@ -339,7 +341,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s media_impl->setHomeURL(media_entry->getHomeURL()); - if(media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia")) + if(media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING)) { needs_navigate = true; } diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 719deb28bf..639aed4b8a 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -74,6 +74,9 @@ class LLViewerMedia LOG_CLASS(LLViewerMedia); public: + // String to get/set media autoplay in gSavedSettings + static const char *AUTO_PLAY_MEDIA_SETTING; + typedef std::vector<LLViewerMediaImpl*> impl_list; // Special case early init for just web browser component diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index 336d7f684e..7559fd8e72 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -324,10 +324,36 @@ std::string LLViewerParcelMedia::getMimeType() { return sMediaImpl.notNull() ? sMediaImpl->getMimeType() : "none/none"; } + +//static +std::string LLViewerParcelMedia::getURL() +{ + std::string url; + if(sMediaImpl.notNull()) + url = sMediaImpl->getMediaURL(); + + if (url.empty()) + url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaCurrentURL(); + + if (url.empty()) + url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaURL(); + + return url; +} + +//static +std::string LLViewerParcelMedia::getName() +{ + if(sMediaImpl.notNull()) + return sMediaImpl->getName(); + return ""; +} + viewer_media_t LLViewerParcelMedia::getParcelMedia() { return sMediaImpl; } + ////////////////////////////////////////////////////////////////////////////////////////// // static void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg, void ** ) diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h index 3f7f898356..19e1ef78d4 100644 --- a/indra/newview/llviewerparcelmedia.h +++ b/indra/newview/llviewerparcelmedia.h @@ -71,6 +71,8 @@ class LLViewerParcelMedia : public LLViewerMediaObserver static LLPluginClassMediaOwner::EMediaStatus getStatus(); static std::string getMimeType(); + static std::string getURL(); + static std::string getName(); static viewer_media_t getParcelMedia(); static void processParcelMediaCommandMessage( LLMessageSystem *msg, void ** ); 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 3bdd7114ee..70c5d7b823 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 @@ -2,19 +2,18 @@ <panel follows="left|right|top|bottom" name="MediaControls" - bg_alpha_color="1 1 1 0" + background_visible="false" height="160" layout="topleft" mouse_opaque="false" width="800"> + <string name="control_background_image_name">Inspector_Background</string> <panel name="media_region" bottom="125" follows="left|right|top|bottom" layout="topleft" - left="20" mouse_opaque="false" - right="-20" top="20" /> <layout_stack follows="left|right|bottom" @@ -33,6 +32,7 @@ name="media_progress_indicator" height="22" layout="topleft" + visible="false" left="0" top="0" auto_resize="false" @@ -64,6 +64,7 @@ top="128"> <!-- outer layout_panels center the inner one --> <layout_panel + name="left_bookend" width="0" layout="topleft" user_resize="false" /> @@ -83,6 +84,7 @@ layout="topleft" tool_tip="Step back" width="22" + left="0" top_delta="4"> <button.commit_callback function="MediaCtrl.Back" /> @@ -109,22 +111,22 @@ function="MediaCtrl.Forward" /> </button> </layout_panel> -<!-- - <panel + <!-- + <panel height="22" layout="topleft" auto_resize="false" min_width="3" width="3"> - <icon - height="22" - image_name="media_panel_divider.png" - layout="topleft" - top="0" - min_width="3" - width="3" /> - </panel> ---> + <icon + height="22" + image_name="media_panel_divider.png" + layout="topleft" + top="0" + min_width="3" + width="3" /> + </panel> + --> <layout_panel name="home" auto_resize="false" @@ -165,22 +167,22 @@ function="MediaCtrl.Stop" /> </button> </layout_panel> -<!-- - <panel + <!-- + <panel height="22" layout="topleft" auto_resize="false" min_width="3" width="3"> - <icon - height="22" - image_name="media_panel_divider.png" - layout="topleft" - top="0" - min_width="3" - width="3" /> - </panel> ---> + <icon + height="22" + image_name="media_panel_divider.png" + layout="topleft" + top="0" + min_width="3" + width="3" /> + </panel> + --> <layout_panel name="reload" auto_resize="false" @@ -294,31 +296,43 @@ function="MediaCtrl.CommitURL" /> function="MediaCtrl.CommitURL"/> </line_editor> <layout_stack + name="media_address_url_icons" animate="false" follows="right" - width="32" - min_width="32" - height="16" - top="3" - orientation="horizontal" - left_pad="-38"> - <icon - name="media_whitelist_flag" - follows="top|right" - height="16" - image_name="smicon_warn.tga" + height="20" + width="38" + right="-2" + top="-1" + orientation="horizontal"> + <layout_panel layout="topleft" - tool_tip="White List enabled" - min_width="16" - width="16" /> - <icon - name="media_secure_lock_flag" - height="16" - image_name="inv_item_eyes.tga" + width="16" + auto_resize="false" + user_resize="false"> + <icon + name="media_whitelist_flag" + follows="top|right" + height="16" + image_name="smicon_warn.tga" + layout="topleft" + tool_tip="White List enabled" + min_width="16" + width="16" /> + </layout_panel> + <layout_panel layout="topleft" - tool_tip="Secured Browsing" - min_width="16" - width="16" /> + width="16" + auto_resize="false" + user_resize="false"> + <icon + name="media_secure_lock_flag" + height="16" + image_name="icon_lock.tga" + layout="topleft" + tool_tip="Secured Browsing" + min_width="16" + width="16" /> + </layout_panel> </layout_stack> </layout_panel> <layout_panel @@ -412,9 +426,9 @@ function="MediaCtrl.CommitURL" /> </button> </layout_panel> <!-- Scroll pad --> -<!-- -disabled - <layout_panel + <!-- + disabled + <layout_panel name="media_panel_scroll" auto_resize="false" user_resize="false" @@ -423,64 +437,64 @@ disabled layout="topleft" min_width="32" width="32"> - <icon - height="32" - image_name="media_panel_scrollbg.png" - layout="topleft" - top="0" - min_width="32" - width="32" /> - <button - name="scrollup" - height="8" - image_selected="media_btn_scrollup.png" - image_unselected="media_btn_scrollup.png" - layout="topleft" - tool_tip="Scroll up" - scale_image="false" - left="12" - top_delta="4" - min_width="8" - width="8" /> - <button - name="scrollleft" - height="8" - image_selected="media_btn_scrollleft.png" - image_unselected="media_btn_scrollleft.png" - layout="topleft" - left="3" - tool_tip="Scroll left" - scale_image="false" - top="12" - min_width="8" - width="8" /> - <button - name="scrollright" - height="8" - image_selected="media_btn_scrollright.png" - image_unselected="media_btn_scrollright.png" - layout="topleft" - left_pad="9" - tool_tip="Scroll right" - scale_image="false" - top_delta="0" - min_width="8" - width="8" /> - <button - name="scrolldown" - height="8" - image_selected="media_btn_scrolldown.png" - image_unselected="media_btn_scrolldown.png" - layout="topleft" - left="12" - tool_tip="Scroll down" - scale_image="false" - top="20" - min_width="8" - width="8" /> - </layout_panel> -disabled ---> + <icon + height="32" + image_name="media_panel_scrollbg.png" + layout="topleft" + top="0" + min_width="32" + width="32" /> + <button + name="scrollup" + height="8" + image_selected="media_btn_scrollup.png" + image_unselected="media_btn_scrollup.png" + layout="topleft" + tool_tip="Scroll up" + scale_image="false" + left="12" + top_delta="4" + min_width="8" + width="8" /> + <button + name="scrollleft" + height="8" + image_selected="media_btn_scrollleft.png" + image_unselected="media_btn_scrollleft.png" + layout="topleft" + left="3" + tool_tip="Scroll left" + scale_image="false" + top="12" + min_width="8" + width="8" /> + <button + name="scrollright" + height="8" + image_selected="media_btn_scrollright.png" + image_unselected="media_btn_scrollright.png" + layout="topleft" + left_pad="9" + tool_tip="Scroll right" + scale_image="false" + top_delta="0" + min_width="8" + width="8" /> + <button + name="scrolldown" + height="8" + image_selected="media_btn_scrolldown.png" + image_unselected="media_btn_scrolldown.png" + layout="topleft" + left="12" + tool_tip="Scroll down" + scale_image="false" + top="20" + min_width="8" + width="8" /> + </layout_panel> + disabled + --> <layout_panel name="zoom_frame" auto_resize="false" @@ -520,22 +534,22 @@ disabled function="MediaCtrl.Close" /> </button> </layout_panel> -<!-- - <panel + <!-- + <panel height="22" layout="topleft" auto_resize="false" min_width="3" width="3"> - <icon - height="22" - image_name="media_panel_divider.png" - layout="topleft" - top="0" - min_width="3" - width="3" /> - </panel> ---> + <icon + height="22" + image_name="media_panel_divider.png" + layout="topleft" + top="0" + min_width="3" + width="3" /> + </panel> + --> <layout_panel name="new_window" auto_resize="false" @@ -556,23 +570,25 @@ disabled function="MediaCtrl.Open" /> </button> </layout_panel> -<!-- - <panel + <!-- + <panel height="22" layout="topleft" auto_resize="false" min_width="3" width="3"> - <icon - height="22" - image_name="media_panel_divider.png" - layout="topleft" - top="0" - min_width="3" - width="3" /> - </panel> ---> + <icon + height="22" + image_name="media_panel_divider.png" + layout="topleft" + top="0" + min_width="3" + width="3" /> + </panel> + --> + <!-- bookend panel --> <layout_panel + name="right_bookend" width="0" layout="topleft" user_resize="false" /> |