diff options
Diffstat (limited to 'indra')
56 files changed, 525 insertions, 201 deletions
| diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index f2edd5c559..721e5670e7 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -963,30 +963,29 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token,  	// if never fell into those two ifs above, param must be utc  	if (secFromEpoch < 0) secFromEpoch = 0; -	LLDate * datetime = new LLDate((F64)secFromEpoch); +	LLDate datetime((F64)secFromEpoch);  	std::string code = LLStringOps::getDatetimeCode (token);  	// special case to handle timezone  	if (code == "%Z") {  		if (param == "utc") +		{  			replacement = "GMT"; -		else if (param == "slt") -			replacement = "SLT"; -		else if (param != "local") // *TODO Vadim: not local? then what? +		} +		else if (param == "local") +		{ +			replacement = "";		// user knows their own timezone +		} +		else +		{ +			// "slt" = Second Life Time, which is deprecated. +			// If not utc or user local time, fallback to Pacific time  			replacement = LLStringOps::getDaylightSavings() ? "PDT" : "PST"; - -		return true; -	} -	replacement = datetime->toHTTPDateString(code); - -	if (code.empty()) -	{ -		return false; -	} -	else -	{ +		}  		return true;  	} +	replacement = datetime.toHTTPDateString(code); +	return !code.empty();  }  // LLStringUtil::format recogizes the following patterns. diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h index c18917b663..0cd9667644 100644 --- a/indra/llrender/lltexture.h +++ b/indra/llrender/lltexture.h @@ -61,6 +61,8 @@ public:  	//  	//interfaces to access LLViewerTexture  	// +	virtual S8         getType() const = 0 ; +	virtual void       setKnownDrawSize(S32 width, S32 height) = 0 ;  	virtual bool       bindDefaultImage(const S32 stage = 0) const = 0 ;  	virtual void       forceImmediateUpdate() = 0 ;  	virtual void       setActive() = 0 ; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 6dcc1957a9..8c72b079ee 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -268,21 +268,14 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)  		mButtonsEnabled[i] = FALSE;  		mButtons[i] = NULL;  	} -	for (S32 i = 0; i < 4; i++)  -	{ -		mResizeBar[i] = NULL;  -		mResizeHandle[i] = NULL; -	} +	addDragHandle(); +	addResizeCtrls();  	initFromParams(p);  	// chrome floaters don't take focus at all  	setFocusRoot(!getIsChrome()); -	addDragHandle(); -	addResizeCtrls(); -	enableResizeCtrls(mResizable); -  	initFloater();  } @@ -2589,7 +2582,7 @@ void LLFloater::setupParamsForExport(Params& p, LLView* parent)  void LLFloater::initFromParams(const LLFloater::Params& p)  { -	// *NOTE: We have too many classes derived from LLPanel to retrofit them  +	// *NOTE: We have too many classes derived from LLFloater to retrofit them   	// all to pass in params via constructors.  So we use this method.  	 // control_name, tab_stop, focus_lost_callback, initial_value, rect, enabled, visible @@ -2603,11 +2596,10 @@ void LLFloater::initFromParams(const LLFloater::Params& p)  	setCanMinimize(p.can_minimize);  	setCanClose(p.can_close);  	setCanDock(p.can_dock); +	setCanResize(p.can_resize); +	setResizeLimits(p.min_width, p.min_height);  	mDragOnLeft = p.can_drag_on_left; -	mResizable = p.can_resize; -	mMinWidth = p.min_width; -	mMinHeight = p.min_height;  	mHeaderHeight = p.header_height;  	mLegacyHeaderHeight = p.legacy_header_height;  	mSingleInstance = p.single_instance; diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp index d98d8a0e90..aca4dc56ee 100644 --- a/indra/llui/llfloaterreg.cpp +++ b/indra/llui/llfloaterreg.cpp @@ -127,7 +127,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)  				bool success = LLUICtrlFactory::getInstance()->buildFloater(res, xui_file, NULL);  				if (!success)  				{ -					llwarns << "Failed to buid floater type: '" << name << "'." << llendl; +					llwarns << "Failed to build floater type: '" << name << "'." << llendl;  					return NULL;  				} diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp index 66c2ba682f..c1bc21f2e9 100644 --- a/indra/llui/lliconctrl.cpp +++ b/indra/llui/lliconctrl.cpp @@ -57,7 +57,9 @@ LLIconCtrl::LLIconCtrl(const LLIconCtrl::Params& p)  :	LLUICtrl(p),  	mColor(p.color()),  	mImagep(p.image), -	mPriority(0) +	mPriority(0), +	mDrawWidth(0), +	mDrawHeight(0)  {  	if (mImagep.notNull())  	{ @@ -100,6 +102,8 @@ void LLIconCtrl::setValue(const LLSD& value )  	{  		mImagep = LLUI::getUIImage(tvalue.asString(), mPriority);  	} + +	setIconImageDrawSize();  }  std::string LLIconCtrl::getImageName() const @@ -109,3 +113,14 @@ std::string LLIconCtrl::getImageName() const  	else  		return std::string();  } + +void LLIconCtrl::setIconImageDrawSize() +{ +	if(mImagep.notNull() && mDrawWidth && mDrawHeight) +	{ +		if(mImagep->getImage().notNull()) +		{ +			mImagep->getImage()->setKnownDrawSize(mDrawWidth, mDrawHeight) ; +		} +	} +} diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h index 90f1693060..66368f979b 100644 --- a/indra/llui/lliconctrl.h +++ b/indra/llui/lliconctrl.h @@ -60,6 +60,7 @@ public:  protected:  	LLIconCtrl(const Params&);  	friend class LLUICtrlFactory; +  public:  	virtual ~LLIconCtrl(); @@ -73,9 +74,16 @@ public:  	void			setColor(const LLColor4& color) { mColor = color; } +private: +	void setIconImageDrawSize() ; +  protected:  	S32 mPriority; +	//the output size of the icon image if set. +	S32 mDrawWidth ; +	S32 mDrawHeight ; +  private:  	LLUIColor mColor;  	LLPointer<LLUIImage> mImagep; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 6e058e4c62..91e7e46195 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -2894,8 +2894,8 @@ void hide_top_view( LLView* view )  } -// x and y are the desired location for the popup, NOT necessarily the -// mouse location +// x and y are the desired location for the popup, in the spawning_view's +// coordinate frame, NOT necessarily the mouse location  // static  void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y)  { diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 48887ec352..09d9e407c7 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -505,7 +505,7 @@ public:  	void buildDrawLabels();  	void createJumpKeys(); -	// Show popup at a specific location. +	// Show popup at a specific location, in the spawn_view's coordinate frame  	static void showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y);  	// Whether to drop shadow menu bar  diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp index 7d21c7e0c1..78738c826d 100644 --- a/indra/llui/llmultifloater.cpp +++ b/indra/llui/llmultifloater.cpp @@ -434,6 +434,7 @@ void LLMultiFloater::onTabSelected()  void LLMultiFloater::setCanResize(BOOL can_resize)  {  	LLFloater::setCanResize(can_resize); +	if (!mTabContainer) return;  	if (isResizable() && mTabContainer->getTabPosition() == LLTabContainer::BOTTOM)  	{  		mTabContainer->setRightTabBtnOffset(RESIZE_HANDLE_WIDTH); @@ -457,6 +458,8 @@ BOOL LLMultiFloater::postBuild()  	}  	mTabContainer = getChild<LLTabContainer>("Preview Tabs"); +	 +	setCanResize(mResizable);  	return TRUE;  } diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 0d340699c5..07c0f3ce84 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -110,8 +110,6 @@ LLPanel::LLPanel(const LLPanel::Params& p)  	// *NOTE: Be sure to also change LLPanel::initFromParams().  We have too  	// many classes derived from LLPanel to retrofit them all to pass in params.  { -	setIsChrome(FALSE); -  	if (p.has_border)  	{  		addBorder(p.border); diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp index f9f0307d17..86bd2f05ce 100644 --- a/indra/llui/llradiogroup.cpp +++ b/indra/llui/llradiogroup.cpp @@ -106,7 +106,7 @@ void LLRadioGroup::setIndexEnabled(S32 index, BOOL enabled)  			child->setEnabled(enabled);  			if (index == mSelectedIndex && enabled == FALSE)  			{ -				mSelectedIndex = -1; +				setSelectedIndex(-1);  			}  			break;  		} diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp index 073e14386f..ba53f84877 100644 --- a/indra/llui/llscrolllistcolumn.cpp +++ b/indra/llui/llscrolllistcolumn.cpp @@ -47,6 +47,21 @@ const S32 MIN_COLUMN_WIDTH = 20;  //---------------------------------------------------------------------------  // LLScrollColumnHeader  //--------------------------------------------------------------------------- +LLScrollColumnHeader::Params::Params() +:	column("column") +{ +	name  = "column_header"; +	image_unselected.name("square_btn_32x128.tga"); +	image_selected.name("square_btn_selected_32x128.tga"); +	image_disabled.name("square_btn_32x128.tga"); +	image_disabled_selected.name("square_btn_selected_32x128.tga"); +	image_overlay.name("combobox_arrow.tga"); +	image_overlay_alignment("right"); +	font_halign = LLFontGL::LEFT; +	tab_stop(false); +	scale_image(true); +} +  LLScrollColumnHeader::LLScrollColumnHeader(const LLScrollColumnHeader::Params& p)   :	LLButton(p), // use combobox params to steal images diff --git a/indra/llui/llscrolllistcolumn.h b/indra/llui/llscrolllistcolumn.h index 23318fd7c4..5aef6e8e94 100644 --- a/indra/llui/llscrolllistcolumn.h +++ b/indra/llui/llscrolllistcolumn.h @@ -50,20 +50,7 @@ public:  	{  		Mandatory<LLScrollListColumn*> column; -		Params() -		:	column("column") -		{ -			name  = "column_header"; -			image_unselected.name("square_btn_32x128.tga"); -			image_selected.name("square_btn_selected_32x128.tga"); -			image_disabled.name("square_btn_32x128.tga"); -			image_disabled_selected.name("square_btn_selected_32x128.tga"); -			image_overlay.name("combobox_arrow.tga"); -			image_overlay_alignment("right"); -			font_halign = LLFontGL::LEFT; -			tab_stop(false); -			scale_image(true); -		} +		Params();  	};  	LLScrollColumnHeader(const Params&);  	~LLScrollColumnHeader(); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 2b1d677ffb..9a26f0b472 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -933,13 +933,16 @@ BOOL LLTextBase::handleToolTip(S32 x, S32 y, MASK mask)  void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)  { -	LLUICtrl::reshape( width, height, called_from_parent ); +	if (width != getRect().getWidth() || height != getRect().getHeight()) +	{ +		LLUICtrl::reshape( width, height, called_from_parent ); -	// do this first after reshape, because other things depend on -	// up-to-date mTextRect -	updateRects(); -	 -	needsReflow(); +		// do this first after reshape, because other things depend on +		// up-to-date mTextRect +		updateRects(); +		 +		needsReflow(); +	}  }  void LLTextBase::draw() @@ -1193,11 +1196,10 @@ void LLTextBase::reflow(S32 start_index)  				//llassert_always(getLocalRectFromDocIndex(mScrollIndex).mBottom == first_char_rect.mBottom);  			}  		} -	} - -	// reset desired x cursor position -	updateCursorXPos(); +		// reset desired x cursor position +		updateCursorXPos(); +	}  }  LLRect LLTextBase::getContentsRect() @@ -2108,9 +2110,12 @@ LLRect LLTextBase::getVisibleDocumentRect() const  	}  	else  	{ -		// entire document rect when not scrolling +		// entire document rect is visible when not scrolling +		// but offset according to height of widget  		LLRect doc_rect = mDocumentView->getLocalRect(); -		doc_rect.translate(-mDocumentView->getRect().mLeft, -mDocumentView->getRect().mBottom); +		doc_rect.mLeft -= mDocumentView->getRect().mLeft; +		// adjust for height of text above widget baseline +		doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mTextRect.getHeight());  		return doc_rect;  	}  } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 14fd786127..4cca522a23 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -154,6 +154,9 @@ public:  	LLRect					getContentsRect();  	LLRect					getVisibleDocumentRect() const; +	S32						getVPad() { return mVPad; } +	S32						getHPad() { return mHPad; } +  	S32						getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round ) const;  	LLRect					getLocalRectFromDocIndex(S32 pos) const; diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index f0238dba49..3ce5a0320b 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -652,6 +652,13 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)  {  	BOOL	handled = FALSE; +	// set focus first, in case click callbacks want to change it +	// RN: do we really need to have a tab stop? +	if (hasTabStop()) +	{ +		setFocus( TRUE ); +	} +  	// Let scrollbar have first dibs  	handled = LLTextBase::handleMouseDown(x, y, mask); @@ -694,12 +701,6 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)  		handled = TRUE;  	} -	if (hasTabStop()) -	{ -		setFocus( TRUE ); -		handled = TRUE; -	} -  	// Delay cursor flashing  	resetCursorBlink(); @@ -708,29 +709,32 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)  BOOL LLTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)  { -	BOOL handled = LLTextBase::handleRightMouseDown(x, y, mask); -	if (!handled && hasTabStop()) +	if (hasTabStop()) +	{ +		setFocus(TRUE); +	} +	if (!LLTextBase::handleRightMouseDown(x, y, mask))  	{ -		setFocus( TRUE );  		showContextMenu(x, y); -		handled = TRUE;  	} -	return handled; +	return TRUE;  }  BOOL LLTextEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask)  { -	BOOL	handled = FALSE; -	handled = LLTextBase::handleMouseDown(x, y, mask); +	if (hasTabStop()) +	{ +		setFocus(TRUE); +	} -	if (!handled) +	if (!LLTextBase::handleMouseDown(x, y, mask))  	{ -		setFocus( TRUE );  		if( canPastePrimary() )  		{  			setCursorAtLocalPos( x, y, true ); +			// does not rely on focus being set  			pastePrimary();  		}  	} diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 34501ae080..23c87c7522 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -161,10 +161,7 @@ LLToolTip::Params::Params()  	web_based_media("web_based_media", false),  	media_playing("media_playing", false)  { -	name = "tooltip"; -	font = LLFontGL::getFontSansSerif(); -	bg_opaque_color = LLUIColorTable::instance().getColor( "ToolTipBgColor" ); -	background_visible = true; +	chrome = true;  }  LLToolTip::LLToolTip(const LLToolTip::Params& p) @@ -208,6 +205,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  		icon_params.rect = icon_rect;  		//icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM;  		icon_params.image_unselected(imagep); +		icon_params.image_selected(imagep);  		icon_params.scale_image(true);  		icon_params.flash_color(icon_params.highlight_color());  		mInfoButton  = LLUICtrlFactory::create<LLButton>(icon_params); @@ -221,7 +219,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  		mTextBox->translate(TOOLTIP_ICON_SIZE + mPadding, 0);  	} -	if (p.time_based_media.isProvided() && p.time_based_media == true) +	if (p.time_based_media)  	{  		LLButton::Params p_button;  		p_button.name(std::string("play_media")); @@ -238,17 +236,14 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  		{  			mPlayMediaButton->setCommitCallback(boost::bind(p.click_playmedia_callback()));  		} -		if(p.media_playing.isProvided()) -		{ -			mPlayMediaButton->setToggleState(p.media_playing); -		} +		mPlayMediaButton->setToggleState(p.media_playing);  		addChild(mPlayMediaButton);  		// move text over to fit image in  		mTextBox->translate(TOOLTIP_PLAYBUTTON_SIZE + mPadding, 0);  	} -	if (p.web_based_media.isProvided() && p.web_based_media == true) +	if (p.web_based_media)  	{  		LLButton::Params p_w_button;  		p_w_button.name(std::string("home_page")); @@ -455,7 +450,10 @@ void LLToolTipMgr::show(const std::string& msg)  void LLToolTipMgr::show(const LLToolTip::Params& params)  { -	if (!params.validateBlock())  +	// fill in default tooltip params from tool_tip.xml +	LLToolTip::Params params_with_defaults(params); +	params_with_defaults.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLToolTip>()); +	if (!params_with_defaults.validateBlock())   	{  		llwarns << "Could not display tooltip!" << llendl;  		return; @@ -467,12 +465,12 @@ void LLToolTipMgr::show(const LLToolTip::Params& params)  	// are we ready to show the tooltip?  	if (!mToolTipsBlocked									// we haven't hit a key, moved the mouse, etc. -		&& LLUI::getMouseIdleTime() > params.delay_time)	// the mouse has been still long enough +		&& LLUI::getMouseIdleTime() > params_with_defaults.delay_time)	// the mouse has been still long enough  	{ -		bool tooltip_changed = mLastToolTipParams.message() != params.message() -								|| mLastToolTipParams.pos() != params.pos() -								|| mLastToolTipParams.time_based_media() != params.time_based_media() -								|| mLastToolTipParams.web_based_media() != params.web_based_media(); +		bool tooltip_changed = mLastToolTipParams.message() != params_with_defaults.message() +								|| mLastToolTipParams.pos() != params_with_defaults.pos() +								|| mLastToolTipParams.time_based_media() != params_with_defaults.time_based_media() +								|| mLastToolTipParams.web_based_media() != params_with_defaults.web_based_media();  		bool tooltip_shown = mToolTip   							 && mToolTip->getVisible()  @@ -480,7 +478,7 @@ void LLToolTipMgr::show(const LLToolTip::Params& params)  		mNeedsToolTip = tooltip_changed || !tooltip_shown;  		// store description of tooltip for later creation -		mNextToolTipParams = params; +		mNextToolTipParams = params_with_defaults;  	}  } diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h index 4a5f60f93d..30d251266c 100644 --- a/indra/llui/lltooltip.h +++ b/indra/llui/lltooltip.h @@ -78,16 +78,13 @@ public:  									visible_time_far;	// time for which tooltip is visible while mouse moved away  		Optional<LLRect>			sticky_rect;  		Optional<const LLFontGL*>	font; - -		Optional<click_callback_t>	click_callback;  		Optional<LLUIImage*>		image; -		 -		 -		Optional<bool>				time_based_media; -		Optional<bool>				web_based_media; -		Optional<bool>				media_playing; -		Optional<click_callback_t>	click_playmedia_callback; -		Optional<click_callback_t>	click_homepage_callback; +		Optional<bool>				time_based_media, +									web_based_media, +									media_playing; +		Optional<click_callback_t>	click_callback, +									click_playmedia_callback, +									click_homepage_callback;  		Optional<S32>				max_width;  		Optional<S32>				padding;  		Optional<bool>				wrap; diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 48504a1e54..a82e6eb372 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1953,11 +1953,6 @@ namespace LLInitParam  			}  		} -		if (mData.mValue == NULL) -		{ -			mData.mValue = LLFontGL::getFontDefault(); -		} -		  		// default to current value  		return mData.mValue;  	} diff --git a/indra/llui/llui.h b/indra/llui/llui.h index efb1b0a36f..5ec07f1941 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -404,6 +404,20 @@ namespace LLInitParam  		LLUIColor getValueFromBlock() const;  	}; +	// provide a better default for Optional<const LLFontGL*> than NULL +	template <> +	struct DefaultInitializer<const LLFontGL*> +	{ +		// return reference to a single default instance of T +		// built-in types will be initialized to zero, default constructor otherwise +		static const LLFontGL* get()  +		{  +			static const LLFontGL* sDefaultFont = LLFontGL::getFontDefault();   +			return sDefaultFont; +		}  +	}; + +  	template<>  	class TypedParam<const LLFontGL*>   	:	public BlockValue<const LLFontGL*> diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index 0faff5eff6..08fc8fb784 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -42,6 +42,7 @@ static LLDefaultChildRegistry::Register<LLUICtrl> r("ui_ctrl");  LLUICtrl::Params::Params()  :	tab_stop("tab_stop", true), +	chrome("chrome", false),  	label("label"),  	initial_value("value"),  	init_callback("init_callback"), @@ -86,6 +87,7 @@ void LLUICtrl::initFromParams(const Params& p)  {  	LLView::initFromParams(p); +	setIsChrome(p.chrome);  	setControlName(p.control_name);  	if(p.enabled_controls.isProvided())  	{ @@ -582,7 +584,6 @@ void LLUICtrl::setIsChrome(BOOL is_chrome)  // virtual  BOOL LLUICtrl::getIsChrome() const  {  -  	LLView* parent_ctrl = getParent();  	while(parent_ctrl)  	{ diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h index 45fe47772b..dd22851100 100644 --- a/indra/llui/lluictrl.h +++ b/indra/llui/lluictrl.h @@ -126,7 +126,8 @@ public:  	struct Params : public LLInitParam::Block<Params, LLView::Params>  	{  		Optional<std::string>			label; -		Optional<bool>					tab_stop; +		Optional<bool>					tab_stop, +										chrome;  		Optional<LLSD>					initial_value;  		Optional<CommitCallbackParam>	init_callback, diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a7681e4a1d..0133d2222d 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -185,6 +185,7 @@ set(viewer_SOURCE_FILES      llfloatermediasettings.cpp      llfloatermemleak.cpp      llfloaternamedesc.cpp +	llfloaternearbymedia.cpp      llfloaternotificationsconsole.cpp      llfloateropenobject.cpp      llfloaterparcel.cpp @@ -665,6 +666,7 @@ set(viewer_HEADER_FILES      llfloatermediasettings.h      llfloatermemleak.h      llfloaternamedesc.h +	llfloaternearbymedia.h      llfloaternotificationsconsole.h      llfloateropenobject.h      llfloaterparcel.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index c0eefaa642..c4722b772e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9030,17 +9030,6 @@        <key>Value</key>        <string>5748decc-f629-461c-9a36-a35a221fe21f</string>      </map> -    <key>UIImgDefaultTattooUUID</key> -    <map> -      <key>Comment</key> -      <string /> -      <key>Persist</key> -      <integer>0</integer> -      <key>Type</key> -      <string>String</string> -      <key>Value</key> -      <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -    </map>      <key>UIImgDefaultUnderwearUUID</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index ebcda13dd4..b56e8d1ec2 100644 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -155,6 +155,8 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)  	mPriority = LLViewerFetchedTexture::BOOST_ICON;  	LLRect rect = p.rect; +	mDrawWidth  = llmax(32, rect.getWidth()) ; +	mDrawHeight = llmax(32, rect.getHeight()) ;  	static LLUICachedControl<S32> llavatariconctrl_symbol_hpad("UIAvatariconctrlSymbolHPad", 2);  	static LLUICachedControl<S32> llavatariconctrl_symbol_vpad("UIAvatariconctrlSymbolVPad", 2); @@ -193,7 +195,6 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)  		LLIconCtrl::setValue("default_profile_picture.j2c");  	} -  	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;  	registrar.add("AvatarIcon.Action", boost::bind(&LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked, this, _2)); diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 48b5fc11b7..7bc48185e6 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -51,7 +51,7 @@ public:  	/*virtual*/ void	getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const   	{  		// more label always spans width of text box -		width = mEditor.getTextRect().getWidth();  +		width = mEditor.getTextRect().getWidth() - mEditor.getHPad();   		height = llceil(mStyle->getFont()->getLineHeight());  	}  	/*virtual*/ S32		getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const  @@ -153,6 +153,11 @@ void LLExpandableTextBox::LLTextBoxEx::showExpandText()  {  	if (!mExpanderVisible)  	{ +		// make sure we're scrolled to top when collapsing +		if (mScroller) +		{ +			mScroller->goToTop(); +		}  		// get fully visible lines  		std::pair<S32, S32> visible_lines = getVisibleLines(true);  		S32 last_line = visible_lines.second - 1; diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h index d45527aabb..3fe646c29c 100644 --- a/indra/newview/llexpandabletextbox.h +++ b/indra/newview/llexpandabletextbox.h @@ -69,16 +69,6 @@ protected:  		virtual S32 getVerticalTextDelta();  		/** -		 * Returns text vertical padding -		 */ -		virtual S32 getVPad() { return mVPad; } - -		/** -		 * Returns text horizontal padding -		 */ -		virtual S32 getHPad() { return mHPad; } - -		/**  		 * Shows "More" link  		 */  		void showExpandText(); diff --git a/indra/newview/llface.h b/indra/newview/llface.h index d734b327d9..2b134c8c31 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -246,7 +246,7 @@ protected:  	//atlas  	LLPointer<LLTextureAtlasSlot> mAtlasInfop ; -	BOOL                              mUsingAtlas ; +	BOOL                          mUsingAtlas ;  protected:  	static BOOL	sSafeRenderSelect; diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 216bca8262..fc8790c172 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -704,7 +704,7 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)  	}  	if (volume->mLODChanged || volume->mFaceMappingChanged || -		volume->mVolumeChanged) +		volume->mVolumeChanged || drawable->isState(LLDrawable::REBUILD_MATERIAL))  	{  		volume->regenFaces();  		volume->mDrawable->setState(LLDrawable::REBUILD_VOLUME); diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 4c83530f43..bd9798c18e 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -34,6 +34,7 @@  #include "llviewerprecompiledheaders.h"  #include "llfloatersearch.h"  #include "llmediactrl.h" +#include "llagent.h"  LLFloaterSearch::LLFloaterSearch(const LLSD& key) : @@ -117,6 +118,14 @@ void LLFloaterSearch::search(const LLSD &key)  	std::string search_text = key.has("id") ? key["id"].asString() : "";  	url += std::string("?q=") + search_text; +	// append the maturity and teen capabilities for this agent +	BOOL godlike = gAgent.isGodlike(); +	bool mature_enabled = gAgent.canAccessMature() || godlike; +	bool adult_enabled = gAgent.canAccessAdult() || godlike; +	std::string mature = (mature_enabled) ? "True" : "False"; +	std::string teen = (!adult_enabled) ? "True" : "False"; +	url += "&t=" + teen + "&m=" + mature; +  	// and load the URL in the web view  	mBrowser->navigateTo(url);  } diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 9a05812847..e63daac4af 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -517,8 +517,8 @@ void	LLNavigationBar::showTeleportHistoryMenu()  	// *TODO: why to draw/update anything before showing the menu?  	mTeleportHistoryMenu->buildDrawLabels();  	mTeleportHistoryMenu->updateParent(LLMenuGL::sMenuContainer); -	LLRect btnBackRect = mBtnBack->getRect(); -	LLMenuGL::showPopup(this, mTeleportHistoryMenu, btnBackRect.mLeft, btnBackRect.mBottom); +	const S32 MENU_SPAWN_PAD = -1; +	LLMenuGL::showPopup(mBtnBack, mTeleportHistoryMenu, 0, MENU_SPAWN_PAD);  	// *HACK pass the mouse capturing to the drop-down menu  	gFocusMgr.setMouseCapture( NULL ); diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index 6a3617f008..a198499b47 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -134,6 +134,11 @@ void LLPanelMediaSettingsGeneral::draw()  		LLPluginClassMedia* media_plugin = mPreviewMedia->getMediaPlugin();
  		if( media_plugin )
  		{
 +			// turn off volume (if we can) for preview. Note: this really only
 +			// works for QuickTime movies right now - no way to control the 
 +			// volume of a flash app embedded in a page for example
 +			media_plugin->setVolume( 0 );
 +
  			// some controls are only appropriate for time or browser type plugins
  			// so we selectively enable/disable them - need to do it in draw
  			// because the information from plugins arrives assynchronously
 diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index aa6909560d..6181531f82 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -73,10 +73,10 @@ LLPanelPicks::LLPanelPicks()  	mPopupMenu(NULL),  	mProfilePanel(NULL),  	mPickPanel(NULL), -	mPicksList(NULL) -	, mPanelPickInfo(NULL) -	, mPanelPickEdit(NULL) -	, mOverflowMenu(NULL) +	mPicksList(NULL), +	mPanelPickInfo(NULL), +	mPanelPickEdit(NULL), +	mOverflowMenu(NULL)  {  } diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index dace3f875f..9ca2d3f61d 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -80,6 +80,7 @@  #include "llfloatermap.h"  #include "llfloatermemleak.h"  #include "llfloaternamedesc.h" +#include "llfloaternearbymedia.h"  #include "llfloaternotificationsconsole.h"  #include "llfloateropenobject.h"  #include "llfloaterpay.h" @@ -187,6 +188,8 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("mute_object_by_name", "floater_mute_object.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGetBlockedObjectName>);  	LLFloaterReg::add("mini_map", "floater_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMap>);  	LLFloaterReg::add("syswell_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLSysWellWindow>); + +	LLFloaterReg::add("nearby_media", "floater_nearby_media.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNearbyMedia>);  	LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationConsole>); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index e2d9f5a2c9..e89f17cf72 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -168,8 +168,7 @@ public:  		viewer_media_t mMediaImpl;  		bool mInitialized;  }; -typedef std::vector<LLViewerMediaImpl*> impl_list; -static impl_list sViewerMediaImplList; +static LLViewerMedia::impl_list sViewerMediaImplList;  static LLTimer sMediaCreateTimer;  static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f;  static F32 sGlobalVolume = 1.0f; @@ -183,8 +182,8 @@ static void add_media_impl(LLViewerMediaImpl* media)  //////////////////////////////////////////////////////////////////////////////////////////  static void remove_media_impl(LLViewerMediaImpl* media)  { -	impl_list::iterator iter = sViewerMediaImplList.begin(); -	impl_list::iterator end = sViewerMediaImplList.end(); +	LLViewerMedia::impl_list::iterator iter = sViewerMediaImplList.begin(); +	LLViewerMedia::impl_list::iterator end = sViewerMediaImplList.end();  	for(; iter != end; iter++)  	{ @@ -203,6 +202,7 @@ class LLViewerMediaMuteListObserver : public LLMuteListObserver  static LLViewerMediaMuteListObserver sViewerMediaMuteListObserver;  static bool sViewerMediaMuteListObserverInitialized = false; +static bool sInWorldMediaDisabled = false;  ////////////////////////////////////////////////////////////////////////////////////////// @@ -428,15 +428,34 @@ void LLViewerMedia::muteListChanged()  	}  } +////////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setInWorldMediaDisabled(bool disabled) +{ +	sInWorldMediaDisabled = disabled; +} + +////////////////////////////////////////////////////////////////////////////////////////// +// static +bool LLViewerMedia::getInWorldMediaDisabled() +{ +	return sInWorldMediaDisabled; +} + +LLViewerMedia::impl_list &LLViewerMedia::getPriorityList() +{ +	return sViewerMediaImplList; +} +  // This is the predicate function used to sort sViewerMediaImplList by priority. -static inline bool compare_impl_interest(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2) +bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)  { -	if(i1->mIsMuted || i1->mMediaSourceFailed) +	if(i1->isForcedUnloaded())  	{  		// Muted or failed items always go to the end of the list, period.  		return false;  	} -	else if(i2->mIsMuted || i2->mMediaSourceFailed) +	else if(i2->isForcedUnloaded())  	{  		// Muted or failed items always go to the end of the list, period.  		return true; @@ -483,7 +502,7 @@ void LLViewerMedia::updateMedia()  	}  	// Sort the static instance list using our interest criteria -	std::stable_sort(sViewerMediaImplList.begin(), sViewerMediaImplList.end(), compare_impl_interest); +	std::stable_sort(sViewerMediaImplList.begin(), sViewerMediaImplList.end(), priorityComparitor);  	// Go through the list again and adjust according to priority.  	iter = sViewerMediaImplList.begin(); @@ -493,6 +512,7 @@ void LLViewerMedia::updateMedia()  	int impl_count_total = 0;  	int impl_count_interest_low = 0;  	int impl_count_interest_normal = 0; +	int i = 0;  #if 0	  	LL_DEBUGS("PluginPriority") << "Sorted impls:" << llendl; @@ -515,7 +535,7 @@ void LLViewerMedia::updateMedia()  		LLPluginClassMedia::EPriority new_priority = LLPluginClassMedia::PRIORITY_NORMAL; -		if(pimpl->mIsMuted || pimpl->mMediaSourceFailed || (impl_count_total > (int)max_instances)) +		if(pimpl->isForcedUnloaded() || (impl_count_total > (int)max_instances))  		{  			// Never load muted or failed impls.  			// Hard limit on the number of instances that will be loaded at one time @@ -583,6 +603,17 @@ void LLViewerMedia::updateMedia()  		}  		pimpl->setPriority(new_priority); +		 +		if(pimpl->getUsedInUI()) +		{ +			// Any impls used in the UI should not be in the proximity list. +			pimpl->mProximity = -1; +		} +		else +		{ +			// Other impls just get the same ordering as the priority list (for now). +			pimpl->mProximity = i; +		}  #if 0		  		LL_DEBUGS("PluginPriority") << "    " << pimpl  @@ -595,6 +626,8 @@ void LLViewerMedia::updateMedia()  #endif  		total_cpu += pimpl->getCPUUsage(); +		 +		i++;  	}  	LL_DEBUGS("PluginPriority") << "Total reported CPU usage is " << total_cpu << llendl; @@ -641,6 +674,8 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,  	mNeedsMuteCheck(false),  	mPreviousMediaState(MEDIA_NONE),  	mPreviousMediaTime(0.0f), +	mIsDisabled(false), +	mProximity(-1),  	mIsUpdated(false)  {  @@ -1562,7 +1597,7 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()  ////////////////////////////////////////////////////////////////////////////////////////// -LLUUID LLViewerMediaImpl::getMediaTextureID() +LLUUID LLViewerMediaImpl::getMediaTextureID() const  {  	return mTextureId;  } @@ -1650,6 +1685,27 @@ void LLViewerMediaImpl::resetPreviousMediaState()  }  ////////////////////////////////////////////////////////////////////////////////////////// +// +bool LLViewerMediaImpl::isForcedUnloaded() const +{ +	if(mIsMuted || mMediaSourceFailed || mIsDisabled) +	{ +		return true; +	} +	 +	if(sInWorldMediaDisabled) +	{ +		// When inworld media is disabled, all instances that aren't marked as "used in UI" will not be loaded. +		if(!mUsedInUI) +		{ +			return true; +		} +	} +	 +	return false; +} + +//////////////////////////////////////////////////////////////////////////////////////////  void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)  {  	switch(event) @@ -2017,6 +2073,19 @@ const std::list< LLVOVolume* >* LLViewerMediaImpl::getObjectList() const  	return &mObjectList ;  } +LLVOVolume *LLViewerMediaImpl::getSomeObject() +{ +	LLVOVolume *result = NULL; +	 +	std::list< LLVOVolume* >::iterator iter = mObjectList.begin() ; +	if(iter != mObjectList.end()) +	{ +		result = *iter; +	} +	 +	return result; +} +  //////////////////////////////////////////////////////////////////////////////////////////  //static  void LLViewerMedia::toggleMusicPlay(void*) diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 5444abf854..dac0482078 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -66,10 +66,15 @@ private:  	observerListType mObservers;  }; +class LLViewerMediaImpl; +  class LLViewerMedia  {  	LOG_CLASS(LLViewerMedia);  	public: + +		typedef std::vector<LLViewerMediaImpl*> impl_list; +  		// Special case early init for just web browser component  		// so we can show login screen.  See .cpp file for details. JC @@ -97,6 +102,14 @@ class LLViewerMedia  		static void mediaStop(void*);  		static F32 getVolume();	  		static void muteListChanged(); +		static void setInWorldMediaDisabled(bool disabled); +		static bool getInWorldMediaDisabled(); +				 +		// Returns the priority-sorted list of all media impls. +		static impl_list &getPriorityList(); +		 +		// This is the comparitor used to sort the list. +		static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2);  };  // Implementation functions not exported into header file @@ -159,7 +172,7 @@ public:  	bool handleUnicodeCharHere(llwchar uni_char);  	bool canNavigateForward();  	bool canNavigateBack(); -	std::string getMediaURL() { return mMediaURL; } +	std::string getMediaURL() const { return mMediaURL; }  	std::string getCurrentMediaURL();  	std::string getHomeURL() { return mHomeURL; }      void setHomeURL(const std::string& home_url) { mHomeURL = home_url; }; @@ -168,7 +181,7 @@ public:  	void update();  	void updateImagesMediaStreams(); -	LLUUID getMediaTextureID(); +	LLUUID getMediaTextureID() const;  	void suspendUpdates(bool suspend) { mSuspendUpdates = suspend; };  	void setVisible(bool visible); @@ -179,6 +192,12 @@ public:  	bool hasMedia();  	bool isMediaFailed() { return mMediaSourceFailed; };  	void resetPreviousMediaState(); +	 +	void setDisabled(bool disabled) { mIsDisabled = disabled; }; +	bool isMediaDisabled() { return mIsDisabled; }; + +	// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.) +	bool isForcedUnloaded() const;  	ECursorType getLastSetCursor() { return mLastSetCursor; }; @@ -231,6 +250,7 @@ public:  	void addObject(LLVOVolume* obj) ;  	void removeObject(LLVOVolume* obj) ;  	const std::list< LLVOVolume* >* getObjectList() const ; +	LLVOVolume *getSomeObject();  	void setUpdated(BOOL updated) ;  	BOOL isUpdated() ; @@ -238,6 +258,7 @@ public:  	void calculateInterest();  	F64 getInterest() const { return mInterest; };  	F64 getApproximateTextureInterest(); +	S32 getProximity() { return mProximity; };  	// Mark this object as being used in a UI panel instead of on a prim  	// This will be used as part of the interest sorting algorithm. @@ -301,6 +322,8 @@ public:  	bool mNeedsMuteCheck;  	int mPreviousMediaState;  	F64 mPreviousMediaTime; +	bool mIsDisabled; +	S32 mProximity;  private:  	BOOL mIsUpdated ; diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index 0ef4679057..2f7040aaa3 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -50,6 +50,7 @@  #include "llmediaentry.h"  #include "llkeyboard.h"  #include "lltoolmgr.h" +#include "llvovolume.h"  //  // LLViewerMediaFocus @@ -473,3 +474,46 @@ LLViewerObject* LLViewerMediaFocus::getHoverObject()  {  	return gObjectList.findObject(mHoverObjectID);  } + +void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id) +{ +	LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(media_id); +	 +	if(impl) +	{	 +		// Get the first object from the media impl's object list.  This is completely arbitrary, but should suffice. +		LLVOVolume *obj = impl->getSomeObject(); +		if(obj) +		{ +			// This media is attached to at least one object.  Figure out which face it's on. +			S32 face = obj->getFaceIndexWithMediaImpl(impl, -1); +			 +			// We don't have a proper pick normal here, and finding a face's real normal is... complicated. +			// For now, use +z to look at the top of the object. +			LLVector3 normal(0.0f, 0.0f, 1.0f); +			 +			// Attempt to focus/zoom on that face. +			setFocusFace(obj, face, impl, normal); +			 +			if(mMediaControls.get()) +			{ +				mMediaControls.get()->resetZoomLevel(); +				mMediaControls.get()->nextZoomLevel(); +			} +		} +	} +} + +LLUUID LLViewerMediaFocus::getControlsMediaID() +{ +	if(getFocusedMediaImpl()) +	{ +		return mFocusedImplID; +	} +	else if(getHoverMediaImpl()) +	{ +		return mHoverImplID; +	} +	 +	return LLUUID::null; +} diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h index c1179de39d..e5f36d341c 100644 --- a/indra/newview/llviewermediafocus.h +++ b/indra/newview/llviewermediafocus.h @@ -81,6 +81,12 @@ public:  	LLViewerMediaImpl* getHoverMediaImpl();  	LLViewerObject* getHoverObject();  	S32 getHoverFace() { return mHoverObjectFace; } +	 +	// Try to focus/zoom on the specified media (if it's on an object in world). +	void focusZoomOnMedia(LLUUID media_id); +	 +	// Return the ID of the media instance the controls are currently attached to (either focus or hover). +	LLUUID getControlsMediaID();  protected:  	/*virtual*/ void	onFocusReceived(); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index e5c53c91c9..758bf8c1aa 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -93,6 +93,7 @@ BOOL LLViewerTexture::sUseTextureAtlas        = FALSE ;  const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by  const F32 desired_discard_bias_max = 1.5f; // max number of levels to reduce image quality by +const F64 log_2 = log(2.0);  //----------------------------------------------------------------------------------------------  //namespace: LLViewerTextureAccess @@ -134,7 +135,7 @@ LLViewerMediaTexture*  LLViewerTextureManager::getMediaTexture(const LLUUID& id,  	return tex ;  } -LLViewerFetchedTexture* LLViewerTextureManager::staticCastToFetchedTexture(LLViewerTexture* tex, BOOL report_error) +LLViewerFetchedTexture* LLViewerTextureManager::staticCastToFetchedTexture(LLTexture* tex, BOOL report_error)  {  	if(!tex)  	{ @@ -415,6 +416,7 @@ void LLViewerTexture::init(bool firstinit)  	mDontDiscard = FALSE;  	mMaxVirtualSize = 0.f;  	mNeedsResetMaxVirtualSize = FALSE ; +	mParcelMedia = NULL ;  }  //virtual  @@ -522,6 +524,12 @@ F32 LLViewerTexture::getMaxVirtualSize()  	return mMaxVirtualSize ;  } +//virtual  +void LLViewerTexture::setKnownDrawSize(S32 width, S32 height) +{ +	//nothing here. +} +  //virtual  void LLViewerTexture::addFace(LLFace* facep)   { @@ -852,6 +860,7 @@ void LLViewerFetchedTexture::init(bool firstinit)  	mKnownDrawWidth = 0;  	mKnownDrawHeight = 0; +	mKnownDrawSizeChanged = FALSE ;  	if (firstinit)  	{ @@ -1084,10 +1093,17 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)  }  // Call with 0,0 to turn this feature off. +//virtual  void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height)  { -	mKnownDrawWidth = width; -	mKnownDrawHeight = height; +	if(mKnownDrawWidth != width || mKnownDrawHeight != height) +	{ +		mKnownDrawWidth = width; +		mKnownDrawHeight = height; + +		mKnownDrawSizeChanged = TRUE ; +		mFullyLoaded = FALSE ; +	}  	addTextureStats((F32)(width * height));  } @@ -1104,13 +1120,26 @@ void LLViewerFetchedTexture::processTextureStats()  		mDesiredDiscardLevel = 	getMaxDiscardLevel() ;  	}  	else -	{ -		mDesiredDiscardLevel = 0; -		if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) +	{	 +		if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)  		{ -			mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 +			if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) +			{ +				mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 +			} +			else +			{ +				mDesiredDiscardLevel = 0; +			}  		} - +		else if(mKnownDrawSizeChanged)//known draw size is set +		{			 +			mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2,  +					                             log((F32)mFullHeight / mKnownDrawHeight) / log_2) ; +			mDesiredDiscardLevel = 	llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ; +		} +		mKnownDrawSizeChanged = FALSE ; +		  		if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel))  		{  			mFullyLoaded = TRUE ; @@ -1121,8 +1150,6 @@ void LLViewerFetchedTexture::processTextureStats()  //texture does not have any data, so we don't know the size of the image, treat it like 32 * 32.  F32 LLViewerFetchedTexture::calcDecodePriorityForUnknownTexture(F32 pixel_priority)  { -	static const F64 log_2 = log(2.0); -  	F32 desired = (F32)(log(32.0/pixel_priority) / log_2);  	S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired + 1;  	ddiscard = llclamp(ddiscard, 1, 9); @@ -1169,7 +1196,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()  		// Don't decode anything we don't need  		priority = -1.0f;  	} -	else if (mBoostLevel == LLViewerTexture::BOOST_UI && !have_all_data) +	else if ((mBoostLevel == LLViewerTexture::BOOST_UI || mBoostLevel == LLViewerTexture::BOOST_ICON) && !have_all_data)  	{  		priority = 1.f;  	} @@ -2121,22 +2148,29 @@ void LLViewerMediaTexture::updateClass()  {  	static const F32 MAX_INACTIVE_TIME = 30.f ; +#if 0 +	//force to play media. +	gSavedSettings.setBOOL("AudioSteamingMedia", true) ; +	gSavedSettings.setBOOL("AudioStreamingVideo", true) ; +#endif +  	for(media_map_t::iterator iter = sMediaMap.begin() ; iter != sMediaMap.end(); )  	{  		LLViewerMediaTexture* mediap = iter->second;	 - -		// -		//Note: delay some time to delete the media textures to stop endlessly creating and immediately removing media texture. -		// -		if(mediap->getNumRefs() == 1 && mediap->getLastReferencedTimer()->getElapsedTimeF32() > MAX_INACTIVE_TIME) //one by sMediaMap -		{ -			media_map_t::iterator cur = iter++ ; -			sMediaMap.erase(cur) ; -		} -		else +		 +		if(mediap->getNumRefs() == 1) //one reference by sMediaMap  		{ -			++iter ; +			// +			//Note: delay some time to delete the media textures to stop endlessly creating and immediately removing media texture. +			// +			if(mediap->getLastReferencedTimer()->getElapsedTimeF32() > MAX_INACTIVE_TIME) +			{ +				media_map_t::iterator cur = iter++ ; +				sMediaMap.erase(cur) ; +				continue ; +			}  		} +		++iter ;  	}  } @@ -2189,11 +2223,22 @@ LLViewerMediaTexture::LLViewerMediaTexture(const LLUUID& id, BOOL usemipmaps, LL  	mIsPlaying = FALSE ;  	setMediaImpl() ; + +	LLViewerTexture* tex = gTextureList.findImage(mID) ; +	if(tex) //this media is a parcel media for tex. +	{ +		tex->setParcelMedia(this) ; +	}  }  //virtual   LLViewerMediaTexture::~LLViewerMediaTexture()   {	 +	LLViewerTexture* tex = gTextureList.findImage(mID) ; +	if(tex) //this media is a parcel media for tex. +	{ +		tex->setParcelMedia(NULL) ; +	}  }  void LLViewerMediaTexture::reinit(BOOL usemipmaps /* = TRUE */) @@ -2244,10 +2289,9 @@ BOOL LLViewerMediaTexture::findFaces()  	mMediaFaceList.clear() ;  	BOOL ret = TRUE ; - -	//for parcel media -	LLViewerTexture* tex = gTextureList.findImage(mID) ;	 -	if(tex) +	 +	LLViewerTexture* tex = gTextureList.findImage(mID) ; +	if(tex) //this media is a parcel media for tex.  	{  		const ll_face_list_t* face_list = tex->getFaceList() ;  		for(ll_face_list_t::const_iterator iter = face_list->begin(); iter != face_list->end(); ++iter) @@ -2358,7 +2402,7 @@ void LLViewerMediaTexture::addFace(LLFace* facep)  		mTextureList.push_back(facep->getTexture()) ; //a parcel media.  		return ;  	} - +	  	llerrs << "The face does not have a valid texture before media texture." << llendl ;  } diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 480e1c1cbc..020478beef 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -163,6 +163,7 @@ public:  	S32 getFullWidth() const { return mFullWidth; }  	S32 getFullHeight() const { return mFullHeight; }	 +	/*virtual*/ void setKnownDrawSize(S32 width, S32 height);  	virtual void addFace(LLFace* facep) ;  	virtual void removeFace(LLFace* facep) ;  @@ -220,6 +221,10 @@ public:  	BOOL getDontDiscard() const { return mDontDiscard; }  	//-----------------	 +	void setParcelMedia(LLViewerMediaTexture* media) {mParcelMedia = media;} +	BOOL hasParcelMedia() const { return mParcelMedia != NULL;} +	LLViewerMediaTexture* getParcelMedia() const { return mParcelMedia;} +  	/*virtual*/ void updateBindStatsForTester() ;  protected:  	void cleanup() ; @@ -246,6 +251,9 @@ protected:  	LLPointer<LLImageGL> mGLTexturep ;  	S8 mDontDiscard;			// Keep full res version of this image (for UI, etc) +	//do not use LLPointer here. +	LLViewerMediaTexture* mParcelMedia ; +  protected:  	typedef enum   	{ @@ -357,7 +365,7 @@ public:  	// Override the computation of discard levels if we know the exact output  	// size of the image.  Used for UI textures to not decode, even if we have  	// more data. -	void setKnownDrawSize(S32 width, S32 height); +	/*virtual*/ void setKnownDrawSize(S32 width, S32 height);  	void setIsMissingAsset();  	/*virtual*/ BOOL isMissingAsset()	const		{ return mIsMissingAsset; } @@ -406,6 +414,8 @@ private:  	BOOL  mFullyLoaded;  protected:		 +	std::string mLocalFileName; +  	S32 mOrigWidth;  	S32 mOrigHeight; @@ -413,8 +423,7 @@ protected:  	// Used for UI textures to not decode, even if we have more data.  	S32 mKnownDrawWidth;  	S32	mKnownDrawHeight; - -	std::string mLocalFileName; +	BOOL mKnownDrawSizeChanged ;  	S8  mDesiredDiscardLevel;			// The discard level we'd LIKE to have - if we have it and there's space	  	S8  mMinDesiredDiscardLevel;	// The minimum discard level we'd like to have @@ -570,7 +579,7 @@ public:  	static LLTexturePipelineTester* sTesterp ;  	//returns NULL if tex is not a LLViewerFetchedTexture nor derived from LLViewerFetchedTexture. -	static LLViewerFetchedTexture*    staticCastToFetchedTexture(LLViewerTexture* tex, BOOL report_error = FALSE) ; +	static LLViewerFetchedTexture*    staticCastToFetchedTexture(LLTexture* tex, BOOL report_error = FALSE) ;  	//  	//"find-texture" just check if the texture exists, if yes, return it, otherwise return null. diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index ba32e07464..b574a9c110 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2424,19 +2424,35 @@ void LLViewerWindow::updateUI()  	BOOL handled_by_top_ctrl = FALSE;  	LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();  	LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture(); +	LLView* captor_view = dynamic_cast<LLView*>(mouse_captor); + +	//FIXME: only include captor and captor's ancestors if mouse is truly over them --RN  	//build set of views containing mouse cursor by traversing UI hierarchy and testing   	//screen rect against mouse cursor  	view_handle_set_t mouse_hover_set; -	// start at current mouse captor (if is a view) or UI root -	LLView* root_view = NULL; -	root_view = dynamic_cast<LLView*>(mouse_captor); +	// constraint mouse enter events to children of mouse captor +	LLView* root_view = captor_view; + +	// if mouse captor doesn't exist or isn't a LLView +	// then allow mouse enter events on entire UI hierarchy  	if (!root_view)  	{  		root_view = mRootView;  	} +	// include all ancestors of captor_view as automatically having mouse +	if (captor_view) +	{ +		LLView* captor_parent_view = captor_view->getParent(); +		while(captor_parent_view) +		{ +			mouse_hover_set.insert(captor_parent_view->getHandle()); +			captor_parent_view = captor_parent_view->getParent(); +		} +	} +  	// aggregate visible views that contain mouse cursor in display order  	// while the top_ctrl contains the mouse cursor, only it and its descendants will receive onMouseEnter events diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp index 17b502ae80..5624f19c8d 100644 --- a/indra/newview/llvoavatardefines.cpp +++ b/indra/newview/llvoavatardefines.cpp @@ -68,9 +68,9 @@ LLVOAvatarDictionary::Textures::Textures()  	addEntry(TEX_EYES_ALPHA,                  new TextureEntry("eyes_alpha",       TRUE,  BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID",     WT_ALPHA));  	addEntry(TEX_HAIR_ALPHA,                  new TextureEntry("hair_alpha",       TRUE,  BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID",     WT_ALPHA)); -	addEntry(TEX_HEAD_TATTOO,                 new TextureEntry("head_tattoo",      TRUE,  BAKED_NUM_INDICES, "UIImgDefaultTattooUUID",     WT_TATTOO)); -	addEntry(TEX_UPPER_TATTOO,                new TextureEntry("upper_tattoo",     TRUE,  BAKED_NUM_INDICES, "UIImgDefaultTattooUUID",     WT_TATTOO)); -	addEntry(TEX_LOWER_TATTOO,                new TextureEntry("lower_tattoo",     TRUE,  BAKED_NUM_INDICES, "UIImgDefaultTattooUUID",     WT_TATTOO)); +	addEntry(TEX_HEAD_TATTOO,                 new TextureEntry("head_tattoo",      TRUE,  BAKED_NUM_INDICES, "",     WT_TATTOO)); +	addEntry(TEX_UPPER_TATTOO,                new TextureEntry("upper_tattoo",     TRUE,  BAKED_NUM_INDICES, "",     WT_TATTOO)); +	addEntry(TEX_LOWER_TATTOO,                new TextureEntry("lower_tattoo",     TRUE,  BAKED_NUM_INDICES, "",     WT_TATTOO));  	addEntry(TEX_HEAD_BAKED,                  new TextureEntry("head-baked",       FALSE, BAKED_HEAD));  	addEntry(TEX_UPPER_BAKED,                 new TextureEntry("upper-baked",      FALSE, BAKED_UPPER)); @@ -248,8 +248,6 @@ EBakedTextureIndex LLVOAvatarDictionary::findBakedByRegionName(std::string name)  //static  const LLUUID LLVOAvatarDictionary::getDefaultTextureImageID(ETextureIndex index)  { -	/* switch( index ) -		case TEX_UPPER_SHIRT:		return LLUUID( gSavedSettings.getString("UIImgDefaultShirtUUID") ); */  	const TextureEntry *texture_dict = getInstance()->getTexture(index);  	const std::string &default_image_name = texture_dict->mDefaultImageName;  	if (default_image_name == "") @@ -265,9 +263,6 @@ const LLUUID LLVOAvatarDictionary::getDefaultTextureImageID(ETextureIndex index)  // static  EWearableType LLVOAvatarDictionary::getTEWearableType(ETextureIndex index )  { -	/* switch(index) -		case TEX_UPPER_SHIRT: -			return WT_SHIRT; */  	return getInstance()->getTexture(index)->mWearableType;  } diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 7585842623..143cd2d9c6 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -249,6 +249,12 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)  		facep->mCenterLocal = part->mPosAgent;  		facep->setFaceColor(part->mColor);  		facep->setTexture(part->mImagep); +			 +		//check if this particle texture is replaced by a parcel media texture. +		if(part->mImagep.notNull() && part->mImagep->hasParcelMedia())  +		{ +			part->mImagep->getParcelMedia()->addMediaToFace(facep) ; +		}  		mPixelArea = tot_area * pixel_meter_ratio;  		const F32 area_scale = 10.f; // scale area to increase priority a bit diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 6e22472153..1e0da13162 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -66,6 +66,9 @@  	 name="Blue"  	 value="0 0 1 1" />  	<color +	 name="Yellow" +	 value="1 1 0 1" /> +	<color  	 name="Unused?"  	 value="1 0 1 1" />  	<color @@ -411,7 +414,7 @@       reference="Green" />      <color       name="MapAvatarFriendColor" -     reference="Unused?" /> +     reference="Yellow" />      <color       name="MapAvatarSelfColor"       value="0.53125 0 0.498047 1" /> diff --git a/indra/newview/skins/default/textures/icons/ForSale_Badge.png b/indra/newview/skins/default/textures/icons/ForSale_Badge.pngBinary files differ new file mode 100644 index 0000000000..5bee570cee --- /dev/null +++ b/indra/newview/skins/default/textures/icons/ForSale_Badge.png diff --git a/indra/newview/skins/default/textures/icons/Generic_Object_Small.png b/indra/newview/skins/default/textures/icons/Generic_Object_Small.pngBinary files differ new file mode 100644 index 0000000000..223874e631 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Generic_Object_Small.png diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.pngBinary files differ new file mode 100644 index 0000000000..f2ae828efc --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.pngBinary files differ new file mode 100644 index 0000000000..d454d4cd48 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png diff --git a/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.pngBinary files differ new file mode 100644 index 0000000000..c057e9743d --- /dev/null +++ b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index fdc7deab1c..82c994b150 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -93,11 +93,15 @@    <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />    <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" /> +  <texture name="ForSale_Badge" file_name="icons/ForSale_Badge.png" preload="false" />    <texture name="ForwardArrow_Off" file_name="icons/ForwardArrow_Off.png" preload="false" />    <texture name="ForwardArrow_Press" file_name="icons/ForwardArrow_Press.png" preload="false" />    <texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />    <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" /> +  <texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" /> +  <texture name="Generic_Object_Small" file_name="icons/ Generic_Object_Small.png" preload="false" /> +  <texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" />    <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />    <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" /> @@ -161,6 +165,8 @@    <texture name="Inv_Gloves" file_name="icons/Inv_Gloves.png" preload="false" />    <texture name="Inv_Hair" file_name="icons/Inv_Hair.png" preload="false" />    <texture name="Inv_Jacket" file_name="icons/Inv_Jacket.png" preload="false" /> +  <texture name="Inv_LookFolderOpen" file_name="icons/Inv_LookFolderOpen.png" preload="false" /> +  <texture name="Inv_LookFolderClosed" file_name="icons/Inv_LookFolderClosed.png" preload="false" />    <texture name="Inv_Landmark" file_name="icons/Inv_Landmark.png" preload="false" />    <texture name="Inv_Notecard" file_name="icons/Inv_Notecard.png" preload="false" />    <texture name="Inv_Object" file_name="icons/Inv_Object.png" preload="false" /> @@ -254,6 +260,42 @@    <texture name="Overhead_M" file_name="world/Overhead_M.png" preload="false" />    <texture name="Overhead_S" file_name="world/Overhead_S.png" preload="false" /> +  <texture name="parcel_drk_Build" file_name="icons/parcel_drk_Build.png" preload="false" /> + <texture name="parcel_drk_BuildNo" file_name="icons/parcel_drk_BuildNo.png" preload="false" /> + <texture name="parcel_drk_Damage" file_name="icons/parcel_drk_Damage.png" preload="false" /> + <texture name="parcel_drk_DamageNo" file_name="icons/parcel_drk_DamageNo.png" preload="false" /> + <texture name="parcel_drk_Fly" file_name="icons/parcel_drk_Fly.png" preload="false" /> + <texture name="parcel_drk_FlyNo" file_name="icons/parcel_drk_FlyNo.png" preload="false" /> + <texture name="parcel_drk_ForSale" file_name="icons/parcel_drk_ForSale.png" preload="false" /> + <texture name="parcel_drk_ForSaleNo" file_name="icons/parcel_drk_ForSaleNo.png" preload="false" /> + <texture name="parcel_drk_M" file_name="icons/parcel_drk_M.png" preload="false" /> + <texture name="parcel_drk_PG" file_name="icons/parcel_drk_PG.png" preload="false" /> + <texture name="parcel_drk_Push" file_name="icons/parcel_drk_Push.png" preload="false" /> + <texture name="parcel_drk_PushNo" file_name="icons/parcel_drk_PushNo.png" preload="false" /> + <texture name="parcel_drk_R" file_name="icons/parcel_drk_R.png" preload="false" /> + <texture name="parcel_drk_Scripts" file_name="icons/parcel_drk_Scripts.png" preload="false" /> + <texture name="parcel_drk_ScriptsNo" file_name="icons/parcel_drk_ScriptsNo.png" preload="false" /> + <texture name="parcel_drk_Voice" file_name="icons/parcel_drk_Voice.png" preload="false" /> + <texture name="parcel_drk_VoiceNo" file_name="icons/parcel_drk_VoiceNo.png" preload="false" /> + + <texture name="parcel_lght_Build" file_name="icons/parcel_lght_Build.png" preload="false" /> + <texture name="parcel_lght_BuildNo" file_name="icons/parcel_lght_BuildNo.png" preload="false" /> + <texture name="parcel_lght_Damage" file_name="icons/parcel_lght_Damage.png" preload="false" /> + <texture name="parcel_lght_DamageNo" file_name="icons/parcel_lght_DamageNo.png" preload="false" /> + <texture name="parcel_lght_Fly" file_name="icons/parcel_lght_Fly.png" preload="false" /> + <texture name="parcel_lght_FlyNo" file_name="icons/parcel_lght_FlyNo.png" preload="false" /> + <texture name="parcel_lght_ForSale" file_name="icons/parcel_lght_ForSale.png" preload="false" /> + <texture name="parcel_lght_ForSaleNo" file_name="icons/parcel_lght_ForSaleNo.png" preload="false" /> + <texture name="parcel_lght_M" file_name="icons/parcel_lght_M.png" preload="false" /> + <texture name="parcel_lght_PG" file_name="icons/parcel_lght_PG.png" preload="false" /> + <texture name="parcel_lght_Push" file_name="icons/parcel_lght_Push.png" preload="false" /> + <texture name="parcel_lght_PushNo" file_name="icons/parcel_lght_PushNo.png" preload="false" /> + <texture name="parcel_lght_R" file_name="icons/parcel_lght_R.png" preload="false" /> + <texture name="parcel_lght_Scripts" file_name="icons/parcel_lght_Scripts.png" preload="false" /> + <texture name="parcel_lght_ScriptsNo" file_name="icons/parcel_lght_ScriptsNo.png" preload="false" /> + <texture name="parcel_lght_Voice" file_name="icons/parcel_lght_Voice.png" preload="false" /> + <texture name="parcel_lght_VoiceNo" file_name="icons/parcel_lght_VoiceNo.png" preload="false" /> +    <texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" />    <texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" />    <texture name="Progress_3" file_name="icons/Progress_3.png" preload="false" /> @@ -433,15 +475,17 @@    <texture name="Widget_DownArrow" file_name="icons/Widget_DownArrow.png" preload="true" />    <texture name="Widget_UpArrow" file_name="icons/Widget_UpArrow.png" preload="true" /> -  <texture name="Window_Background" file_name="windows/Window_Background.png" preload="true"  +  <texture name="Window_Background" file_name="windows/Window_Background.png" preload="true"             scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> -  <texture name="Window_Foreground" file_name="windows/Window_Foreground.png" preload="true"  +  <texture name="Window_Foreground" file_name="windows/Window_Foreground.png" preload="true"             scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" />    <texture name="Window_NoTitle_Background" file_name="windows/Window_NoTitle_Background.png" preload="true"             scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" />    <texture name="Window_NoTitle_Foreground" file_name="windows/Window_NoTitle_Foreground.png" preload="true"             scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> +  <texture name="YouAreHere_Badge" file_name="icons/YouAreHere_Badge.png" preload="false" /> +    <!--WARNING OLD ART *do not use*-->   <texture name="Banner_ForSale" file_name="Banner_ForSale.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index a59a8b065f..3f63f493b1 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -167,6 +167,18 @@               function="Floater.Toggle"               parameter="active_speakers" />          </menu_item_check> +        <menu_item_check +         label="Nearby Media" +         layout="topleft" +         name="Nearby Media" +         shortcut="control|alt|N"> +            <menu_item_check.on_check +             function="Floater.Visible" +             parameter="nearby_media" /> +            <menu_item_check.on_click +             function="Floater.Toggle" +             parameter="nearby_media" /> +        </menu_item_check>          <!--menu_item_check           label="Block List"           layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 9bf684f1fd..9bf3458d29 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -10,6 +10,7 @@   left="0"   name="bottom_tray"   top="28" + chrome="true"    border_visible="false"   width="1000">      <layout_stack diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml index 1074dd4627..38ea6b6196 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml @@ -57,7 +57,7 @@       use_ellipses="false"       width="197"       word_wrap="false" /> -    <text +    <expandable_text       follows="top|left|right"       font="SansSerifSmall"       height="40" diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml index 319beac291..f59c46b2f5 100644 --- a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml +++ b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml @@ -3,7 +3,7 @@   max_height="300" >   <textbox     more_label="More"  -  follows="left|top" +  follows="left|top|right"    name="text"     allow_scroll="true"     use_ellipses="true" diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml index 1bd5a5bda2..7262c0dc5c 100644 --- a/indra/newview/skins/default/xui/en/widgets/panel.xml +++ b/indra/newview/skins/default/xui/en/widgets/panel.xml @@ -7,4 +7,5 @@  <panel bg_opaque_color="PanelFocusBackgroundColor"         bg_alpha_color="PanelDefaultBackgroundColor"         background_visible="false" -       background_opaque="false"/> +       background_opaque="false" +       chrome="false"/>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/widgets/tool_tip.xml b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml new file mode 100644 index 0000000000..6b49f832fd --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- See also settings.xml UIFloater* settings for configuration --> +<tool_tip name="tooltip" +          max_width="200" +          padding="4" +          wrap="true" +          font="SansSerif" +          bg_opaque_color="ToolTipBgColor" +          background_visible="true" + /> | 
