diff options
| -rw-r--r-- | indra/llrender/llfontgl.cpp | 24 | ||||
| -rw-r--r-- | indra/llrender/llfontgl.h | 2 | ||||
| -rw-r--r-- | indra/llui/lltextbase.cpp | 6 | ||||
| -rw-r--r-- | indra/llui/lltextbase.h | 2 | ||||
| -rw-r--r-- | indra/newview/llscripteditor.cpp | 2 | 
5 files changed, 21 insertions, 15 deletions
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 1bf061bc8d..6f4f2ec62c 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -494,7 +494,7 @@ F32 LLFontGL::getWidthF32(const std::string& utf8text, S32 begin_offset, S32 max  	return getWidthF32(wtext.c_str(), begin_offset, max_chars);  } -F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars) const +F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars, bool no_padding) const  {  	const S32 LAST_CHARACTER = LLFontFreetype::LAST_CHAR_FULL; @@ -517,12 +517,15 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars  		F32 advance = mFontFreetype->getXAdvance(fgi); -		// for the last character we want to measure the greater of its width and xadvance values -		// so keep track of the difference between these values for the each character we measure -		// so we can fix things up at the end -		width_padding = llmax(	0.f,											// always use positive padding amount -								width_padding - advance,						// previous padding left over after advance of current character -								(F32)(fgi->mWidth + fgi->mXBearing) - advance);	// difference between width of this character and advance to next character +		if (!no_padding) +		{ +			// for the last character we want to measure the greater of its width and xadvance values +			// so keep track of the difference between these values for the each character we measure +			// so we can fix things up at the end +			width_padding = llmax(0.f,											// always use positive padding amount +				width_padding - advance,						// previous padding left over after advance of current character +				(F32)(fgi->mWidth + fgi->mXBearing) - advance);	// difference between width of this character and advance to next character +		}  		cur_x += advance;  		llwchar next_char = wchars[i+1]; @@ -539,8 +542,11 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars  		cur_x = (F32)ll_round(cur_x);  	} -	// add in extra pixels for last character's width past its xadvance -	cur_x += width_padding; +	if (!no_padding) +	{ +		// add in extra pixels for last character's width past its xadvance +		cur_x += width_padding; +	}  	return cur_x / sScaleX;  } diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h index 3b58a37d33..93c6b78ce8 100644 --- a/indra/llrender/llfontgl.h +++ b/indra/llrender/llfontgl.h @@ -138,7 +138,7 @@ public:  	F32 getWidthF32(const std::string& utf8text) const;  	F32 getWidthF32(const llwchar* wchars) const;  	F32 getWidthF32(const std::string& text, S32 offset, S32 max_chars ) const; -	F32 getWidthF32(const llwchar* wchars, S32 offset, S32 max_chars) const; +	F32 getWidthF32(const llwchar* wchars, S32 offset, S32 max_chars, bool no_padding = false) const;  	// The following are called often, frequently with large buffers, so do not use a string interface diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 3d8cf74855..8732a7ce45 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -361,7 +361,7 @@ void LLTextBase::onValueChange(S32 start, S32 end)  {  } -std::vector<LLRect> LLTextBase::getSelctionRects() +std::vector<LLRect> LLTextBase::getSelectionRects()  {      // Nor supposed to be called without selection      llassert(hasSelection()); @@ -458,7 +458,7 @@ void LLTextBase::drawSelectionBackground()      // Draw selection even if we don't have keyboard focus for search/replace      if (hasSelection() && !mLineInfoList.empty())      { -        std::vector<LLRect> selection_rects = getSelctionRects(); +        std::vector<LLRect> selection_rects = getSelectionRects();  		// Draw the selection box (we're using a box instead of reversing the colors on the selected text).  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); @@ -3464,7 +3464,7 @@ bool LLNormalTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& w  		height = mFontHeight;  		const LLWString &text = getWText();  		// if last character is a newline, then return true, forcing line break -		width = mStyle->getFont()->getWidthF32(text.c_str(), mStart + first_char, num_chars); +		width = mStyle->getFont()->getWidthF32(text.c_str(), mStart + first_char, num_chars, true);  	}  	return false;  } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index e3cf56a5ee..3611ab0499 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -638,7 +638,7 @@ protected:  		return mLabel.getString() + getToolTip();  	} -    std::vector<LLRect> getSelctionRects(); +    std::vector<LLRect> getSelectionRects();  protected:  	// text segmentation and flow diff --git a/indra/newview/llscripteditor.cpp b/indra/newview/llscripteditor.cpp index 140cbbedbe..3278bd3aa9 100644 --- a/indra/newview/llscripteditor.cpp +++ b/indra/newview/llscripteditor.cpp @@ -187,7 +187,7 @@ void LLScriptEditor::drawSelectionBackground()  	// Draw selection even if we don't have keyboard focus for search/replace  	if( hasSelection() && !mLineInfoList.empty())  	{ -        std::vector<LLRect> selection_rects = getSelctionRects(); +        std::vector<LLRect> selection_rects = getSelectionRects();  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);  		const LLColor4& color = mReadOnly ? mReadOnlyFgColor : mFgColor;  | 
