diff options
56 files changed, 1450 insertions, 579 deletions
| diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h index 1325b4995b..7a5d029038 100644 --- a/indra/llrender/llfontfreetype.h +++ b/indra/llrender/llfontfreetype.h @@ -58,9 +58,8 @@ private:  	~LLFontManager();  }; -class LLFontGlyphInfo +struct LLFontGlyphInfo  { -public:  	LLFontGlyphInfo(U32 index);  	U32 mGlyphIndex; diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index a28ffbfdc0..db1f019a81 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -195,7 +195,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  		cur_y += mFontFreetype->getDescenderHeight();  		break;  	case VCENTER: -		cur_y -= ((mFontFreetype->getAscenderHeight() - mFontFreetype->getDescenderHeight())/2.f); +		cur_y -= (mFontFreetype->getAscenderHeight() - mFontFreetype->getDescenderHeight()) / 2.f;  		break;  	case BASELINE:  		// Baseline, do nothing. @@ -221,7 +221,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	cur_render_y = cur_y;  	cur_render_x = cur_x; -	F32 start_x = cur_x; +	F32 start_x = llround(cur_x);  	const LLFontBitmapCache* font_bitmap_cache = mFontFreetype->getFontBitmapCache(); @@ -235,7 +235,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  	if (use_ellipses)  	{  		// check for too long of a string -		if (getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX > scaled_max_pixels) +		S32 string_width = llround(getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX); +		if (string_width > scaled_max_pixels)  		{  			// use four dots for ellipsis width to generate padding  			const LLWString dots(utf8str_to_wstring(std::string("...."))); @@ -301,8 +302,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  		// Must do this to cur_x, not just to cur_render_x, otherwise you  		// will squish sub-pixel kerned characters too close together.  		// For example, "CCCCC" looks bad. -		cur_x = (F32)llfloor(cur_x + 0.5f); -		//cur_y = (F32)llfloor(cur_y + 0.5f); +		cur_x = (F32)llround(cur_x); +		//cur_y = (F32)llround(cur_y);  		cur_render_x = cur_x;  		cur_render_y = cur_y; @@ -461,7 +462,7 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars  			cur_x += mFontFreetype->getXKerning(wch, next_char);  		}  		// Round after kerning. -		cur_x = (F32)llfloor(cur_x + 0.5f); +		cur_x = (F32)llround(cur_x);  	}  	// add in extra pixels for last character's width past its xadvance @@ -490,6 +491,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch  	// avoid S32 overflow when max_pixels == S32_MAX by staying in floating point  	F32 scaled_max_pixels =	ceil(max_pixels * sScaleX); +	F32 width_padding = 0.f;  	S32 i;  	for (i=0; (i < max_chars); i++) @@ -533,9 +535,17 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch  			}  		} -		cur_x += mFontFreetype->getXAdvance(wch); +		LLFontGlyphInfo* fgi = mFontFreetype->getGlyphInfo(wch); + +		// account for glyphs that run beyond the starting point for the next glyphs +		width_padding = llmax(	0.f,													// always use positive padding amount +								width_padding - fgi->mXAdvance,							// previous padding left over after advance of current character +								(F32)(fgi->mWidth + fgi->mXBearing) - fgi->mXAdvance);	// difference between width of this character and advance to next character + +		cur_x += fgi->mXAdvance; -		if (scaled_max_pixels < cur_x) +		// clip if current character runs past scaled_max_pixels (using width_padding) +		if (scaled_max_pixels < cur_x + width_padding)  		{  			clip = TRUE;  			break; @@ -548,7 +558,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch  		}  		// Round after kerning. -		cur_x = (F32)llfloor(cur_x + 0.5f); +		cur_x = llround(cur_x);  		drawn_x = cur_x;  	} @@ -660,7 +670,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t  		}  		// Round after kerning. -		cur_x = (F32)llfloor(cur_x + 0.5f); +		cur_x = llround(cur_x);  	}  	return llmin(max_chars, pos - begin_offset); diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 7721137e29..e9f6288f44 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -63,7 +63,6 @@ template class LLButton* LLView::getChild<class LLButton>(  // globals loaded from settings.xml  S32	LLBUTTON_H_PAD	= 0; -S32	LLBUTTON_V_PAD	= 0;  S32 BTN_HEIGHT_SMALL= 0;  S32 BTN_HEIGHT		= 0; @@ -93,6 +92,7 @@ LLButton::Params::Params()  	flash_color("flash_color"),  	pad_right("pad_right", LLUI::sSettingGroups["config"]->getS32("ButtonHPad")),  	pad_left("pad_left", LLUI::sSettingGroups["config"]->getS32("ButtonHPad")), +	pad_bottom("pad_bottom"),  	click_callback("click_callback"),  	mouse_down_callback("mouse_down_callback"),  	mouse_up_callback("mouse_up_callback"), @@ -148,6 +148,7 @@ LLButton::LLButton(const LLButton::Params& p)  	mHAlign(p.font_halign),  	mLeftHPad(p.pad_left),  	mRightHPad(p.pad_right), +	mBottomVPad(p.pad_bottom),  	mHoverGlowStrength(p.hover_glow_amount),  	mCommitOnReturn(p.commit_on_return),  	mFadeWhenDisabled(FALSE), @@ -839,7 +840,9 @@ void LLButton::draw()  		// LLFontGL::render expects S32 max_chars variable but process in a separate way -1 value.  		// Due to U32_MAX is equal to S32 -1 value I have rest this value for non-ellipses mode.  		// Not sure if it is really needed. Probably S32_MAX should be always passed as max_chars. -		mLastDrawCharsCount = mGLFont->render(label, 0, (F32)x, (F32)(LLBUTTON_V_PAD + y_offset), +		mLastDrawCharsCount = mGLFont->render(label, 0, +			(F32)x, +			(F32)(mBottomVPad + y_offset),  			label_color % alpha,  			mHAlign, LLFontGL::BOTTOM,  			LLFontGL::NORMAL, diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 4c7400220d..5e28b8cdff 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -49,7 +49,6 @@  // PLEASE please use these "constants" when building your own buttons.  // They are loaded from settings.xml at run time.  extern S32	LLBUTTON_H_PAD; -extern S32	LLBUTTON_V_PAD;  extern S32	BTN_HEIGHT_SMALL;  extern S32	BTN_HEIGHT; @@ -105,6 +104,7 @@ public:  		// layout  		Optional<S32>			pad_right;  		Optional<S32>			pad_left; +		Optional<S32>			pad_bottom; // under text label  		// callbacks  		Optional<CommitCallbackParam>	click_callback, // alias -> commit_callback @@ -310,6 +310,7 @@ private:  	LLFontGL::HAlign			mHAlign;  	S32							mLeftHPad;  	S32							mRightHPad; +	S32							mBottomVPad;	// under text label  	F32							mHoverGlowStrength;  	F32							mCurGlowStrength; diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp index d9b98b1c28..a93c666648 100644 --- a/indra/llui/lldraghandle.cpp +++ b/indra/llui/lldraghandle.cpp @@ -112,6 +112,7 @@ void LLDragHandleTop::setTitle(const std::string& title)  		params.font(font);  		params.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT | FOLLOWS_RIGHT);  		params.font_shadow(LLFontGL::DROP_SHADOW_SOFT); +		params.use_ellipses = true;  		mTitleBox = LLUICtrlFactory::create<LLTextBox> (params);  		addChild( mTitleBox );  	} diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index fd7b64af02..5fd707fea3 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1649,6 +1649,7 @@ void LLFloater::draw()  	}  	else  	{ +		//FIXME: get rid of this hack  		// draw children  		LLView* focused_child = dynamic_cast<LLView*>(gFocusMgr.getKeyboardFocus());  		BOOL focused_child_visible = FALSE; @@ -2703,6 +2704,18 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o  			output_node, output_params, &default_params);  	} +	// Default floater position to top-left corner of screen +	// However, some legacy floaters have explicit top or bottom +	// coordinates set, so respect their wishes. +	if (!params.rect.top.isProvided() && !params.rect.bottom.isProvided()) +	{ +		params.rect.top.set(0); +	} +	if (!params.rect.left.isProvided() && !params.rect.right.isProvided()) +	{ +		params.rect.left.set(0); +	} +  	setupParams(params, parent);   	initFromParams(params); diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index d7d61cf6cb..2d9106923e 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -906,7 +906,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  	if (placeholder)  	{ -		btn_rect.translate(0, -LLBUTTON_V_PAD-2); +		btn_rect.translate(0, -3); // *TODO: make configurable  		LLTextBox::Params params;  		params.name(trimmed_label);  		params.rect(btn_rect); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index e0503a0844..1f120a1483 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -312,7 +312,7 @@ void LLTextBase::drawSelectionBackground()  		S32 selection_left		= llmin( mSelectionStart, mSelectionEnd );  		S32 selection_right		= llmax( mSelectionStart, mSelectionEnd ); -		LLRect selection_rect = mTextRect; +		LLRect selection_rect = mVisibleTextRect;  		// Skip through the lines we aren't drawing.  		LLRect content_display_rect = getVisibleDocumentRect(); @@ -391,7 +391,7 @@ void LLTextBase::drawSelectionBackground()  			++rect_it)  		{  			LLRect selection_rect = *rect_it; -			selection_rect.translate(mTextRect.mLeft - content_display_rect.mLeft, mTextRect.mBottom - content_display_rect.mBottom); +			selection_rect.translate(mVisibleTextRect.mLeft - content_display_rect.mLeft, mVisibleTextRect.mBottom - content_display_rect.mBottom);  			gl_rect_2d(selection_rect, selection_color);  		}  	} @@ -538,10 +538,10 @@ void LLTextBase::drawText()  			line_end = next_start;  		} -		LLRect text_rect(line.mRect.mLeft + mTextRect.mLeft - scrolled_view_rect.mLeft, -						line.mRect.mTop - scrolled_view_rect.mBottom + mTextRect.mBottom, +		LLRect text_rect(line.mRect.mLeft + mVisibleTextRect.mLeft - scrolled_view_rect.mLeft, +						line.mRect.mTop - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom,  						llmin(mDocumentView->getRect().getWidth(), line.mRect.mRight) - scrolled_view_rect.mLeft, -						line.mRect.mBottom - scrolled_view_rect.mBottom + mTextRect.mBottom); +						line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom);  		// draw a single line of text  		S32 seg_start = line_start; @@ -561,14 +561,14 @@ void LLTextBase::drawText()  			S32 clipped_end	=	llmin( line_end, cur_segment->getEnd() )  - cur_segment->getStart(); -			if (mUseEllipses -				&& clipped_end == line_end  -				&& next_line == last_line  -				&& last_line < (S32)mLineInfoList.size()) +			if (mUseEllipses								// using ellipses +				&& clipped_end == line_end					// last segment on line +				&& next_line == last_line					// this is the last visible line +				&& last_line < (S32)mLineInfoList.size())	// and there is more text to display  			{ -				// more text to go, but we can't fit it -				// so attempt to draw one extra character to force ellipses -				clipped_end++; +				// more lines of text to go, but we can't fit them +				// so shrink text rect to force ellipses +				text_rect.mRight -= 2;  			}  			text_rect.mLeft = (S32)(cur_segment->draw(seg_start - cur_segment->getStart(), clipped_end, selection_left, selection_right, text_rect)); @@ -949,7 +949,7 @@ void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)  		LLUICtrl::reshape( width, height, called_from_parent );  		// do this first after reshape, because other things depend on -		// up-to-date mTextRect +		// up-to-date mVisibleTextRect  		updateRects();  		needsReflow(); @@ -984,7 +984,7 @@ void LLTextBase::draw()  							: hasFocus()   								? mFocusBgColor.get()   								: mWriteableBgColor.get(); -		gl_rect_2d(mTextRect, bg_color, TRUE); +		gl_rect_2d(mVisibleTextRect, bg_color, TRUE);  	}  	// draw document view @@ -1053,9 +1053,9 @@ S32 LLTextBase::getLeftOffset(S32 width)  	case LLFontGL::LEFT:  		return mHPad;  	case LLFontGL::HCENTER: -		return mHPad + (mTextRect.getWidth() - width - mHPad) / 2; +		return mHPad + (mVisibleTextRect.getWidth() - width - mHPad) / 2;  	case LLFontGL::RIGHT: -		return mTextRect.getWidth() - width; +		return mVisibleTextRect.getWidth() - width;  	default:  		return mHPad;  	} @@ -1071,17 +1071,17 @@ void LLTextBase::reflow(S32 start_index)  	while(mReflowNeeded)  	{ -		mReflowNeeded = FALSE; +		mReflowNeeded = false;  		// shrink document to minimum size (visible portion of text widget)  		// to force inlined widgets with follows set to shrink -		mDocumentView->setShape(mTextRect); +		mDocumentView->reshape(mVisibleTextRect.getWidth(), mDocumentView->getRect().getHeight());  		bool scrolled_to_bottom = mScroller ? mScroller->isAtBottom() : false;  		LLRect old_cursor_rect = getLocalRectFromDocIndex(mCursorPos); -		bool follow_selection = mTextRect.overlaps(old_cursor_rect); // cursor is visible -		old_cursor_rect.translate(-mTextRect.mLeft, -mTextRect.mBottom); +		bool follow_selection = mVisibleTextRect.overlaps(old_cursor_rect); // cursor is visible +		old_cursor_rect.translate(-mVisibleTextRect.mLeft, -mVisibleTextRect.mBottom);  		S32 first_line = getFirstVisibleLine(); @@ -1094,15 +1094,15 @@ void LLTextBase::reflow(S32 start_index)  		}  		LLRect first_char_rect = getLocalRectFromDocIndex(mScrollIndex);  		// subtract off effect of horizontal scrollbar from local position of first char -		first_char_rect.translate(-mTextRect.mLeft, -mTextRect.mBottom); +		first_char_rect.translate(-mVisibleTextRect.mLeft, -mVisibleTextRect.mBottom);  		S32 cur_top = 0;  		segment_set_t::iterator seg_iter = mSegments.begin();  		S32 seg_offset = 0;  		S32 line_start_index = 0; -		const S32 text_width = mTextRect.getWidth() - mHPad;  // reserve room for margin -		S32 remaining_pixels = text_width; +		const S32 text_available_width = mVisibleTextRect.getWidth() - mHPad;  // reserve room for margin +		S32 remaining_pixels = text_available_width;  		LLWString text(getWText());  		S32 line_count = 0; @@ -1142,10 +1142,11 @@ void LLTextBase::reflow(S32 start_index)  			S32 last_segment_char_on_line = segment->getStart() + seg_offset; -			S32 text_left = getLeftOffset(text_width - remaining_pixels); +			S32 text_actual_width = text_available_width - remaining_pixels; +			S32 text_left = getLeftOffset(text_actual_width);  			LLRect line_rect(text_left,   							cur_top,  -							text_left + (text_width - remaining_pixels),  +							text_left + text_actual_width,   							cur_top - line_height);  			// if we didn't finish the current segment... @@ -1160,7 +1161,7 @@ void LLTextBase::reflow(S32 start_index)  				line_start_index = segment->getStart() + seg_offset;  				cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels; -				remaining_pixels = text_width; +				remaining_pixels = text_available_width;  				line_height = 0;  			}  			// ...just consumed last segment.. @@ -1188,7 +1189,7 @@ void LLTextBase::reflow(S32 start_index)  					line_start_index = segment->getStart() + seg_offset;  					cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;  					line_height = 0; -					remaining_pixels = text_width; +					remaining_pixels = text_available_width;  				}  				++seg_iter;  				seg_offset = 0; @@ -1238,10 +1239,10 @@ void LLTextBase::reflow(S32 start_index)  	}  } -LLRect LLTextBase::getContentsRect() +LLRect LLTextBase::getTextBoundingRect()  {  	reflow(); -	return mContentsRect; +	return mTextBoundingRect;  } @@ -1760,7 +1761,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round  	LLRect visible_region = getVisibleDocumentRect();  	// binary search for line that starts before local_y -	line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), local_y - mTextRect.mBottom + visible_region.mBottom, compare_bottom()); +	line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), local_y - mVisibleTextRect.mBottom + visible_region.mBottom, compare_bottom());  	if (line_iter == mLineInfoList.end())  	{ @@ -1768,7 +1769,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round  	}  	S32 pos = getLength(); -	S32 start_x = mTextRect.mLeft + line_iter->mRect.mLeft; +	S32 start_x = mVisibleTextRect.mLeft + line_iter->mRect.mLeft;  	segment_set_t::iterator line_seg_iter;  	S32 line_seg_offset; @@ -1879,7 +1880,7 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const  	if (mLineInfoList.empty())   	{   		// return default height rect in upper left -		local_rect = mTextRect; +		local_rect = mVisibleTextRect;  		local_rect.mBottom = local_rect.mTop - (S32)(mDefaultFont->getLineHeight());  		return local_rect;  	} @@ -1890,8 +1891,8 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const  	// compensate for scrolled, inset view of doc  	LLRect scrolled_view_rect = getVisibleDocumentRect();  	local_rect = doc_rect; -	local_rect.translate(mTextRect.mLeft - scrolled_view_rect.mLeft,  -						mTextRect.mBottom - scrolled_view_rect.mBottom); +	local_rect.translate(mVisibleTextRect.mLeft - scrolled_view_rect.mLeft,  +						mVisibleTextRect.mBottom - scrolled_view_rect.mBottom);  	return local_rect;  } @@ -1991,7 +1992,7 @@ void LLTextBase::changeLine( S32 delta )  	LLRect visible_region = getVisibleDocumentRect(); -	S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mTextRect.mBottom - visible_region.mBottom, TRUE); +	S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mVisibleTextRect.mBottom - visible_region.mBottom, TRUE);  	setCursorPos(new_cursor_pos, true);  } @@ -2067,56 +2068,64 @@ void LLTextBase::updateRects()  {  	if (mLineInfoList.empty())   	{ -		mContentsRect = LLRect(0, mVPad, mHPad, 0); +		mTextBoundingRect = LLRect(0, mVPad, mHPad, 0);  	}  	else  	{ -		mContentsRect = mLineInfoList.begin()->mRect; +		mTextBoundingRect = mLineInfoList.begin()->mRect;  		for (line_list_t::const_iterator line_iter = ++mLineInfoList.begin();  			line_iter != mLineInfoList.end();  			++line_iter)  		{ -			mContentsRect.unionWith(line_iter->mRect); +			mTextBoundingRect.unionWith(line_iter->mRect);  		} -		mContentsRect.mTop += mVPad; +		mTextBoundingRect.mTop += mVPad;  		// subtract a pixel off the bottom to deal with rounding errors in measuring font height -		mContentsRect.mBottom -= 1; +		mTextBoundingRect.mBottom -= 1; -		S32 delta_pos = -mContentsRect.mBottom; +		S32 delta_pos = -mTextBoundingRect.mBottom;  		// move line segments to fit new document rect  		for (line_list_t::iterator it = mLineInfoList.begin(); it != mLineInfoList.end(); ++it)  		{  			it->mRect.translate(0, delta_pos);  		} -		mContentsRect.translate(0, delta_pos); +		mTextBoundingRect.translate(0, delta_pos);  	}  	// update document container dimensions according to text contents -	LLRect doc_rect = mContentsRect; -	// use old mTextRect constraint document to width of viewable region +	LLRect doc_rect = mTextBoundingRect; +	// use old mVisibleTextRect constraint document to width of viewable region  	doc_rect.mLeft = 0; -	doc_rect.mRight = llmax(mTextRect.getWidth(), mContentsRect.mRight); + +	// allow horizontal scrolling? +	// if so, use entire width of text contents +	// otherwise, stop at width of mVisibleTextRect +	doc_rect.mRight = mScroller  +		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight) +		: mVisibleTextRect.getWidth();  	mDocumentView->setShape(doc_rect); -	//update mTextRect *after* mDocumentView has been resized +	//update mVisibleTextRect *after* mDocumentView has been resized  	// so that scrollbars are added if document needs to scroll -	// since mTextRect does not include scrollbars -	LLRect old_text_rect = mTextRect; -	mTextRect = mScroller ? mScroller->getContentWindowRect() : getLocalRect(); +	// since mVisibleTextRect does not include scrollbars +	LLRect old_text_rect = mVisibleTextRect; +	mVisibleTextRect = mScroller ? mScroller->getContentWindowRect() : getLocalRect();  	//FIXME: replace border with image?  	if (mBorderVisible)  	{ -		mTextRect.stretch(-1); +		mVisibleTextRect.stretch(-1);  	} -	if (mTextRect != old_text_rect) +	if (mVisibleTextRect != old_text_rect)  	{  		needsReflow();  	} -	// update document container again, using new mTextRect -	doc_rect.mRight = llmax(mTextRect.getWidth(), mContentsRect.mRight); +	// update document container again, using new mVisibleTextRect (that has scrollbars enabled as needed) +	doc_rect.mRight = mScroller  +		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight) +		: mVisibleTextRect.getWidth();  	mDocumentView->setShape(doc_rect);  } @@ -2154,7 +2163,7 @@ LLRect LLTextBase::getVisibleDocumentRect() const  		LLRect doc_rect = mDocumentView->getLocalRect();  		doc_rect.mLeft -= mDocumentView->getRect().mLeft;  		// adjust for height of text above widget baseline -		doc_rect.mBottom = doc_rect.getHeight() - mTextRect.getHeight(); +		doc_rect.mBottom = doc_rect.getHeight() - mVisibleTextRect.getHeight();  		return doc_rect;  	}  } @@ -2413,10 +2422,18 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt  	if (num_chars > 0)  	{  		LLWString text = mEditor.getWText(); -		width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);  		// if last character is a newline, then return true, forcing line break  		llwchar last_char = text[mStart + first_char + num_chars - 1]; -		force_newline = (last_char == '\n'); +		if (last_char == '\n') +		{ +			force_newline = true; +			// don't count newline in font width +			width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars - 1); +		} +		else +		{ +			width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars); +		}  	}  	else  	{ diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 0138ca3704..a1f8ba39ae 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -156,8 +156,8 @@ public:  	void					addDocumentChild(LLView* view);  	void					removeDocumentChild(LLView* view);  	const LLView*			getDocumentView() const { return mDocumentView; } -	LLRect					getTextRect() { return mTextRect; } -	LLRect					getContentsRect(); +	LLRect					getVisibleTextRect() { return mVisibleTextRect; } +	LLRect					getTextBoundingRect();  	LLRect					getVisibleDocumentRect() const;  	S32						getVPad() { return mVPad; } @@ -311,8 +311,8 @@ protected:  	// text segmentation and flow  	segment_set_t       		mSegments;  	line_list_t					mLineInfoList; -	LLRect						mTextRect;			// The rect in which text is drawn.  Excludes borders. -	LLRect						mContentsRect; +	LLRect						mVisibleTextRect;			// The rect in which text is drawn.  Excludes borders. +	LLRect						mTextBoundingRect;  	// colors  	LLUIColor					mCursorColor; diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp index 0bd0ab59fb..a1f5b5726b 100644 --- a/indra/llui/lltextbox.cpp +++ b/indra/llui/lltextbox.cpp @@ -134,12 +134,12 @@ void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* user  S32 LLTextBox::getTextPixelWidth()  { -	return getContentsRect().getWidth(); +	return getTextBoundingRect().getWidth();  }  S32 LLTextBox::getTextPixelHeight()  { -	return getContentsRect().getHeight(); +	return getTextBoundingRect().getHeight();  } diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index faf9ccbeb8..e8fc9475a5 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -758,8 +758,8 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)  			{	  				mScroller->autoScroll(x, y);  			} -			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight); -			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop); +			S32 clamped_x = llclamp(x, mVisibleTextRect.mLeft, mVisibleTextRect.mRight); +			S32 clamped_y = llclamp(y, mVisibleTextRect.mBottom, mVisibleTextRect.mTop);  			setCursorAtLocalPos( clamped_x, clamped_y, true );  			mSelectionEnd = mCursorPos;  		} @@ -809,8 +809,8 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)  			{  				mScroller->autoScroll(x, y);  			} -			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight); -			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop); +			S32 clamped_x = llclamp(x, mVisibleTextRect.mLeft, mVisibleTextRect.mRight); +			S32 clamped_y = llclamp(y, mVisibleTextRect.mBottom, mVisibleTextRect.mTop);  			setCursorAtLocalPos( clamped_x, clamped_y, true );  			endSelection();  		} @@ -2075,8 +2075,8 @@ void LLTextEditor::drawPreeditMarker()  	const S32 line_height = llround( mDefaultFont->getLineHeight() );  	S32 line_start = getLineStart(cur_line); -	S32 line_y = mTextRect.mTop - line_height; -	while((mTextRect.mBottom <= line_y) && (num_lines > cur_line)) +	S32 line_y = mVisibleTextRect.mTop - line_height; +	while((mVisibleTextRect.mBottom <= line_y) && (num_lines > cur_line))  	{  		S32 next_start = -1;  		S32 line_end = text_len; @@ -2108,12 +2108,12 @@ void LLTextEditor::drawPreeditMarker()  					continue;  				} -				S32 preedit_left = mTextRect.mLeft; +				S32 preedit_left = mVisibleTextRect.mLeft;  				if (left > line_start)  				{  					preedit_left += mDefaultFont->getWidth(text, line_start, left - line_start);  				} -				S32 preedit_right = mTextRect.mLeft; +				S32 preedit_right = mVisibleTextRect.mLeft;  				if (right < line_end)  				{  					preedit_right += mDefaultFont->getWidth(text, line_start, right - line_start); @@ -2154,7 +2154,7 @@ void LLTextEditor::drawLineNumbers()  {  	LLGLSUIDefault gls_ui;  	LLRect scrolled_view_rect = getVisibleDocumentRect(); -	LLRect content_rect = getTextRect();	 +	LLRect content_rect = getVisibleTextRect();	  	LLLocalClipRect clip(content_rect);  	S32 first_line = getFirstVisibleLine();  	S32 num_lines = getLineCount(); @@ -2180,12 +2180,12 @@ void LLTextEditor::drawLineNumbers()  		{  			line_info& line = mLineInfoList[cur_line]; -			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mTextRect.mBottom)  +			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom)   			{  				break;  			} -			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mTextRect.mBottom; +			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;  			// draw the line numbers  			if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)   			{ @@ -2216,8 +2216,8 @@ void LLTextEditor::draw()  {  	{  		// pad clipping rectangle so that cursor can draw at full width -		// when at left edge of mTextRect -		LLRect clip_rect(mTextRect); +		// when at left edge of mVisibleTextRect +		LLRect clip_rect(mVisibleTextRect);  		clip_rect.stretch(1);  		LLLocalClipRect clip(clip_rect);  		drawPreeditMarker(); @@ -2781,7 +2781,7 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect  	if (control)  	{  		LLRect control_rect_screen; -		localRectToScreen(mTextRect, &control_rect_screen); +		localRectToScreen(mVisibleTextRect, &control_rect_screen);  		LLUI::screenRectToGL(control_rect_screen, control);  	} @@ -2832,8 +2832,8 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect  	if (coord)  	{ -		const S32 query_x = mTextRect.mLeft + mDefaultFont->getWidth(text, current_line_start, query - current_line_start); -		const S32 query_y = mTextRect.mTop - (current_line - first_visible_line) * line_height - line_height / 2; +		const S32 query_x = mVisibleTextRect.mLeft + mDefaultFont->getWidth(text, current_line_start, query - current_line_start); +		const S32 query_y = mVisibleTextRect.mTop - (current_line - first_visible_line) * line_height - line_height / 2;  		S32 query_screen_x, query_screen_y;  		localPointToScreen(query_x, query_y, &query_screen_x, &query_screen_y);  		LLUI::screenPointToGL(query_screen_x, query_screen_y, &coord->mX, &coord->mY); @@ -2841,13 +2841,13 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect  	if (bounds)  	{ -		S32 preedit_left = mTextRect.mLeft; +		S32 preedit_left = mVisibleTextRect.mLeft;  		if (preedit_left_position > current_line_start)  		{  			preedit_left += mDefaultFont->getWidth(text, current_line_start, preedit_left_position - current_line_start);  		} -		S32 preedit_right = mTextRect.mLeft; +		S32 preedit_right = mVisibleTextRect.mLeft;  		if (preedit_right_position < current_line_end)  		{  			preedit_right += mDefaultFont->getWidth(text, current_line_start, preedit_right_position - current_line_start); @@ -2857,7 +2857,7 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect  			preedit_right += mDefaultFont->getWidth(text, current_line_start, current_line_end - current_line_start);  		} -		const S32 preedit_top = mTextRect.mTop - (current_line - first_visible_line) * line_height; +		const S32 preedit_top = mVisibleTextRect.mTop - (current_line - first_visible_line) * line_height;  		const S32 preedit_bottom = preedit_top - line_height;  		const LLRect preedit_rect_local(preedit_left, preedit_top, preedit_right, preedit_bottom); diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp index 3a1e656364..f7a53e87de 100644 --- a/indra/llui/lluistring.cpp +++ b/indra/llui/lluistring.cpp @@ -39,22 +39,23 @@ LLFastTimer::DeclareTimer FTM_UI_STRING("UI String");  LLUIString::LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args) -	: mOrig(instring), -	  mArgs(args) +:	mOrig(instring), +	mArgs(args)  { -	format(); +	dirty();  }  void LLUIString::assign(const std::string& s)  {  	mOrig = s; -	format(); +	dirty();  }  void LLUIString::setArgList(const LLStringUtil::format_map_t& args) +  {  	mArgs = args; -	format(); +	dirty();  }  void LLUIString::setArgs(const LLSD& sd) @@ -68,40 +69,40 @@ void LLUIString::setArgs(const LLSD& sd)  	{  		setArg(sd_it->first, sd_it->second.asString());  	} -	format(); +	dirty();  }  void LLUIString::setArg(const std::string& key, const std::string& replacement)  {  	mArgs[key] = replacement; -	format(); +	dirty();  }  void LLUIString::truncate(S32 maxchars)  { -	if (mWResult.size() > (size_t)maxchars) +	if (getUpdatedWResult().size() > (size_t)maxchars)  	{ -		LLWStringUtil::truncate(mWResult, maxchars); -		mResult = wstring_to_utf8str(mWResult); +		LLWStringUtil::truncate(getUpdatedWResult(), maxchars); +		mResult = wstring_to_utf8str(getUpdatedWResult());  	}  }  void LLUIString::erase(S32 charidx, S32 len)  { -	mWResult.erase(charidx, len); -	mResult = wstring_to_utf8str(mWResult); +	getUpdatedWResult().erase(charidx, len); +	mResult = wstring_to_utf8str(getUpdatedWResult());  }  void LLUIString::insert(S32 charidx, const LLWString& wchars)  { -	mWResult.insert(charidx, wchars); -	mResult = wstring_to_utf8str(mWResult); +	getUpdatedWResult().insert(charidx, wchars); +	mResult = wstring_to_utf8str(getUpdatedWResult());  }  void LLUIString::replace(S32 charidx, llwchar wc)  { -	mWResult[charidx] = wc; -	mResult = wstring_to_utf8str(mWResult); +	getUpdatedWResult()[charidx] = wc; +	mResult = wstring_to_utf8str(getUpdatedWResult());  }  void LLUIString::clear() @@ -112,8 +113,16 @@ void LLUIString::clear()  	mWResult.clear();  } -void LLUIString::format() +void LLUIString::dirty()  { +	mNeedsResult = true; +	mNeedsWResult = true; +} + +void LLUIString::updateResult() const +{ +	mNeedsResult = false; +  	LLFastTimer timer(FTM_UI_STRING);  	// optimize for empty strings (don't attempt string replacement) @@ -129,5 +138,11 @@ void LLUIString::format()  	LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();  	combined_args.insert(mArgs.begin(), mArgs.end());  	LLStringUtil::format(mResult, combined_args); -	mWResult = utf8str_to_wstring(mResult); +} + +void LLUIString::updateWResult() const +{ +	mNeedsWResult = false; + +	mWResult = utf8str_to_wstring(getUpdatedResult());  } diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h index 763de4d6a3..7ec0fd603a 100644 --- a/indra/llui/lluistring.h +++ b/indra/llui/lluistring.h @@ -76,19 +76,19 @@ public:  	void setArgs(const class LLSD& sd);  	void setArg(const std::string& key, const std::string& replacement); -	const std::string& getString() const { return mResult; } -	operator std::string() const { return mResult; } +	const std::string& getString() const { return getUpdatedResult(); } +	operator std::string() const { return getUpdatedResult(); } -	const LLWString& getWString() const { return mWResult; } -	operator LLWString() const { return mWResult; } +	const LLWString& getWString() const { return getUpdatedWResult(); } +	operator LLWString() const { return getUpdatedWResult(); } -	bool empty() const { return mWResult.empty(); } -	S32 length() const { return mWResult.size(); } +	bool empty() const { return getUpdatedResult().empty(); } +	S32 length() const { return getUpdatedWResult().size(); }  	void clear();  	void clearArgs() { mArgs.clear(); } -	// These utuilty functions are included for text editing. +	// These utility functions are included for text editing.  	// They do not affect mOrig and do not perform argument substitution  	void truncate(S32 maxchars);  	void erase(S32 charidx, S32 len); @@ -96,12 +96,24 @@ public:  	void replace(S32 charidx, llwchar wc);  private: -	void format();	 +	// something changed, requiring reformatting of strings +	void dirty(); + +	std::string& getUpdatedResult() const { if (mNeedsResult) { updateResult(); } return mResult; } +	LLWString& getUpdatedWResult() const{ if (mNeedsWResult) { updateWResult(); } return mWResult; } + +	// do actual work of updating strings (non-inlined) +	void updateResult() const; +	void updateWResult() const;  	std::string mOrig; -	std::string mResult; -	LLWString mWResult; // for displaying +	mutable std::string mResult; +	mutable LLWString mWResult; // for displaying  	LLStringUtil::format_map_t mArgs; + +	// controls lazy evaluation +	mutable bool	mNeedsResult; +	mutable bool	mNeedsWResult;  };  #endif // LL_LLUISTRING_H diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index eed84671c1..7ac7a09d56 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1068,17 +1068,6 @@        <key>Value</key>        <integer>23</integer>      </map> -    <key>ButtonVPad</key> -    <map> -      <key>Comment</key> -      <string>Default vertical spacing between buttons (pixels)</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <integer>1</integer> -    </map>      <key>CacheLocation</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 3250343b25..90b8cd9572 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -391,7 +391,6 @@ bool handleCrashSubmitBehaviorChanged(const LLSD& newvalue)  static void settings_to_globals()  {  	LLBUTTON_H_PAD		= gSavedSettings.getS32("ButtonHPad"); -	LLBUTTON_V_PAD		= gSavedSettings.getS32("ButtonVPad");  	BTN_HEIGHT_SMALL	= gSavedSettings.getS32("ButtonHeightSmall");  	BTN_HEIGHT			= gSavedSettings.getS32("ButtonHeight"); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index efe9ea4c35..6c843e1ec3 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -332,12 +332,12 @@ LLChatHistory::~LLChatHistory()  {  	static LLUICachedControl<S32> texteditor_border ("UITextEditorBorder", 0); -	LLRect old_text_rect = mTextRect; -	mTextRect = mScroller->getContentWindowRect(); -	mTextRect.stretch(-texteditor_border); -	mTextRect.mLeft += mLeftTextPad; -	mTextRect.mRight -= mRightTextPad; -	if (mTextRect != old_text_rect) +	LLRect old_text_rect = mVisibleTextRect; +	mVisibleTextRect = mScroller->getContentWindowRect(); +	mVisibleTextRect.stretch(-texteditor_border); +	mVisibleTextRect.mLeft += mLeftTextPad; +	mVisibleTextRect.mRight -= mRightTextPad; +	if (mVisibleTextRect != old_text_rect)  	{  		needsReflow();  	} diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index bd6936f05c..9c37c953fe 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -51,8 +51,16 @@ public:  	/*virtual*/ bool	getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const   	{  		// more label always spans width of text box -		width = mEditor.getTextRect().getWidth() - mEditor.getHPad();  -		height = llceil(mStyle->getFont()->getLineHeight()); +		if (num_chars == 0) +		{ +			width = 0;  +			height = 0; +		} +		else +		{ +			width = mEditor.getDocumentView()->getRect().getWidth() - mEditor.getHPad();  +			height = llceil(mStyle->getFont()->getLineHeight()); +		}  		return true;  	}  	/*virtual*/ S32		getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const  @@ -104,7 +112,8 @@ private:  LLExpandableTextBox::LLTextBoxEx::Params::Params()  :	more_label("more_label") -{} +{ +}  LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)  :	LLTextBox(p), @@ -117,16 +126,13 @@ LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)  void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL called_from_parent)  { +	hideExpandText();  	LLTextBox::reshape(width, height, called_from_parent);  	if (getTextPixelHeight() > getRect().getHeight())  	{  		showExpandText();  	} -	else -	{ -		hideExpandText(); -	}  }  void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,const LLStyle::Params& input_params) @@ -317,7 +323,8 @@ void LLExpandableTextBox::expandTextBox()  	mTextBox->hideExpandText();  	S32 text_delta = mTextBox->getVerticalTextDelta(); -	text_delta += mTextBox->getVPad() * 2 + mScroll->getBorderWidth() * 2; +	text_delta += mTextBox->getVPad() * 2; +	text_delta += mScroll->getBorderWidth() * 2;  	// no need to expand  	if(text_delta <= 0)  	{ diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index 42d061ff72..cb35a287e9 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -416,18 +416,6 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep)  	LLTextBox* textbox = getChild<LLTextBox>("object_description");  	textbox->setValue(desc); - -	// Truncate description text to fit in widget -	// *HACK: OMG, use lower-left corner to truncate text -	// Don't round the position, we want the left of the character -	S32 corner_index = textbox->getDocIndexFromLocalCoord( 0, 0, FALSE); -	LLWString desc_wide = textbox->getWText(); -	// index == length if position is past last character -	if (corner_index < (S32)desc_wide.length()) -	{ -		desc_wide = desc_wide.substr(0, corner_index); -		textbox->setWText(desc_wide); -	}  }  void LLInspectObject::updateMediaCurrentURL() diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 765b504afe..5f30ab4e01 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -101,6 +101,16 @@ const U32 ARROW_TO_AXIS[4] =  	VZ  }; +// Sort manipulator handles by their screen-space projection +struct ClosestToCamera +{ +	bool operator()(const LLManipTranslate::ManipulatorHandle& a, +					const LLManipTranslate::ManipulatorHandle& b) const +	{ +		return a.mEndPosition.mV[VZ] < b.mEndPosition.mV[VZ]; +	} +}; +  LLManipTranslate::LLManipTranslate( LLToolComposite* composite )  :	LLManip( std::string("Move"), composite ),  	mLastHoverMouseX(-1), @@ -273,7 +283,6 @@ void LLManipTranslate::restoreGL()  LLManipTranslate::~LLManipTranslate()  { -	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer());  } @@ -888,8 +897,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  		planar_manip_xy_visible = TRUE;  	} -	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer()); -	mProjectedManipulators.clear(); +	// Project up to 9 manipulators to screen space 2*X, 2*Y, 2*Z, 3*planes +	std::vector<ManipulatorHandle> projected_manipulators; +	projected_manipulators.reserve(9);  	for (S32 i = 0; i < num_arrow_manips; i+= 2)  	{ @@ -899,12 +909,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;  		projected_end = projected_end * (1.f / projected_end.mV[VW]); -		ManipulatorHandle* projManipulator =  -			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),  +		ManipulatorHandle projected_manip( +				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),   				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				10.f); // 10 pixel hotspot for arrows -		mProjectedManipulators.insert(projManipulator); +		projected_manipulators.push_back(projected_manip);  	}  	if (planar_manip_yz_visible) @@ -916,12 +926,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;  		projected_end = projected_end * (1.f / projected_end.mV[VW]); -		ManipulatorHandle* projManipulator =  -			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),  +		ManipulatorHandle projected_manip( +				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),   				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				20.f); // 20 pixels for planar manipulators -		mProjectedManipulators.insert(projManipulator); +		projected_manipulators.push_back(projected_manip);  	}  	if (planar_manip_xz_visible) @@ -933,12 +943,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;  		projected_end = projected_end * (1.f / projected_end.mV[VW]); -		ManipulatorHandle* projManipulator =  -			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),  +		ManipulatorHandle projected_manip( +				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),   				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				20.f); // 20 pixels for planar manipulators -		mProjectedManipulators.insert(projManipulator); +		projected_manipulators.push_back(projected_manip);  	}  	if (planar_manip_xy_visible) @@ -950,12 +960,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  		LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;  		projected_end = projected_end * (1.f / projected_end.mV[VW]); -		ManipulatorHandle* projManipulator =  -			new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),  +		ManipulatorHandle projected_manip( +				LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),   				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				20.f); // 20 pixels for planar manipulators -		mProjectedManipulators.insert(projManipulator); +		projected_manipulators.push_back(projected_manip);  	}  	LLVector2 manip_start_2d; @@ -967,13 +977,18 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  	LLVector2 mousePos((F32)x - half_width, (F32)y - half_height);  	LLVector2 mouse_delta; -	for (minpulator_list_t::iterator iter = mProjectedManipulators.begin(); -		 iter != mProjectedManipulators.end(); ++iter) +	// Keep order consistent with insertion via stable_sort +	std::stable_sort( projected_manipulators.begin(), +		projected_manipulators.end(), +		ClosestToCamera() ); + +	std::vector<ManipulatorHandle>::iterator it = projected_manipulators.begin(); +	for ( ; it != projected_manipulators.end(); ++it)  	{ -		ManipulatorHandle* manipulator = *iter; +		ManipulatorHandle& manipulator = *it;  		{ -			manip_start_2d.setVec(manipulator->mStartPosition.mV[VX] * half_width, manipulator->mStartPosition.mV[VY] * half_height); -			manip_end_2d.setVec(manipulator->mEndPosition.mV[VX] * half_width, manipulator->mEndPosition.mV[VY] * half_height); +			manip_start_2d.setVec(manipulator.mStartPosition.mV[VX] * half_width, manipulator.mStartPosition.mV[VY] * half_height); +			manip_end_2d.setVec(manipulator.mEndPosition.mV[VX] * half_width, manipulator.mEndPosition.mV[VY] * half_height);  			manip_dir = manip_end_2d - manip_start_2d;  			mouse_delta = mousePos - manip_start_2d; @@ -985,9 +1000,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  			if (mouse_pos_manip > 0.f &&  				mouse_pos_manip < manip_length && -				mouse_dist_manip_squared < manipulator->mHotSpotRadius * manipulator->mHotSpotRadius) +				mouse_dist_manip_squared < manipulator.mHotSpotRadius * manipulator.mHotSpotRadius)  			{ -				mHighlightedPart = manipulator->mManipID; +				mHighlightedPart = manipulator.mManipID;  				break;  			}  		} diff --git a/indra/newview/llmaniptranslate.h b/indra/newview/llmaniptranslate.h index 25ff35cc72..d20b86b2f4 100644 --- a/indra/newview/llmaniptranslate.h +++ b/indra/newview/llmaniptranslate.h @@ -89,17 +89,6 @@ protected:  	F32			getMinGridScale();  private: -	struct compare_manipulators -	{ -		bool operator() (const ManipulatorHandle* const a, const ManipulatorHandle* const b) const -		{ -			if (a->mEndPosition.mV[VZ] != b->mEndPosition.mV[VZ]) -				return (a->mEndPosition.mV[VZ] < b->mEndPosition.mV[VZ]); -			else -				return a->mManipID < b->mManipID;			 -		} -	}; -	  	S32			mLastHoverMouseX;  	S32			mLastHoverMouseY;  	BOOL		mSendUpdateOnMouseUp; @@ -116,8 +105,6 @@ private:  	LLVector3d	mDragCursorStartGlobal;  	LLVector3d	mDragSelectionStartGlobal;  	LLTimer		mUpdateTimer; -	typedef std::set<ManipulatorHandle*, compare_manipulators> minpulator_list_t; -	minpulator_list_t mProjectedManipulators;  	LLVector4	mManipulatorVertices[18];  	F32			mSnapOffsetMeters;  	LLVector3	mSnapOffsetAxis; diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index cef21e85d6..c0da8f3daa 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -530,11 +530,23 @@ BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  	return handled;  } -void LLPanelMainInventory::changed(U32 mask) +// virtual +void LLPanelMainInventory::changed(U32)  { +	// empty, but must have this defined for abstract base class.  } +// virtual +void LLPanelMainInventory::draw() +{ +	if (mActivePanel && mFilterEditor) +	{ +		mFilterEditor->setText(mActivePanel->getFilterSubString()); +	}	 +	LLPanel::draw(); +} +  void LLPanelMainInventory::setFilterTextFromFilter()   {   	mFilterText = mActivePanel->getFilter()->getFilterText();  diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 92443df369..920de2665c 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -72,7 +72,8 @@ public:  									   void* cargo_data,  									   EAcceptance* accept,  									   std::string& tooltip_msg); -	/*virtual*/ void changed(U32 mask); +	/*virtual*/ void changed(U32); +	/*virtual*/ void draw();  	LLInventoryPanel* getPanel() { return mActivePanel; }  	LLInventoryPanel* getActivePanel() { return mActivePanel; } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 44930f03c5..6e99d5a5f0 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -3494,7 +3494,7 @@ void LLSelectMgr::deselectAllIfTooFar()  	// HACK: Don't deselect when we're navigating to rate an object's  	// owner or creator.  JC -	if (gPieObject->getVisible() || gPieRate->getVisible() ) +	if (gMenuObject->getVisible())  	{  		return;  	} @@ -5493,11 +5493,15 @@ void dialog_refresh_all()  	gFloaterTools->dirty(); -	gPieObject->needsArrange(); +	gMenuObject->needsArrange(); -	if( gPieAttachment->getVisible() ) +	if( gMenuAttachmentSelf->getVisible() )  	{ -		gPieAttachment->arrange(); +		gMenuAttachmentSelf->arrange(); +	} +	if( gMenuAttachmentOther->getVisible() ) +	{ +		gMenuAttachmentOther->arrange();  	}  	LLFloaterProperties::dirtyAll(); diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp index afb9e261b0..755e647777 100644 --- a/indra/newview/lltoastpanel.cpp +++ b/indra/newview/lltoastpanel.cpp @@ -80,7 +80,7 @@ void LLToastPanel::snapToMessageHeight(LLTextBase* message, S32 maxLineCount)  		//Knowing the height is set to max allowed, getTextPixelHeight returns needed text height  		//Perhaps we need to pass maxLineCount as parameter to getTextPixelHeight to avoid previous reshape. -		S32 requiredTextHeight = message->getContentsRect().getHeight(); +		S32 requiredTextHeight = message->getTextBoundingRect().getHeight();  		S32 newTextHeight = llmin(requiredTextHeight, maxTextHeight);  		//Calculate last delta height deducting previous heightDelta  diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index f88de20242..74fbce890d 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1443,28 +1443,29 @@ BOOL LLToolPie::pickRightMouseDownCallback()  	{  		LLParcelSelectionHandle selection = LLViewerParcelMgr::getInstance()->selectParcelAt( mPick.mPosGlobal );  		gMenuHolder->setParcelSelection(selection); -		gPieLand->show(x, y); +		gMenuLand->show(x, y);  		showVisualContextMenuEffect();  	}  	else if (mPick.mObjectID == gAgent.getID() )  	{ -		if(!gPieSelf)  +		if(!gMenuAvatarSelf)   		{  			//either at very early startup stage or at late quitting stage,  			//this event is ignored.  			return TRUE ;  		} -		gPieSelf->show(x, y); +		gMenuAvatarSelf->show(x, y);  	}  	else if (object)  	{  		gMenuHolder->setObjectSelection(LLSelectMgr::getInstance()->getSelection()); +		bool is_other_attachment = (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner());  		if (object->isAvatar()  -			|| (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner())) +			|| is_other_attachment)  		{  			// Find the attachment's avatar  			while( object && object->isAttachment()) @@ -1475,20 +1476,30 @@ BOOL LLToolPie::pickRightMouseDownCallback()  			// Object is an avatar, so check for mute by id.  			LLVOAvatar* avatar = (LLVOAvatar*)object;  			std::string name = avatar->getFullname(); +			std::string mute_msg;  			if (LLMuteList::getInstance()->isMuted(avatar->getID(), avatar->getFullname()))  			{ -				gMenuHolder->childSetText("Avatar Mute", std::string("Unmute")); // *TODO:Translate +				mute_msg = LLTrans::getString("UnmuteAvatar");  			}  			else  			{ -				gMenuHolder->childSetText("Avatar Mute", std::string("Mute")); // *TODO:Translate +				mute_msg = LLTrans::getString("MuteAvatar");  			} -			gPieAvatar->show(x, y); +			if (is_other_attachment) +			{ +				gMenuAttachmentOther->getChild<LLUICtrl>("Avatar Mute")->setValue(mute_msg); +				gMenuAttachmentOther->show(x, y); +			} +			else +			{ +				gMenuAvatarOther->getChild<LLUICtrl>("Avatar Mute")->setValue(mute_msg); +				gMenuAvatarOther->show(x, y); +			}  		}  		else if (object->isAttachment())  		{ -			gPieAttachment->show(x, y); +			gMenuAttachmentSelf->show(x, y);  		}  		else  		{ @@ -1499,16 +1510,18 @@ BOOL LLToolPie::pickRightMouseDownCallback()  			{  				name = node->mName;  			} +			std::string mute_msg;  			if (LLMuteList::getInstance()->isMuted(object->getID(), name))  			{ -				gMenuHolder->childSetText("Object Mute", std::string("Unmute")); // *TODO:Translate +				mute_msg = LLTrans::getString("UnmuteObject");  			}  			else  			{ -				gMenuHolder->childSetText("Object Mute", std::string("Mute")); // *TODO:Translate +				mute_msg = LLTrans::getString("MuteObject");  			} -			gPieObject->show(x, y); +			gMenuHolder->childSetText("Object Mute", mute_msg); +			gMenuObject->show(x, y);  			showVisualContextMenuEffect();  		} diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 36d9e7935f..0be0b56bc3 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -134,11 +134,12 @@ LLMenuGL		*gPopupMenuView = NULL;  LLMenuBarGL		*gLoginMenuBarView = NULL;  // Pie menus -LLContextMenu	*gPieSelf	= NULL; -LLContextMenu	*gPieAvatar = NULL; -LLContextMenu	*gPieObject = NULL; -LLContextMenu	*gPieAttachment = NULL; -LLContextMenu	*gPieLand	= NULL; +LLContextMenu	*gMenuAvatarSelf	= NULL; +LLContextMenu	*gMenuAvatarOther = NULL; +LLContextMenu	*gMenuObject = NULL; +LLContextMenu	*gMenuAttachmentSelf = NULL; +LLContextMenu	*gMenuAttachmentOther = NULL; +LLContextMenu	*gMenuLand	= NULL;  const std::string SAVE_INTO_INVENTORY("Save Object Back to My Inventory");  const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents"); @@ -146,7 +147,6 @@ const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents"  LLMenuGL* gAttachSubMenu = NULL;  LLMenuGL* gDetachSubMenu = NULL;  LLMenuGL* gTakeOffClothes = NULL; -LLContextMenu* gPieRate = NULL;  LLContextMenu* gAttachScreenPieMenu = NULL;  LLContextMenu* gAttachPieMenu = NULL;  LLContextMenu* gAttachBodyPartPieMenus[8]; @@ -376,25 +376,31 @@ void init_menus()  	gMenuHolder->addChild( gPopupMenuView );  	/// -	/// Pie menus +	/// Context menus  	/// -	gPieSelf = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_self.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	const widget_registry_t& registry = +		LLViewerMenuHolderGL::child_registry_t::instance(); +	gMenuAvatarSelf = LLUICtrlFactory::createFromFile<LLContextMenu>( +		"menu_avatar_self.xml", gMenuHolder, registry); +	gMenuAvatarOther = LLUICtrlFactory::createFromFile<LLContextMenu>( +		"menu_avatar_other.xml", gMenuHolder, registry); -	// TomY TODO: what shall we do about these?  	gDetachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach HUD", true);  	gDetachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach", true); -	gPieAvatar = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_avatar.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - -	gPieObject = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_object.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	gMenuObject = LLUICtrlFactory::createFromFile<LLContextMenu>( +		"menu_object.xml", gMenuHolder, registry);  	gAttachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach HUD");  	gAttachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach"); -	gPieRate = gMenuHolder->getChild<LLContextMenu>("Rate Menu"); -	gPieAttachment = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_attachment.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	gMenuAttachmentSelf = LLUICtrlFactory::createFromFile<LLContextMenu>( +		"menu_attachment_self.xml", gMenuHolder, registry); +	gMenuAttachmentOther = LLUICtrlFactory::createFromFile<LLContextMenu>( +		"menu_attachment_other.xml", gMenuHolder, registry); -	gPieLand = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_land.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	gMenuLand = LLUICtrlFactory::createFromFile<LLContextMenu>( +		"menu_land.xml", gMenuHolder, registry);  	///  	/// set up the colors @@ -403,12 +409,13 @@ void init_menus()  	LLColor4 context_menu_color = LLUIColorTable::instance().getColor("MenuPopupBgColor"); -	gPieSelf->setBackgroundColor( context_menu_color ); -	gPieAvatar->setBackgroundColor( context_menu_color ); -	gPieObject->setBackgroundColor( context_menu_color ); -	gPieAttachment->setBackgroundColor( context_menu_color ); +	gMenuAvatarSelf->setBackgroundColor( context_menu_color ); +	gMenuAvatarOther->setBackgroundColor( context_menu_color ); +	gMenuObject->setBackgroundColor( context_menu_color ); +	gMenuAttachmentSelf->setBackgroundColor( context_menu_color ); +	gMenuAttachmentOther->setBackgroundColor( context_menu_color ); -	gPieLand->setBackgroundColor( context_menu_color ); +	gMenuLand->setBackgroundColor( context_menu_color );  	color = LLUIColorTable::instance().getColor( "MenuPopupBgColor" );  	gPopupMenuView->setBackgroundColor( color ); @@ -2263,20 +2270,23 @@ void cleanup_menus()  	delete gMenuParcelObserver;  	gMenuParcelObserver = NULL; -	delete gPieSelf; -	gPieSelf = NULL; +	delete gMenuAvatarSelf; +	gMenuAvatarSelf = NULL; + +	delete gMenuAvatarOther; +	gMenuAvatarOther = NULL; -	delete gPieAvatar; -	gPieAvatar = NULL; +	delete gMenuObject; +	gMenuObject = NULL; -	delete gPieObject; -	gPieObject = NULL; +	delete gMenuAttachmentSelf; +	gMenuAttachmentSelf = NULL; -	delete gPieAttachment; -	gPieAttachment = NULL; +	delete gMenuAttachmentOther; +	gMenuAttachmentSelf = NULL; -	delete gPieLand; -	gPieLand = NULL; +	delete gMenuLand; +	gMenuLand = NULL;  	delete gMenuBarView;  	gMenuBarView = NULL; @@ -4911,7 +4921,7 @@ class LLEditDelete : public view_listener_t  		// When deleting an object we may not actually be done  		// Keep selection so we know what to delete when confirmation is needed about the delete -		gPieObject->hide(); +		gMenuObject->hide();  		return true;  	}  }; @@ -4944,7 +4954,7 @@ void handle_object_delete()  		// When deleting an object we may not actually be done  		// Keep selection so we know what to delete when confirmation is needed about the delete -		gPieObject->hide(); +		gMenuObject->hide();  		return;  } @@ -6006,7 +6016,7 @@ public:  protected:  	virtual void done()  	{ -		gPieAttachment->buildDrawLabels(); +		gMenuAttachmentSelf->buildDrawLabels();  		gInventory.removeObserver(this);  		delete this;  	} diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 01a6b34170..71be4cb592 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -160,21 +160,13 @@ extern LLMenuGL*		gPopupMenuView;  extern LLViewerMenuHolderGL*	gMenuHolder;  extern LLMenuBarGL*		gLoginMenuBarView; -// Pie menus -extern LLContextMenu		*gPieSelf; -extern LLContextMenu		*gPieAvatar; -extern LLContextMenu		*gPieObject; -extern LLContextMenu		*gPieAttachment; - -extern LLContextMenu		*gPieLand; -extern LLContextMenu		*gPieRate; - -// Pie menus -extern LLContextMenu	*gPieSelfSimple; -extern LLContextMenu	*gPieAvatarSimple; -extern LLContextMenu	*gPieObjectSimple; -extern LLContextMenu	*gPieAttachmentSimple; -extern LLContextMenu	*gPieLandSimple; +// Context menus in 3D scene +extern LLContextMenu		*gMenuAvatarSelf; +extern LLContextMenu		*gMenuAvatarOther; +extern LLContextMenu		*gMenuObject; +extern LLContextMenu		*gMenuAttachmentSelf; +extern LLContextMenu		*gMenuAttachmentOther; +extern LLContextMenu		*gMenuLand;  // Needed to build menus when attachment site list available  extern LLMenuGL* gAttachSubMenu; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 8529a93527..966aeba25c 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -259,19 +259,21 @@ public:  	virtual void recordMessage(LLError::ELevel level,  								const std::string& message)  	{ -		// only log warnings to chat console -		if (level == LLError::LEVEL_WARN) -		{ -			LLFloaterChat* chat_floater = LLFloaterReg::findTypedInstance<LLFloaterChat>("chat"); -			if (chat_floater && gSavedSettings.getBOOL("WarningsAsChat")) -			{ -				LLChat chat; -				chat.mText = message; -				chat.mSourceType = CHAT_SOURCE_SYSTEM; +		//FIXME: this is NOT thread safe, and will do bad things when a warning is issued from a non-UI thread -				chat_floater->addChat(chat, FALSE, FALSE); -			} -		} +		// only log warnings to chat console +		//if (level == LLError::LEVEL_WARN) +		//{ +			//LLFloaterChat* chat_floater = LLFloaterReg::findTypedInstance<LLFloaterChat>("chat"); +			//if (chat_floater && gSavedSettings.getBOOL("WarningsAsChat")) +			//{ +			//	LLChat chat; +			//	chat.mText = message; +			//	chat.mSourceType = CHAT_SOURCE_SYSTEM; + +			//	chat_floater->addChat(chat, FALSE, FALSE); +			//} +		//}  	}  }; @@ -3140,7 +3142,6 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback  		return;  	} -	// push back pick info object  	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");  	if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)  	{ @@ -3149,27 +3150,8 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback  		pick_transparent = TRUE;  	} -	// center initial pick frame buffer region under mouse cursor -	// since that area is guaranteed to be onscreen and hence a valid -	// part of the framebuffer -	if (mPicks.empty()) -	{ -		mPickScreenRegion.setCenterAndSize(x, y_from_bot, PICK_DIAMETER, PICK_DIAMETER); - -		if (mPickScreenRegion.mLeft < mWorldViewRectScaled.mLeft) mPickScreenRegion.translate(mWorldViewRectScaled.mLeft - mPickScreenRegion.mLeft, 0); -		if (mPickScreenRegion.mBottom < mWorldViewRectScaled.mBottom) mPickScreenRegion.translate(0, mWorldViewRectScaled.mBottom - mPickScreenRegion.mBottom); -		if (mPickScreenRegion.mRight > mWorldViewRectScaled.mRight ) mPickScreenRegion.translate(mWorldViewRectScaled.mRight - mPickScreenRegion.mRight, 0); -		if (mPickScreenRegion.mTop > mWorldViewRectScaled.mTop ) mPickScreenRegion.translate(0, mWorldViewRectScaled.mTop - mPickScreenRegion.mTop); -	} - -	// set frame buffer region for picking results -	// stack multiple picks left to right -	LLRect screen_region = mPickScreenRegion; -	screen_region.translate(mPicks.size() * PICK_DIAMETER, 0); - -	LLPickInfo pick(LLCoordGL(x, y_from_bot), screen_region, mask, pick_transparent, TRUE, callback); - -	schedulePick(pick); +	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, TRUE, callback); +	schedulePick(pick_info);  }  void LLViewerWindow::schedulePick(LLPickInfo& pick_info) @@ -3184,10 +3166,11 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)  		return;  	} -	llassert_always(pick_info.mScreenRegion.notEmpty());  	mPicks.push_back(pick_info);  	// delay further event processing until we receive results of pick +	// only do this for async picks so that handleMouseUp won't be called +	// until the pick triggered in handleMouseDown has been processed, for example  	mWindow->delayInputProcessing();  } @@ -3235,20 +3218,18 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_trans  		return LLPickInfo();  	} -	pickAsync(x, y_from_bot, gKeyboard->currentMask(TRUE), NULL, pick_transparent); -	// assume that pickAsync put the results in the back of the mPicks list -	if(mPicks.size() != 0) -	{ -		mLastPick = mPicks.back(); -		mLastPick.fetchResults(); -		mPicks.pop_back(); -	} -	else +	BOOL in_build_mode = LLFloaterReg::instanceVisible("build"); +	if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)  	{ -		lldebugs << "List of last picks is empty: Using stub pick" << llendl; -		mLastPick = LLPickInfo(); +		// build mode allows interaction with all transparent objects +		// "Show Debug Alpha" means no object actually transparent +		pick_transparent = TRUE;  	} +	// shortcut queueing in mPicks and just update mLastPick in place +	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), gKeyboard->currentMask(TRUE), pick_transparent, TRUE, NULL); +	mLastPick.fetchResults(); +  	return mLastPick;  } @@ -4895,13 +4876,11 @@ LLPickInfo::LLPickInfo()  }  LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,  -					   const LLRect& screen_region,  						MASK keyboard_mask,   						BOOL pick_transparent,  						BOOL pick_uv_coords,  						void (*pick_callback)(const LLPickInfo& pick_info))  	: mMousePt(mouse_pos), -	  mScreenRegion(screen_region),  	  mKeyMask(keyboard_mask),  	  mPickCallback(pick_callback),  	  mPickType(PICK_INVALID), diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 1d564a1338..766c66ed0f 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -88,7 +88,6 @@ public:  public:  	LLPickInfo();  	LLPickInfo(const LLCoordGL& mouse_pos,  -		const LLRect& screen_region,  		MASK keyboard_mask,   		BOOL pick_transparent,   		BOOL pick_surface_info, @@ -120,7 +119,6 @@ public:  	LLVector3		mNormal;  	LLVector3		mBinormal;  	BOOL			mPickTransparent; -	LLRect			mScreenRegion;  	void		    getSurfaceInfo();  private: @@ -345,7 +343,6 @@ public:  	void			performPick();  	void			returnEmptyPicks(); -  	void			pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& pick_info), BOOL pick_transparent = FALSE);  	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent);  	LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth, @@ -397,7 +394,7 @@ public:  private:  	bool                    shouldShowToolTipFor(LLMouseHandler *mh);  	static bool onAlert(const LLSD& notify); -	 +  	void			switchToolByMask(MASK mask);  	void			destroyWindow();  	void			drawMouselookInstructions(); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index cdbeed111e..b6995d2122 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -67,7 +67,7 @@  	 value="0 0 1 1" />  	<color  	 name="Yellow" -	 value="1 1 0 1" /> +	 value="0.114 0.65 0.1" />  	<color  	 name="Unused?"  	 value="1 0.5 0 1" /> @@ -513,7 +513,7 @@       reference="White" />      <color       name="ObjectChatColor" -     reference="0.7 0.8 0.9 1" /> +     reference="EmphasisColor" />      <color       name="OverdrivenColor"       value="1 0 0 1" /> diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.pngBinary files differ index aa3898ca99..0ac5b72b8f 100644 --- a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png +++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.pngBinary files differ index 598342ea80..5c0c85b864 100644 --- a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png +++ b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.pngBinary files differ index 60676b43fd..dd9133bcc4 100644 --- a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png +++ b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.pngBinary files differ index 98cde96aff..0080e71f41 100644 --- a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png +++ b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 24d3512bcb..0317d55768 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -143,6 +143,7 @@ with the same filename but different name    <texture name="DropDown_Over" file_name="widgets/DropDown_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> +  <texture name="DropDown_On" file_name="widgets/DropDown_On.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" /> @@ -592,9 +593,9 @@ with the same filename but different name    <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />    <texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" /> -   -  <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" /> -  <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" /> + +  <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png"  preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> +  <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />    <texture name="VoicePTT_Lvl1" file_name="bottomtray/VoicePTT_Lvl1.png" preload="false" />    <texture name="VoicePTT_Lvl2" file_name="bottomtray/VoicePTT_Lvl2.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml index 8122386fae..681731b0da 100644 --- a/indra/newview/skins/default/xui/en/floater_media_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml @@ -1,7 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   legacy_header_height="18" - bottom="666"    can_close="true"    can_drag_on_left="false"    can_minimize="true" diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml index 602a18ea56..abc30c335c 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml @@ -3,15 +3,15 @@   legacy_header_height="18"   auto_tile="true"   can_resize="true" - follows="left|bottom" - height="331" + follows="left|top" + height="313"   layout="topleft"   min_height="120" - min_width="300" + min_width="320"   name="preview_texture"   help_topic="preview_texture" - width="300"> -    <floater.string + width="320"> +   <floater.string       name="Title">          Texture: [NAME]      </floater.string> @@ -43,72 +43,38 @@       max_length="127"       name="desc"       width="190" /> -    <button -     follows="left|bottom" -     height="22" -     label="OK" -     layout="topleft" -     left="80" -     name="Keep" -     top="302" -     width="100" /> -    <button -     follows="left|bottom" -     height="22" -     label="Cancel" -     layout="topleft" -     left_pad="5" -     name="Discard" -     top_delta="0" -     width="100" /> -    <button -     follows="left|bottom" -     height="22" -     label="Save As" -     layout="topleft" -     left_pad="5" -     name="save_tex_btn" -     top_delta="0" -     width="100" />      <text       type="string" +     halign="right"       length="1" -     follows="left|bottom" +     follows="right|bottom"       height="16"       layout="topleft" -     left="13" +     left="110"       name="dimensions" -     top="309" -     width="303"> +     top="255" +     width="200">          [WIDTH]px x [HEIGHT]px      </text>      <text       type="string" +     halign="right"       length="1" -     bg_visible="false" -     border_drop_shadow_visible="false" -     border_visible="false" -     top="309" -     drop_shadow_visible="true" -     enabled="true"       follows="right|bottom" -     font="SansSerifSmall" -     h_pad="0" -     halign="right" -     height="14" -     left="54" -     mouse_opaque="true" -     name="aspect_ratio" -     v_pad="0" -     width="110"> -    	Preview Aspect Ratio +     height="16" +     layout="topleft" +     left_delta="-110" +     name="dimensions" +     top_pad="5" +     width="200"> +        Preview aspect ratio      </text>      <combo_box       allow_text_entry="true"  -     top="306"  +     top_delta="-3"        follows="right|bottom"  -     height="20" -     left="176" +     height="23" +     left_pad="10"       max_chars="20"       mouse_opaque="true"       enabled="true" @@ -140,4 +106,31 @@  		2:1  	</combo_item>  	</combo_box> +    <button +     follows="right|bottom" +     height="22" +     label="OK" +     layout="topleft" +     left="6" +     name="keep" +     top_pad="5" +     width="100" /> +    <button +     follows="right|bottom" +     height="22" +     label="Cancel" +     layout="topleft" +     left_pad="5" +     name="discard" +     top_delta="0" +     width="100" /> +    <button +     follows="right|bottom" +     height="22" +     label="Save As" +     layout="topleft" +     left_pad="5" +     name="save_tex_btn" +     top_delta="0" +     width="100" />  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_select_key.xml b/indra/newview/skins/default/xui/en/floater_select_key.xml index 6050aede79..93aa1f0e31 100644 --- a/indra/newview/skins/default/xui/en/floater_select_key.xml +++ b/indra/newview/skins/default/xui/en/floater_select_key.xml @@ -21,7 +21,7 @@       word_wrap="true"       width="220">          Press a key to set your -Speak button toggle +Speak button trigger.      </text>      <button       height="23" diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 113da9ea4d..695021f755 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -101,7 +101,7 @@      <filter_editor       follows="left|top|right"       height="23" -     label="Filter textures" +     label="Filter Textures"       layout="topleft"       left="175"       name="inventory search editor" diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index 16f6e49092..cedf83f8b1 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -9,7 +9,7 @@   bg_opaque_image="Inspector_Background"   can_close="false"   can_minimize="false" - height="148" + height="150"   layout="topleft"   name="inspect_object"   single_instance="true" @@ -71,13 +71,15 @@ owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about     width="196">  L$300,000    </text> -   <text +  <text +   clip_partial="true"      follows="all"     font="SansSerifSmall" -   height="36" +   height="37"     left="8"     name="object_description"     top_pad="0" +   use_ellipses="true"      width="220"     word_wrap="true">  This is a really long description for an object being as how it is at least 80 characters in length and maybe more like 120 at this point. Who knows, really? @@ -90,7 +92,7 @@ This is a really long description for an object being as how it is at least 80 c     height="13"     left_delta="0"     name="object_media_url" -   top_pad="0" +   top_pad="-1"     width="291"     max_length = "50"     use_ellipses="true"> @@ -102,7 +104,7 @@ This is a really long description for an object being as how it is at least 80 c     label="Buy"     left="8"     name="buy_btn" -   top="119" +   top="121"     width="80" />    <button     follows="top|left" diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml new file mode 100644 index 0000000000..5b94645b60 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- *NOTE: See also menu_avatar_other.xml --> +<context_menu + layout="topleft" + name="Avatar Pie"> +    <menu_item_call +     label="View Profile" +     name="Profile..."> +        <menu_item_call.on_click +         function="ShowAgentProfile" +         parameter="hit object" /> +    </menu_item_call> +   <menu_item_call +     enabled="false" +     label="Add Friend" +     name="Add Friend"> +        <menu_item_call.on_click +         function="Avatar.AddFriend" /> +        <menu_item_call.on_enable +         function="Avatar.EnableAddFriend" /> +    </menu_item_call> +    <menu_item_call +     label="IM" +     name="Send IM..."> +        <menu_item_call.on_click +         function="Avatar.SendIM" /> +    </menu_item_call> +    <menu_item_call +     label="Call" +     name="Call"> +        <menu_item_call.on_click +         function="Avatar.Call" /> +    </menu_item_call> +      <menu_item_call +         label="Invite to Group" +         name="Invite..."> +      <menu_item_call.on_click +         function="Avatar.InviteToGroup" /> +      </menu_item_call> +   <menu_item_separator /> +    <menu_item_call +     enabled="false" +     label="Block" +     name="Avatar Mute"> +        <menu_item_call.on_click +         function="Avatar.Mute" /> +        <menu_item_call.on_enable +         function="Avatar.EnableMute" /> +    </menu_item_call> +    <menu_item_call +     label="Report" +     name="abuse"> +        <menu_item_call.on_click +         function="Avatar.ReportAbuse" /> +    </menu_item_call> +        <menu_item_call +         label="Freeze" +         name="Freeze..."> +            <menu_item_call.on_click +             function="Avatar.Freeze" /> +            <menu_item_call.on_visible +             function="Avatar.EnableFreezeEject"/> +        </menu_item_call> +        <menu_item_call +         label="Eject" +         name="Eject..."> +            <menu_item_call.on_click +             function="Avatar.Eject" /> +            <menu_item_call.on_visible +             function="Avatar.EnableFreezeEject"/> +        </menu_item_call> +        <menu_item_call +         label="Debug" +         name="Debug..."> +            <menu_item_call.on_click +             function="Avatar.Debug" /> +            <menu_item_call.on_visible +             function="IsGodCustomerService"/> +        </menu_item_call> +	    <menu_item_call +         label="Zoom In" +          name="Zoom In"> +        <menu_item_call.on_click +           function="Tools.LookAtSelection" +           parameter="zoom" /> +    </menu_item_call> +   <menu_item_call +     enabled="false" +     label="Pay" +     name="Pay..."> +        <menu_item_call.on_click +         function="PayObject" /> +        <menu_item_call.on_enable +         function="EnablePayAvatar" /> +    </menu_item_call> +   <menu_item_separator /> +   <menu_item_call +       label="Object Profile" +       name="Object Inspect"> +         <menu_item_call.on_click +          function="Object.Inspect" /> +         <menu_item_call.on_enable +          function="Object.EnableInspect" /> +   </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml new file mode 100644 index 0000000000..c85dbbb1bc --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Attachment Pie"> +    <menu_item_call +     enabled="false" +     label="Touch" +     layout="topleft" +     name="Attachment Object Touch"> +        <menu_item_call.on_click +         function="Object.Touch" /> +        <menu_item_call.on_enable +         function="Object.EnableTouch" +         name="EnableTouch" +         parameter="Touch" /> +    </menu_item_call> +    <!--menu_item_call +     label="Stand Up" +     layout="topleft" +     name="Stand Up"> +        <menu_item_call.on_click +         function="Self.StandUp" +         parameter="" /> +        <menu_item_call.on_enable +         function="Self.EnableStandUp" /> +    </menu_item_call--> +        <menu_item_call +     enabled="false" +     label="Edit" +     layout="topleft" +     name="Edit..."> +        <menu_item_call.on_click +         function="Object.Edit" /> +        <menu_item_call.on_enable +         function="EnableEdit" /> +    </menu_item_call> +    <menu_item_call +     enabled="false" +     label="Detach" +     layout="topleft" +     name="Detach"> +        <menu_item_call.on_click +         function="Attachment.Detach" /> +        <menu_item_call.on_enable +         function="Attachment.EnableDetach" /> +    </menu_item_call> +      <menu_item_call +     enabled="false" +     label="Drop" +     layout="topleft" +     name="Drop"> +        <menu_item_call.on_click +         function="Attachment.Drop" /> +        <menu_item_call.on_enable +         function="Attachment.EnableDrop" /> +    </menu_item_call> +    <!--menu_item_call +     label="My Profile" +     layout="topleft" +     name="Profile..."> +        <menu_item_call.on_click +         function="ShowAgentProfile" +         parameter="agent" /> +    </menu_item_call> +    <menu_item_call +     label="My Appearance" +     layout="topleft" +     name="Appearance..."> +        <menu_item_call.on_click +         function="ShowFloater" +         parameter="appearance" /> +        <menu_item_call.on_enable +         function="Edit.EnableCustomizeAvatar" /> + +    </menu_item_call--> +    <menu_item_separator +      layout="topleft" /> +     +       <menu_item_call +     label="Stand Up" +     layout="topleft" +     name="Stand Up"> +        <menu_item_call.on_click +         function="Self.StandUp" +         parameter="" /> +        <menu_item_call.on_enable +         function="Self.EnableStandUp" /> +    </menu_item_call> +     <menu_item_call +     label="My Appearance" +     layout="topleft" +     name="Appearance..."> +        <menu_item_call.on_click +         function="ShowFloater" +         parameter="appearance" /> +        <menu_item_call.on_enable +         function="Edit.EnableCustomizeAvatar" /> +    </menu_item_call> +   <menu_item_call +     label="My Friends" +     layout="topleft" +     name="Friends..."> +        <menu_item_call.on_click +         function="SideTray.PanelPeopleTab" +         parameter="friends_panel" /> +    </menu_item_call> +    <menu_item_call +     label="My Groups" +     layout="topleft" +     name="Groups..."> +        <menu_item_call.on_click +         function="SideTray.PanelPeopleTab" +         parameter="groups_panel" /> +    </menu_item_call> +   <menu_item_call +     label="My Profile" +     layout="topleft" +     name="Profile..."> +        <menu_item_call.on_click +         function="ShowAgentProfile" +         parameter="agent" /> +    </menu_item_call> +     +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml new file mode 100644 index 0000000000..0ad41546d2 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- *NOTE: See also menu_attachment_other.xml --> +<context_menu + layout="topleft" + name="Avatar Pie"> +    <menu_item_call +     label="View Profile" +     name="Profile..."> +        <menu_item_call.on_click +         function="ShowAgentProfile" +         parameter="hit object" /> +    </menu_item_call> +   <menu_item_call +     enabled="false" +     label="Add Friend" +     name="Add Friend"> +        <menu_item_call.on_click +         function="Avatar.AddFriend" /> +        <menu_item_call.on_enable +         function="Avatar.EnableAddFriend" /> +    </menu_item_call> +    <menu_item_call +     label="IM" +     name="Send IM..."> +        <menu_item_call.on_click +         function="Avatar.SendIM" /> +    </menu_item_call> +    <menu_item_call +     label="Call" +     name="Call"> +        <menu_item_call.on_click +         function="Avatar.Call" /> +    </menu_item_call> +      <menu_item_call +         label="Invite to Group" +         name="Invite..."> +      <menu_item_call.on_click +         function="Avatar.InviteToGroup" /> +      </menu_item_call> +   <menu_item_separator /> +    <menu_item_call +     enabled="false" +     label="Block" +     name="Avatar Mute"> +        <menu_item_call.on_click +         function="Avatar.Mute" /> +        <menu_item_call.on_enable +         function="Avatar.EnableMute" /> +    </menu_item_call> +    <menu_item_call +     label="Report" +     name="abuse"> +        <menu_item_call.on_click +         function="Avatar.ReportAbuse" /> +    </menu_item_call> +        <menu_item_call +         label="Freeze" +         name="Freeze..."> +            <menu_item_call.on_click +             function="Avatar.Freeze" /> +            <menu_item_call.on_visible +             function="Avatar.EnableFreezeEject"/> +        </menu_item_call> +        <menu_item_call +         label="Eject" +         name="Eject..."> +            <menu_item_call.on_click +             function="Avatar.Eject" /> +            <menu_item_call.on_visible +             function="Avatar.EnableFreezeEject"/> +        </menu_item_call> +        <menu_item_call +         label="Debug" +         name="Debug..."> +            <menu_item_call.on_click +             function="Avatar.Debug" /> +            <menu_item_call.on_visible +             function="IsGodCustomerService"/> +        </menu_item_call> +	    <menu_item_call +         label="Zoom In" +          name="Zoom In"> +        <menu_item_call.on_click +           function="Tools.LookAtSelection" +           parameter="zoom" /> +    </menu_item_call> +   <menu_item_call +     enabled="false" +     label="Pay" +     name="Pay..."> +        <menu_item_call.on_click +         function="PayObject" /> +        <menu_item_call.on_enable +         function="EnablePayAvatar" /> +    </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml new file mode 100644 index 0000000000..c6ce612a76 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -0,0 +1,227 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Self Pie"> +       <menu_item_call +     label="Stand Up" +     layout="topleft" +     name="Stand Up"> +        <menu_item_call.on_click +         function="Self.StandUp" +         parameter="" /> +        <menu_item_call.on_enable +         function="Self.EnableStandUp" /> +    </menu_item_call> +    <context_menu +     label="Take Off >" +     layout="topleft" +     name="Take Off >"> +        <context_menu +         label="Clothes >" +         layout="topleft" +         name="Clothes >"> +            <menu_item_call +             enabled="false" +             label="Shirt" +             layout="topleft" +             name="Shirt"> +                <menu_item_call.on_click +                 function="Edit.TakeOff" +                 parameter="shirt" /> +                <menu_item_call.on_enable +                 function="Edit.EnableTakeOff" +                 parameter="shirt" /> +            </menu_item_call> +            <menu_item_call +             enabled="false" +             label="Pants" +             layout="topleft" +             name="Pants"> +                <menu_item_call.on_click +                 function="Edit.TakeOff" +                 parameter="pants" /> +                <menu_item_call.on_enable +                 function="Edit.EnableTakeOff" +                 parameter="pants" /> +            </menu_item_call> +            <menu_item_call +             enabled="false" +             label="Skirt" +             layout="topleft" +             name="Skirt"> +                <menu_item_call.on_click +                 function="Edit.TakeOff" +                 parameter="skirt" /> +                <menu_item_call.on_enable +                 function="Edit.EnableTakeOff" +                 parameter="skirt" /> +            </menu_item_call> +            <menu_item_call +             enabled="false" +             label="Shoes" +             layout="topleft" +             name="Shoes"> +                <menu_item_call.on_click +                 function="Edit.TakeOff" +                 parameter="shoes" /> +                <menu_item_call.on_enable +                 function="Edit.EnableTakeOff" +                 parameter="shoes" /> +            </menu_item_call> +            <menu_item_call +             enabled="false" +             label="Socks" +             layout="topleft" +             name="Socks"> +                <menu_item_call.on_click +                 function="Edit.TakeOff" +                 parameter="socks" /> +                <menu_item_call.on_enable +                 function="Edit.EnableTakeOff" +                 parameter="socks" /> +            </menu_item_call> +            <menu_item_call +             enabled="false" +             label="Jacket" +             layout="topleft" +             name="Jacket"> +                <menu_item_call.on_click +                 function="Edit.TakeOff" +                 parameter="jacket" /> +                <menu_item_call.on_enable +                 function="Edit.EnableTakeOff" +                 parameter="jacket" /> +            </menu_item_call> +            <menu_item_call +             enabled="false" +             label="Gloves" +             layout="topleft" +             name="Gloves"> +                <menu_item_call.on_click +                 function="Edit.TakeOff" +                 parameter="gloves" /> +                <menu_item_call.on_enable +                 function="Edit.EnableTakeOff" +                 parameter="gloves" /> +            </menu_item_call> +           <menu_item_call +                 enabled="false" +                 label="Undershirt" +                 layout="topleft" +                 name="Self Undershirt"> +                    <menu_item_call.on_click +                     function="Edit.TakeOff" +                     parameter="undershirt" /> +                    <menu_item_call.on_enable +                     function="Edit.EnableTakeOff" +                     parameter="undershirt" /> +                </menu_item_call> +               <menu_item_call +                 enabled="false" +                 label="Underpants" +                 layout="topleft" +                 name="Self Underpants"> +                    <menu_item_call.on_click +                     function="Edit.TakeOff" +                     parameter="underpants" /> +                    <menu_item_call.on_enable +                     function="Edit.EnableTakeOff" +                     parameter="underpants" /> +                </menu_item_call> +               <menu_item_call +                 enabled="false" +                 label="Tattoo" +                 layout="topleft" +                 name="Self Tattoo"> +                    <menu_item_call.on_click +                     function="Edit.TakeOff" +                     parameter="tattoo" /> +                    <menu_item_call.on_enable +                     function="Edit.EnableTakeOff" +                     parameter="tattoo" /> +                </menu_item_call> +               <menu_item_call +                 enabled="false" +                 label="Alpha" +                 layout="topleft" +                 name="Self Alpha"> +                    <menu_item_call.on_click +                     function="Edit.TakeOff" +                     parameter="alpha" /> +                    <menu_item_call.on_enable +                     function="Edit.EnableTakeOff" +                     parameter="alpha" /> +                </menu_item_call>				 +                <menu_item_separator +                 layout="topleft" /> +                <menu_item_call +                 label="All Clothes" +                 layout="topleft" +                 name="All Clothes"> +                    <menu_item_call.on_click +                     function="Edit.TakeOff" +                     parameter="all" /> +                </menu_item_call> +        </context_menu> +        <context_menu +         label="HUD >" +         layout="topleft" +         name="Object Detach HUD" /> +        <context_menu +         label="Detach >" +         layout="topleft" +         name="Object Detach" /> +        <menu_item_call +         label="Detach All" +         layout="topleft" +         name="Detach All"> +            <menu_item_call.on_click +             function="Self.RemoveAllAttachments" +             parameter="" /> +            <menu_item_call.on_enable +             function="Self.EnableRemoveAllAttachments" /> +        </menu_item_call> +    </context_menu> +     <menu_item_call +     label="My Appearance" +     layout="topleft" +     name="Appearance..."> +        <menu_item_call.on_click +         function="ShowFloater" +         parameter="appearance" /> +        <menu_item_call.on_enable +         function="Edit.EnableCustomizeAvatar" /> +    </menu_item_call> +   <menu_item_call +     label="My Friends" +     layout="topleft" +     name="Friends..."> +        <menu_item_call.on_click +         function="SideTray.PanelPeopleTab" +         parameter="friends_panel" /> +    </menu_item_call> +   <!--menu_item_call +     label="My Gestures" +     layout="topleft" +     name="Gestures..."> +        <menu_item_call.on_click +         function="ShowFloater" +         parameter="gestures" /> +    </menu_item_call--> +    <menu_item_call +     label="My Groups" +     layout="topleft" +     name="Groups..."> +        <menu_item_call.on_click +         function="SideTray.PanelPeopleTab" +         parameter="groups_panel" /> +    </menu_item_call> +   <menu_item_call +     label="My Profile" +     layout="topleft" +     name="Profile..."> +        <menu_item_call.on_click +         function="ShowAgentProfile" +         parameter="agent" /> +    </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_land.xml b/indra/newview/skins/default/xui/en/menu_land.xml new file mode 100644 index 0000000000..d88a2f8d25 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_land.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Land Pie"> +    <menu_item_call +     label="About Land" +     name="Place Information..."> +        <menu_item_call.on_click +         function="ShowFloater" +         parameter="about_land" /> +    </menu_item_call> + <!--   <menu_item_call +     label="Go Here" +     name="Go Here"> +        <menu_item_call.on_click +         function="GoToObject" /> +    </menu_item_call>--> +    <menu_item_call +     label="Sit Here" +     name="Sit Here"> +        <menu_item_call.on_click +         function="Land.Sit" /> +    </menu_item_call> +    <menu_item_separator +     layout="topleft" /> +        <menu_item_call +     enabled="false" +     label="Buy This Land" +     name="Land Buy"> +        <menu_item_call.on_click +         function="ShowFloater" +         parameter="buy land" /> +        <menu_item_call.on_enable +         function="World.EnableBuyLand" /> +    </menu_item_call> +   <menu_item_call +     enabled="false" +     label="Buy Pass" +     name="Land Buy Pass"> +        <menu_item_call.on_click +         function="Land.BuyPass" /> +        <menu_item_call.on_enable +         function="Land.EnableBuyPass" /> +    </menu_item_call> +            <menu_item_separator +     layout="topleft" /> +   <menu_item_call +     enabled="false" +     label="Build" +     name="Create"> +        <menu_item_call.on_click +         function="Land.Build" /> +        <menu_item_call.on_enable +         function="EnableEdit" /> +    </menu_item_call> +    <menu_item_call +     enabled="false" +     label="Edit Terrain" +     name="Edit Terrain"> +        <menu_item_call.on_click +         function="Land.Edit" /> +        <menu_item_call.on_enable +         function="EnableEdit" /> +    </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml new file mode 100644 index 0000000000..62500c5116 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Object Pie"> +   <menu_item_call +     enabled="false" +     label="Touch" +     name="Object Touch"> +        <menu_item_call.on_click +         function="Object.Touch" /> +        <menu_item_call.on_enable +         function="Object.EnableTouch" +         name="EnableTouch" +         parameter="Touch" /> +   </menu_item_call> +   <menu_item_call +     label="Edit" +     name="Edit..."> +        <menu_item_call.on_click +         function="Object.Edit" /> +        <menu_item_call.on_visible +         function="EnableEdit"/> +    </menu_item_call> +    <menu_item_call +      label="Build" +      name="Build"> +      <menu_item_call.on_click +       function="Object.Edit" /> +      <menu_item_call.on_visible +       function="VisibleBuild"/> +    </menu_item_call> +   <menu_item_call +     enabled="false" +     label="Open" +     name="Open"> +        <menu_item_call.on_click +         function="Object.Open" /> +        <menu_item_call.on_enable +         function="Object.EnableOpen" /> +   </menu_item_call> +   <menu_item_call +     enabled="false" +     label="Sit Here" +     name="Object Sit"> +        <menu_item_call.on_click +         function="Object.SitOrStand" /> +        <menu_item_call.on_enable +         function="Object.EnableSitOrStand" +         name="EnableSitOrStand" +         parameter="Sit Here,Stand Up" /> +    </menu_item_call> +   <menu_item_call +       label="Object Profile" +       name="Object Inspect"> +         <menu_item_call.on_click +          function="Object.Inspect" /> +         <menu_item_call.on_enable +          function="Object.EnableInspect" /> +   </menu_item_call> +<menu_item_separator layout="topleft" /> +   <context_menu +         label="Put On >" +         name="Put On" > +   <menu_item_call +      enabled="false" +      label="Wear" +      name="Wear"> +            <menu_item_call.on_click +             function="Object.AttachToAvatar" /> +            <menu_item_call.on_enable +             function="Object.EnableWear" /> +   </menu_item_call> +   <context_menu +         label="Attach >" +         name="Object Attach" /> +   <context_menu +         label="Attach HUD >" +         name="Object Attach HUD" /> +   </context_menu> +   <context_menu +         label="Remove >" +         name="Remove"> +   <menu_item_call +     enabled="false" +     label="Take" +     name="Pie Object Take"> +        <menu_item_call.on_click +         function="Tools.BuyOrTake" /> +        <menu_item_call.on_enable +         function="Tools.EnableBuyOrTake" +         parameter="Buy,Take" /> +    </menu_item_call> +   <menu_item_call +         enabled="false" +         label="Report Abuse" +         name="Report Abuse..."> +            <menu_item_call.on_click +             function="Object.ReportAbuse" /> +            <menu_item_call.on_enable +             function="Object.EnableReportAbuse" /> +   </menu_item_call> +   <menu_item_call +          enabled="false" +          label="Block" +          name="Object Mute"> +             <menu_item_call.on_click +              function="Object.Mute" /> +             <menu_item_call.on_enable +              function="Object.EnableMute" /> +   </menu_item_call> +   <menu_item_call +      enabled="false" +      label="Return" +      name="Return..."> +         <menu_item_call.on_click +          function="Object.Return" /> +         <menu_item_call.on_enable +          function="Object.EnableReturn" /> +     </menu_item_call> +     <menu_item_call +   enabled="false" +   label="Delete" +   name="Delete"> +      <menu_item_call.on_click +       function="Object.Delete" /> +      <menu_item_call.on_enable +       function="Object.EnableDelete" /> +    </menu_item_call> +    </context_menu> +   <menu_item_separator layout="topleft" /> +   <menu_item_call +   enabled="false" +   label="Take Copy" +   name="Take Copy"> +      <menu_item_call.on_click +       function="Tools.TakeCopy" /> +      <menu_item_call.on_enable +       function="Tools.EnableTakeCopy" /> +  </menu_item_call> +   <menu_item_call +   enabled="false" +   label="Pay" +   name="Pay..."> +  <menu_item_call.on_click +   function="PayObject" /> +  <menu_item_call.on_enable +   function="EnablePayObject" /> +</menu_item_call> +  <menu_item_call +   enabled="false" +   label="Buy" +   name="Buy..."> +      <menu_item_call.on_click +       function="Object.Buy" /> +      <menu_item_call.on_enable +       function="Object.EnableBuy" /> +   </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index a41d492624..034f685ee9 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -114,7 +114,7 @@            width="82"            tool_tip="Shows/hides gestures">               <gesture_combo_box.drop_down_button -              pad_right="10"  +              pad_right="10"                use_ellipses="true" />           </gesture_combo_box>          </layout_panel> @@ -126,7 +126,7 @@           image_name="spacer24.tga"           layout="topleft"           left="0" -         min_width="4"  +         min_width="4"           name="DUMMY"           top="0"           width="4"/> @@ -168,7 +168,7 @@           image_name="spacer24.tga"           layout="topleft"           left="0" -         min_width="4"  +         min_width="4"           name="DUMMY"           top="0"           width="4"/> @@ -211,7 +211,7 @@           image_name="spacer24.tga"           layout="topleft"           left="0" -         min_width="4"  +         min_width="4"           name="DUMMY"           top="0"           width="4"/> @@ -243,7 +243,7 @@          <layout_panel           mouse_opaque="false"           follows="left|right" -         height="28" +         height="29"           layout="topleft"           top="0"           name="chiclet_list_panel" @@ -251,24 +251,24 @@           min_width="180"           user_resize="false"           auto_resize="true"> -<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same  +<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same  as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991-->              <chiclet_panel  	    mouse_opaque="false"               follows="left|right"               height="23"               layout="topleft" -             left="0" +             left="1"               min_width="180"               name="chiclet_list" -             top="4" +             top="6"               chiclet_padding="4"               scrolling_offset="40"               width="189">                  <button                   auto_resize="true"                   follows="right" -                 height="23" +                 height="29"                   image_selected="SegmentedBtn_Left_Off"                   image_unselected="SegmentedBtn_Left_Off"  		 image_hover_selected="SegmentedBtn_Left_Over" @@ -278,14 +278,16 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.  		 image_overlay="Arrow_Small_Left"                   layout="topleft"                   name="chicklet_left_scroll_button" +        scale_image="true"                   tab_stop="false" -                 top="0" +                 top="-2" +                 right_pad="2"                   visible="false" -                 width="20" /> +                 width="7" />                  <button                   auto_resize="true"                   follows="right" -                 height="23" +                 height="29"                   image_selected="SegmentedBtn_Right_Off"                   image_unselected="SegmentedBtn_Right_Off"  		 image_hover_selected="SegmentedBtn_Right_Over" @@ -295,10 +297,11 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.  		 image_overlay="Arrow_Small_Right"                   layout="topleft"                   name="chicklet_right_scroll_button" +        scale_image="true"                   tab_stop="false" -                 top="0" +                 top="-2"                   visible="false" -                 width="20" /> +                 width="7" />              </chiclet_panel>          </layout_panel>          <icon @@ -309,7 +312,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.           image_name="spacer24.tga"           layout="topleft"           left="0" -         min_width="4"  +         min_width="4"           top="0"           width="5"/>          <layout_panel @@ -320,18 +323,18 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.           min_height="28"           top="0"           name="im_well_panel" -         width="34" -         min_width="34" +         width="35" +         min_width="35"           user_resize="false">              <chiclet_im_well -             flash_period="0.3"  +             flash_period="0.3"               follows="right"               height="23"               layout="topleft"               left="0"               name="im_well"               top="4" -             width="34"> +             width="35">               <!--  Emulate 4 states of button by background images, see detains in EXT-3147. The same should be for notification_well button  xml attribute           Description @@ -342,21 +345,22 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well               -->                  <button                   auto_resize="true" -                 flash_color="EmphasisColor" +                 flash_color="Yellow"                   follows="right"                   halign="center"                   height="23" -                 image_overlay="Notices_Unread" -                 image_overlay_alignment="center"  -                 image_pressed="WellButton_Lit" -                 image_pressed_selected="WellButton_Lit_Selected" -                 image_selected="PushButton_Selected_Press" +                 image_overlay="Unread_IM" +                 image_overlay_alignment="center" +                 image_pressed="WellButton_Lit_Selected" +                 image_pressed_selected="WellButton_Lit" +                 image_selected="WellButton_Lit" +                 label_color="Black"                   left="0"                   max_displayed_count="99"                   name="Unread IM messages"                   pad_left="0"                   pad_right="0" -                 width="34" > +                 width="35" >                      <button.init_callback                       function="Button.SetDockableFloaterToggle"                       parameter="im_well_window" /> @@ -370,9 +374,10 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well           layout="topleft"           min_height="28"           top="0" +         left_pad="4"           name="notification_well_panel" -         width="34" -         min_width="34" +         width="35" +         min_width="35"           user_resize="false">              <chiclet_notification               flash_period="0.25" @@ -383,23 +388,24 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well               max_displayed_count="99"               name="notification_well"               top="4" -             width="34"> +             width="35">                <button -                 image_selected="PushButton_Selected_Press" -                 image_pressed="WellButton_Lit" -                 image_pressed_selected="WellButton_Lit_Selected" +                 bottom_pad="3" +                 image_selected="WellButton_Lit" +                 image_pressed="WellButton_Lit_Selected" +                 image_pressed_selected="WellButton_Lit "                auto_resize="true"                 halign="center"                 height="23"                 follows="right" -               flash_color="EmphasisColor" -               left="0" +               flash_color="Yellow" +                label_color="Black" +               left="5"                 name="Unread"                 image_overlay="Notices_Unread" -               image_overlay_alignment="center"  -               pad_right="0" -               pad_left="0" -               width="34" > +               image_overlay_alignment="center" +               pad_right="5" +               width="35" >                    <button.init_callback                     function="Button.SetDockableFloaterToggle"                     parameter="notification_well_window" /> @@ -413,7 +419,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well           height="10"           image_name="spacer24.tga"           layout="topleft" -         min_width="4"  +         min_width="4"           right="-1"           top="0"           width="4"/> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index c9db75b5d8..6187b8f1e2 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -33,21 +33,31 @@ name="login_html"  start_url=""  top="0"  height="600" -     width="996" /> -<panel +     width="980" /> +<layout_stack  follows="left|bottom|right"  name="login_widgets"  layout="topleft" +orientation="horizontal"  top="519"  width="996" -     height="80"> +height="80"> +<layout_panel +auto_resize="false" +follows="left|bottom" +name="login" +layout="topleft" +width="695" +min_width="695" +user_resize="false" +height="80">  <text  follows="left|bottom"  font="SansSerifSmall"  height="16" -left="20"  name="first_name_text"  top="20" +left="20"  width="150">  First name:  </text> @@ -145,7 +155,7 @@ name="Typeregionname"   value="" />  <combo_box  allow_text_entry="true"  font="SansSerifSmall" -   follows="left|bottom" +   follows="left|right|bottom"     height="23"  layout="topleft"  top_pad="2" @@ -164,14 +174,20 @@ width="135"    name="connect_btn"    top="35"    width="90" /> - <text +</layout_panel> +<layout_panel +follows="right|bottom" +name="links" +width="200" +min_width="200" +user_resize="false" +height="80"> +   <text  follows="right|bottom"  font="SansSerifSmall" -text_color="EmphasisColor"  halign="right"  height="16"  top="12" -left_pad="5"  right="-10"  name="create_new_account_text"    width="180"> @@ -183,7 +199,9 @@ font="SansSerifSmall"  text_color="EmphasisColor"  halign="right"  height="16" -name="forgot_password_text"    top_pad="12" +name="forgot_password_text" +top_pad="12" +right="-10"    width="180">         Forgot your name or password?  </text> @@ -195,6 +213,7 @@ halign="right"  height="16"  name="login_help"  top_pad="2" +right="-10"      width="180">         Need help logging in?   </text>  <!--  <text @@ -208,5 +227,6 @@ top_pad="2"      word_wrap="true">         [VERSION]     </text>--> -</panel> +   </layout_panel> +</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 9990215dfd..4353b306cd 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -17,7 +17,7 @@       text_pad_left="14"       follows="left|top|right"  	height="23" -     label="Filter" +     label="Filter Inventory"       layout="topleft"       left="15"  max_length="300" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 88df529ec1..c24f47750b 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -22,7 +22,7 @@ background_visible="true"       height="23"       layout="topleft"       left="15" -     label="Filter" +     label="Filter Places"       max_length="300"       name="Filter"       top="3" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 78b90eefcc..405ff02836 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -284,7 +284,7 @@ Avatars:       enabled_control="EnableVoiceChat"       control_name="PushToTalkToggle"       height="20" -     label="Toggle mode for microphone when I press the speak trigger key:" +     label="Toggle mode for microphone when I press the Speak trigger key:"       layout="topleft"       left="30"       name="push_to_talk_toggle_check" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index 5332007baf..d8e3f4ccfb 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -348,23 +348,24 @@     label="Input/Output devices"     layout="topleft"     left="30" -   top="270" +   top="262"     name="device_settings_btn"     width="190">    </button>      <panel -     background_visible="true" +     background_visible="false"       bg_alpha_color="DkGray"       visiblity_control="ShowDeviceSettings"       border="false"       follows="top|left" -     height="145" +     height="120"       label="Device Settings"       layout="topleft"       left="0"       name="device_settings_panel"       class="panel_voice_device_settings" -     width="501"> +     width="501" +     top="285">        <panel.string          name="default_text">          Default @@ -397,8 +398,33 @@       left="165"       max_chars="128"       name="voice_input_device" -     top_pad="0" +     top_pad="-2"       width="200" /> +   <text +     type="string" +     length="1" +     follows="left|top" +     height="16" +     layout="topleft" +     left="165" +     name="My volume label" +     top_pad="5" +     width="200"> +        My volume: +    </text> +      <slider_bar +        control_name="AudioLevelMic" +     follows="left|top" +     height="17" +     increment="0.05" +     initial_value="1.0" +     layout="topleft" +     left="160" +     max_val="2" +     name="mic_volume_slider" +     tool_tip="Change the volume using this slider" +     top_pad="-2" +     width="220" />      <text       type="string"       text_color="EmphasisColor" @@ -408,7 +434,7 @@       layout="topleft"       left_pad="5"       name="wait_text" -     top_delta="5" +     top_delta="0"       width="110">          Please wait      </text> @@ -417,7 +443,7 @@       layout="topleft"       left_delta="0"       name="bar0" -     top_delta="-5" +     top_delta="0"       width="20" />      <locate       height="20" @@ -453,7 +479,7 @@               left="80"               name="speaker_icon"               mouse_opaque="false" -             top_pad="4" +             top_pad="-8"               visible="true"               width="22" />      <text @@ -475,7 +501,7 @@       left="165"       max_chars="128"       name="voice_output_device" -     top_pad="0" +     top_pad="-2"       width="200" />      </panel>      </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 3cddbed2d4..e04af2bad6 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -6,7 +6,7 @@  	 name="item properties"  	 help_topic="item_properties"  	 save_rect="true" -	 title="Object Profile" +	 title="Inventory Item Properties"  	 width="333">  	<panel.string  		 name="unknown"> @@ -50,15 +50,15 @@       width="23" />      <text       follows="top|left|right" -     font="SansSerifHuge" +     font="SansSerifHugeBold"       height="26"       layout="topleft"       left_pad="10"       name="title" -     text_color="LtGray" +     text_color="white"       top="0"       use_ellipses="true" -     value="Object Profile" +     value="Item Properties"       width="275" />  	<panel           follows="all" @@ -71,7 +71,7 @@           width="313"     background_visible="true"     bg_alpha_color="DkGray2"> -	    <text +	    <text	 	 	   		     type="string"  		     length="1"  		     follows="left|top" @@ -79,7 +79,7 @@  		     layout="topleft"  		     left="5"  		     name="LabelItemNameTitle" -		     top="10" +		     top="5"  		     width="78">  	        Name:  	    </text> @@ -87,7 +87,7 @@  		     border_style="line"  		     border_thickness="1"  	    	 follows="left|top|right" -		     height="20" +		     height="16"  		     layout="topleft"  	    	 left_delta="78"  		     max_length="63" @@ -102,7 +102,7 @@  		     layout="topleft"      		 left="5"  		     name="LabelItemDescTitle" -    		 top_pad="10" +    		 top_delta="20"  	    	 width="78">  	        Description:  	    </text> @@ -115,7 +115,7 @@      		 left_delta="78"  		     max_length="127"      		 name="LabelItemDesc" -	    	 top_delta="-5" +	    	 top_delta="0"  	    	 width="225" />  	    <text  		     type="string" @@ -123,41 +123,32 @@  		     follows="left|top"  		     height="23"  		     layout="topleft" -    		 left="5" +		     left="10"  		     name="LabelCreatorTitle" -top_pad="10" +		     top="65"  		     width="78">  	        Creator:      	</text> -	        <avatar_icon -     follows="top|left" -     height="20" -     default_icon_name="Generic_Person" -     layout="topleft" -     left_pad="0" -		     top_delta="-6" -     mouse_opaque="true" -     width="20" />  	    <text  		     type="string" -     follows="left|right" -     font="SansSerifSmall" -     height="15" -     layout="topleft" -     left_pad="5" +		     length="1" +		     follows="left|top" +		     height="23" +		     layout="topleft" +		     left_delta="78"  		     name="LabelCreatorName" -		     top_delta="6" +		     top_delta="0"  		     width="140">  	        Nicole Linden  	     </text>  	     <button  			 follows="top|right"  			 height="23" -			 label="Profile" +			 label="Profile..."  			 layout="topleft" -			 right="-1" +			 left_delta="144"  			 name="BtnCreator" -			 top_delta="-6" +			 top_delta="0"  			 width="78" />  	     <text  			 type="string" @@ -165,41 +156,32 @@ top_pad="10"  			 follows="left|top"  			 height="23"  			 layout="topleft" -    		 left="5" +			 left="10"  			 name="LabelOwnerTitle" -top_pad="5" +			 top="85"  			 width="78">  			    Owner:  	     </text> -	     <avatar_icon -     follows="top|left" -     height="20" -     default_icon_name="Generic_Person" -     layout="topleft" -     left_pad="0" -		     top_delta="-6" -     mouse_opaque="true" -     width="20" />  	     <text  			 type="string" -     follows="left|right" -     font="SansSerifSmall" -     height="15" -     layout="topleft" -     left_pad="5" +			 length="1" +			 follows="left|top" +			 height="23" +			 layout="topleft" +			 left_delta="78"  			 name="LabelOwnerName" -			 top_delta="6" +			 top_delta="0"  			 width="140">  			    Thrax Linden  	     </text>  	     <button  			 follows="top|right"  			 height="23" -			 label="Profile" +			 label="Profile..."  			 layout="topleft" -			 right="-1" +			 left_delta="144"  			 name="BtnOwner" -			 top_delta="-3" +			 top_delta="0"  			 width="78" />  	     <text  			 type="string" @@ -207,9 +189,9 @@ top_pad="5"  			 follows="left|top"  			 height="23"  			 layout="topleft" -    		 left="5" +			 left="10"  			 name="LabelAcquiredTitle" -top_pad="10" +			 top="105"  			 width="78">  			Acquired:  	     </text> @@ -225,146 +207,134 @@ top_pad="10"  			 width="222">  			Wed May 24 12:50:46 2006  	    </text> -	 <panel -         border="false" -         follows="left|top" -         layout="topleft" -         mouse_opaque="false" -         background_visible="true" -         bg_alpha_color="DkGray" -         name="perms_inv" -         left="0" -         top_pad="25" -         height="155" -         width="313"> -	  <text -             type="string" -             length="1" -             left="10" -             top_pad="13" -             text_color="EmphasisColor" -	     height="15" -             follows="left|top|right" -             layout="topleft" -             name="perm_modify" -             width="200"> -                You can: -            </text> +	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="23" +			 layout="topleft" +			 left="10" +			 name="OwnerLabel" +			 top="125" +			 width="78"> +			You: +	    </text>  	    <check_box -			 height="18" -			 label="Modify" +			 height="23" +			 label="Edit"  			 layout="topleft" -			 left="20" +			 left_pad="5"  			 name="CheckOwnerModify" -			 top_pad="0" -			 width="90" /> +			 top_delta="0" +			 width="78" />  	    <check_box -			 height="18" +			 height="23"  			 label="Copy"  			 layout="topleft" -			 left_pad="0" +			 left_delta="0"  			 name="CheckOwnerCopy" -			 width="90" /> +			 top_pad="5" +			 width="88" />  	    <check_box -			 height="18" -			 label="Transfer" +			 height="23" +			 label="Resell"  			 layout="topleft" -			 left_pad="0" +			 left_delta="0"  			 name="CheckOwnerTransfer" +			 top_pad="5"  			 width="106" />  	    <text  			 type="string"  			 length="1"  			 follows="left|top" -			 height="16" +			 height="10"  			 layout="topleft"  			 left="10"  			 name="AnyoneLabel" -			 top_pad="8" -			 width="100"> +			 top_pad="5" +			 width="78">  			Anyone:  	    </text>  	    <check_box -			 height="18" +			 height="16"  			 label="Copy"  			 layout="topleft" -			 left_pad="0" +			 left_pad="5"  			 name="CheckEveryoneCopy" -			 top_delta="-2" -			 width="150" /> +			 top_delta="0" +			 width="130" />      	<text  			 type="string"  			 length="1"  			 follows="left|top" -			 height="16" +			 height="10"  			 layout="topleft"  			 left="10"  			 name="GroupLabel" -			 top_pad="8" -			 width="100"> +			 top_pad="5" +			 width="78">  			Group:      	</text>  	    <check_box -			 height="18" +			 height="16"  			 label="Share"  			 layout="topleft" -			 left_pad="0" -			 top_delta="-2" +			 left_pad="5"  			 name="CheckShareWithGroup" -			 tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." -			 width="150" /> +			 top_delta="5" +			 width="106" />  	    <text  			 type="string"  			 length="1"  			 follows="left|top" -			 height="16" +			 height="25"  			 layout="topleft"  			 left="10"  			 name="NextOwnerLabel" -			 top_pad="8" -			 width="200" +			 top_pad="5" +			 width="78"  			 word_wrap="true">  			Next owner:  	    </text>  	    <check_box -			 height="18" -			 label="Modify" +			 height="16" +			 label="Edit"  			 layout="topleft" -			 left="20" -			 top_pad="0" +			 left_pad="5"  			 name="CheckNextOwnerModify" -			 width="90" /> +			 top_delta="0" +			 width="78" />  	    <check_box -			 height="18" +			 height="16"  			 label="Copy"  			 layout="topleft" -			 left_pad="0" +			 left_delta="0"  			 name="CheckNextOwnerCopy" -			 width="90" /> +			 top_pad="5" +			 width="88" />  	    <check_box -			 height="18" -			 label="Transfer" +			 height="16" +			 label="Resell"  			 layout="topleft" -			 left_pad="0" +			 left_delta="0"  			 name="CheckNextOwnerTransfer" -			 tool_tip="Next owner can give away or resell this object" +			 top_pad="5"  			 width="106" /> -	    </panel>  	    <check_box -			 height="18" +			 height="16"  			 label="For Sale"  			 layout="topleft" -			 left="20" +			 left="10"  			 name="CheckPurchase" -			 top_pad="20" -			 width="100" /> +			 top_pad="5" +			 width="78" />  		<combo_box -			 height="23" -			 left_pad="0" +			 height="19" +			 left_pad="5"  			 layout="topleft"  			 follows="left|top"  			 name="combobox sale copy" -			 width="170"> +			 width="110">  			<combo_box.item  			     label="Copy"  			     name="Copy" @@ -380,14 +350,26 @@ top_pad="10"  			    increment="1"  			    control_name="Edit Cost"  			    name="Edit Cost" -			    label="Price: L$" -			    label_width="75" -			    left="120" -			    width="170" +			    label="Price:" +			    label_width="100" +			    left="10" +			    width="192"  			    min_val="1" -			    height="23" +			    height="19"  			    max_val="999999999" -			    top_pad="10"/> +			    top_pad="5"/> +	    <text +			    type="string" +			    length="1" +			    height="15" +			    follows="left|top" +			    layout="topleft" +			    left_delta="82" +			    name="CurrencySymbol" +			    top_delta="1" +			    width="18"> +			L$ +	    </text>  	    <!--line_editor  			 border_style="line"  			 border_thickness="1" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3044f10573..1f7784d9ab 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -460,7 +460,7 @@ Returns the rotation of detected object number (returns <0,0,0,1> if numbe  	</string>  	<string name="LSLTipText_llDetectedGroup" translate="false">  integer llDetectedGroup(integer number) -Returns an integer that is a boolean representing if the detected object or avatar is in the same group that the prim containing the script is set to +Returns TRUE if detected object is part of same group as owner  	</string>  	<string name="LSLTipText_llDetectedLinkNumber" translate="false">  integer llDetectedLinkNumber(integer number) @@ -2112,6 +2112,10 @@ this texture in your inventory  		Unknown file extension .%s  Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh  	</string> +  <string name="MuteObject">Block</string> +  <string name="MuteAvatar">Block</string> +  <string name="UnmuteObject">Unblock</string> +  <string name="UnmuteAvatar">Unblock</string>  	<string name="AddLandmarkNavBarMenu">Add to My Landmarks...</string>  	<string name="EditLandmarkNavBarMenu">Edit my Landmark...</string> diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml index 28ed560543..d7aa71a441 100644 --- a/indra/newview/skins/default/xui/en/widgets/button.xml +++ b/indra/newview/skins/default/xui/en/widgets/button.xml @@ -18,5 +18,6 @@  	font="SansSerifSmall"          hover_glow_amount="0.15"          halign="center" +        pad_bottom="2"           scale_image="true">  </button> diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml index 19fb520b44..85d0c633af 100644 --- a/indra/newview/skins/default/xui/en/widgets/floater.xml +++ b/indra/newview/skins/default/xui/en/widgets/floater.xml @@ -9,8 +9,6 @@   background_visible="true"   background_opaque="false"   header_height="25" -         top="0" -         left="0"    close_image="Icon_Close_Foreground"   restore_image="Icon_Restore_Foreground"   minimize_image="Icon_Minimize_Foreground" | 
