summaryrefslogtreecommitdiff
path: root/indra/llui/lltexteditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/lltexteditor.cpp')
-rwxr-xr-xindra/llui/lltexteditor.cpp56
1 files changed, 53 insertions, 3 deletions
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index edbdc34154..3a546d041a 100755
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -1135,8 +1135,14 @@ void LLTextEditor::addChar(llwchar wc)
setCursorPos(new_cursor_pos);
}
}
-}
+ if (mCursorPos > 0)
+ {
+ LLRect current_cursor_rect = getDocRectFromDocIndex(mCursorPos);
+ LLRect prev_cursor_rect = getDocRectFromDocIndex(mCursorPos - 1);
+ mDrawRightmostCursor = current_cursor_rect.mBottom < prev_cursor_rect.mBottom;
+ }
+}
void LLTextEditor::addLineBreakChar(BOOL group_together)
{
@@ -1282,6 +1288,12 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
break;
case KEY_HOME:
+ if(mDrawRightmostCursor && mCursorPos > 0)
+ {
+ mCursorPos--;
+ mDrawRightmostCursor = false;
+ }
+
startOfLine();
break;
@@ -1296,6 +1308,14 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
case KEY_END:
endOfLine();
+ if (!mDrawRightmostCursor)
+ {
+ mDrawRightmostCursor = true;
+ if (mCursorPos + 1 < getLength())
+ {
+ setCursorPos(mCursorPos + 1);
+ }
+ }
break;
case KEY_LEFT:
@@ -1307,7 +1327,18 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
{
if( 0 < mCursorPos )
{
- setCursorPos(mCursorPos - 1);
+ LLRect current_cursor_rect = getDocRectFromDocIndex(mCursorPos);
+ LLRect next_cursor_rect = getDocRectFromDocIndex(mCursorPos - 1);
+
+ if (current_cursor_rect.mBottom < next_cursor_rect.mBottom)
+ {
+ mDrawRightmostCursor = true;
+ }
+ else
+ {
+ mDrawRightmostCursor = false;
+ setCursorPos(mCursorPos - 1);
+ }
}
else
{
@@ -1325,7 +1356,26 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask)
{
if( mCursorPos < getLength() )
{
- setCursorPos(mCursorPos + 1);
+ LLRect current_cursor_rect = getDocRectFromDocIndex(mCursorPos);
+ LLRect next_cursor_rect = getDocRectFromDocIndex(mCursorPos + 1);
+
+ if (current_cursor_rect.mBottom > next_cursor_rect.mBottom)
+ {
+ if (mDrawRightmostCursor)
+ {
+ mDrawRightmostCursor = false;
+ }
+ else
+ {
+ mDrawRightmostCursor = true;
+ setCursorPos(mCursorPos + 1);
+ }
+ }
+ else
+ {
+ mDrawRightmostCursor = false;
+ setCursorPos(mCursorPos + 1);
+ }
}
else
{