summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2020-07-09 15:33:24 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2020-07-09 15:33:24 +0300
commit85cbf2ee3b78d49a4ee8798e65c586566c7922ec (patch)
treefe7658c14d147f1e8fdccffbaeceb87a156a3e3e
parent4ac0ab2af3af8e1629b2023e566142f30dceeeb2 (diff)
SL-12478 long names are not beautiful in Name Tags
According to revised behavior names should always fit into single line
-rw-r--r--indra/newview/llhudnametag.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index 0701b07856..4ed802138d 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -439,17 +439,19 @@ void LLHUDNameTag::addLine(const std::string &text_utf8,
U32 line_length = 0;
if (use_ellipses)
{
- // "QualityAssuranceAssuresQuality 1" will end up like "QualityAssuranceAssuresQual..."
- // "QualityAssurance AssuresQuality 1" will be split into two lines "QualityAssurance" and "AssuresQuality 1"
+ // "QualityAssuranceAssuresQuality1" will end up like "QualityAssuranceAssuresQual..."
+ // "QualityAssuranceAssuresQuality QualityAssuranceAssuresQuality" will end up like "QualityAssuranceAssuresQual..."
+ // "QualityAssurance AssuresQuality1" will end up as "QualityAssurance AssuresQua..." because we are enforcing single line
do
{
- S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::ONLY_WORD_BOUNDARIES);
- if (segment_length == 0)
+ S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::ANYWHERE);
+ if (segment_length + line_length < wline.length()) // since we only draw one string, line_length should be 0
{
- // First word in segment (not nessesary first line) does not fit, need to draw "...".
+ // token does does not fit into signle line, need to draw "...".
// Use four dots for ellipsis width to generate padding
const LLWString dots_pad(utf8str_to_wstring(std::string("....")));
S32 elipses_width = font->getWidthF32(dots_pad.c_str());
+ // truncated string length
segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels - elipses_width, wline.length(), LLFontGL::ANYWHERE);
const LLWString dots(utf8str_to_wstring(std::string("...")));
LLHUDTextSegment segment(iter->substr(line_length, segment_length) + dots, style, color, font);
@@ -458,6 +460,7 @@ void LLHUDNameTag::addLine(const std::string &text_utf8,
}
else
{
+ // token fits fully into string
LLHUDTextSegment segment(iter->substr(line_length, segment_length), style, color, font);
mTextSegments.push_back(segment);
line_length += segment_length;