diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-07-09 15:33:24 +0300 |
---|---|---|
committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-07-09 15:33:24 +0300 |
commit | 85cbf2ee3b78d49a4ee8798e65c586566c7922ec (patch) | |
tree | fe7658c14d147f1e8fdccffbaeceb87a156a3e3e | |
parent | 4ac0ab2af3af8e1629b2023e566142f30dceeeb2 (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.cpp | 13 |
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; |