diff options
author | Merov Linden <merov@lindenlab.com> | 2013-04-24 17:26:09 -0700 |
---|---|---|
committer | Merov Linden <merov@lindenlab.com> | 2013-04-24 17:26:09 -0700 |
commit | 5cf1c9bfe1e4285929f41adda84f8a7208fe1805 (patch) | |
tree | 4ef7e42901d5c92f54e22c693655c013246dc485 | |
parent | a01233b684fd53398acd7624db6bb63d283936b2 (diff) |
CHUI-845 : Make changeLine() a bit more resistant to unforseen line count values (i.e. 0) and a bit more general
-rw-r--r-- | indra/llui/lltextbase.cpp | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index def1277ba7..5e1ed81097 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2606,21 +2606,18 @@ void LLTextBase::setCursorAtLocalPos( S32 local_x, S32 local_y, bool round, bool void LLTextBase::changeLine( S32 delta ) { S32 line = getLineNumFromDocIndex(mCursorPos); - - S32 new_line = line; - if( (delta < 0) && (line > 0 ) ) - { - new_line = line - 1; - } - else if( (delta > 0) && (line < (getLineCount() - 1)) ) - { - new_line = line + 1; - } - - LLRect visible_region = getVisibleDocumentRect(); - - S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mVisibleTextRect.mBottom - visible_region.mBottom, TRUE); - setCursorPos(new_cursor_pos, true); + S32 max_line_nb = getLineCount() - 1; + max_line_nb = (max_line_nb < 0 ? 0 : max_line_nb); + + S32 new_line = llclamp(line + delta, 0, max_line_nb); + + if (new_line != line) + { + LLRect visible_region = getVisibleDocumentRect(); + S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, + mLineInfoList[new_line].mRect.mBottom + mVisibleTextRect.mBottom - visible_region.mBottom, TRUE); + setCursorPos(new_cursor_pos, true); + } } bool LLTextBase::scrolledToStart() |