summaryrefslogtreecommitdiff
path: root/indra/newview/llchatitemscontainerctrl.cpp
diff options
context:
space:
mode:
authorAnkur Ahlawat <anchor@lindenlab.com>2018-03-07 10:00:07 -0800
committerAnkur Ahlawat <anchor@lindenlab.com>2018-03-07 10:00:07 -0800
commitac558e384214e22b4a8da2045854e2180b7428bf (patch)
tree7de576ff5552cbb9956c6cdf0e4d84b52514316e /indra/newview/llchatitemscontainerctrl.cpp
parent485193c7f530fa3d8574c74304e452ab6d012e41 (diff)
parentf8c76535a35aaf245e261357a59e977bac5b2501 (diff)
Merged lindenlab/viewer-release into default
Diffstat (limited to 'indra/newview/llchatitemscontainerctrl.cpp')
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp35
1 files changed, 18 insertions, 17 deletions
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index f5721fb348..eddc87efcd 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -242,27 +242,28 @@ void LLFloaterIMNearbyChatToastPanel::init(LLSD& notification)
S32 chars_in_line = mMsgText->getRect().getWidth() / messageFont->getWidth("c");
S32 max_lines = notification["available_height"].asInteger() / (mMsgText->getTextPixelHeight() + 4);
- S32 new_line_chars = std::count(messageText.begin(), messageText.end(), '\n');
- S32 lines_count = (messageText.size() - new_line_chars) / chars_in_line + new_line_chars + 1;
+ int lines = 0;
+ int chars = 0;
- //Remove excessive chars if message is not fit in available height. MAINT-6891
- if(lines_count > max_lines)
+ //Remove excessive chars if message does not fit in available height. MAINT-6891
+ std::string::iterator it;
+ for (it = messageText.begin(); it < messageText.end() && lines < max_lines; it++)
{
- while(lines_count > max_lines)
+ if (*it == '\n')
+ ++lines;
+ else
+ ++chars;
+
+ if (chars >= chars_in_line)
{
- std::size_t nl_pos = messageText.rfind('\n');
- if (nl_pos != std::string::npos)
- {
- nl_pos = nl_pos > messageText.length() - chars_in_line? nl_pos : messageText.length() - chars_in_line;
- messageText.erase(messageText.begin() + nl_pos, messageText.end());
- }
- else
- {
- messageText.erase(messageText.end() - chars_in_line, messageText.end());
- }
- new_line_chars = std::count(messageText.begin(), messageText.end(), '\n');
- lines_count = (messageText.size() - new_line_chars) / chars_in_line + new_line_chars;
+ chars = 0;
+ ++lines;
}
+ }
+
+ if (it < messageText.end())
+ {
+ messageText.erase(it, messageText.end());
messageText += " ...";
}