riched20: Add an option to move the cursor to after the final end-of-paragraph.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Huw Davies 2016-10-04 13:07:32 +01:00 committed by Alexandre Julliard
parent 4c322698da
commit c005b98d91
1 changed files with 9 additions and 10 deletions

View File

@ -31,11 +31,11 @@ void ME_SetCursorToStart(ME_TextEditor *editor, ME_Cursor *cursor)
cursor->nOffset = 0; cursor->nOffset = 0;
} }
static void ME_SetCursorToEnd(ME_TextEditor *editor, ME_Cursor *cursor) static void ME_SetCursorToEnd(ME_TextEditor *editor, ME_Cursor *cursor, BOOL final_eop)
{ {
cursor->pPara = editor->pBuffer->pLast->member.para.prev_para; cursor->pPara = editor->pBuffer->pLast->member.para.prev_para;
cursor->pRun = ME_FindItemBack(editor->pBuffer->pLast, diRun); cursor->pRun = ME_FindItemBack(editor->pBuffer->pLast, diRun);
cursor->nOffset = 0; cursor->nOffset = final_eop ? cursor->pRun->member.run.len : 0;
} }
@ -83,7 +83,7 @@ int ME_GetSelection(ME_TextEditor *editor, ME_Cursor **from, ME_Cursor **to)
int ME_GetTextLength(ME_TextEditor *editor) int ME_GetTextLength(ME_TextEditor *editor)
{ {
ME_Cursor cursor; ME_Cursor cursor;
ME_SetCursorToEnd(editor, &cursor); ME_SetCursorToEnd(editor, &cursor, FALSE);
return ME_GetCursorOfs(&cursor); return ME_GetCursorOfs(&cursor);
} }
@ -138,8 +138,7 @@ int ME_SetSelection(ME_TextEditor *editor, int from, int to)
if (from == 0 && to == -1) if (from == 0 && to == -1)
{ {
ME_SetCursorToStart(editor, &editor->pCursors[1]); ME_SetCursorToStart(editor, &editor->pCursors[1]);
ME_SetCursorToEnd(editor, &editor->pCursors[0]); ME_SetCursorToEnd(editor, &editor->pCursors[0], TRUE);
editor->pCursors[0].nOffset = editor->pCursors[0].pRun->member.run.len;
ME_InvalidateSelection(editor); ME_InvalidateSelection(editor);
return len + 1; return len + 1;
} }
@ -193,7 +192,7 @@ int ME_SetSelection(ME_TextEditor *editor, int from, int to)
if (selectionEnd) if (selectionEnd)
{ {
ME_SetCursorToEnd(editor, &editor->pCursors[0]); ME_SetCursorToEnd(editor, &editor->pCursors[0], FALSE);
editor->pCursors[1] = editor->pCursors[0]; editor->pCursors[1] = editor->pCursors[0];
ME_InvalidateSelection(editor); ME_InvalidateSelection(editor);
return len; return len;
@ -686,7 +685,7 @@ int ME_MoveCursorChars(ME_TextEditor *editor, ME_Cursor *cursor, int nRelOfs)
if (new_offset >= ME_GetTextLength(editor)) if (new_offset >= ME_GetTextLength(editor))
{ {
/* new offset at the end of the text */ /* new offset at the end of the text */
ME_SetCursorToEnd(editor, cursor); ME_SetCursorToEnd(editor, cursor, FALSE);
nRelOfs -= new_offset - ME_GetTextLength(editor); nRelOfs -= new_offset - ME_GetTextLength(editor);
return nRelOfs; return nRelOfs;
} }
@ -859,7 +858,7 @@ ME_SelectByType(ME_TextEditor *editor, ME_SelectionType selectionType)
/* Select everything with cursor anchored from the start of the text */ /* Select everything with cursor anchored from the start of the text */
editor->nSelectionType = stDocument; editor->nSelectionType = stDocument;
ME_SetCursorToStart(editor, &editor->pCursors[1]); ME_SetCursorToStart(editor, &editor->pCursors[1]);
ME_SetCursorToEnd(editor, &editor->pCursors[0]); ME_SetCursorToEnd(editor, &editor->pCursors[0], FALSE);
break; break;
default: assert(0); default: assert(0);
} }
@ -1383,7 +1382,7 @@ static void ME_ArrowPageDown(ME_TextEditor *editor, ME_Cursor *pCursor)
if (editor->vert_si.nPos >= y - editor->sizeWindow.cy) if (editor->vert_si.nPos >= y - editor->sizeWindow.cy)
{ {
ME_SetCursorToEnd(editor, pCursor); ME_SetCursorToEnd(editor, pCursor, FALSE);
editor->bCaretAtEnd = FALSE; editor->bCaretAtEnd = FALSE;
} else { } else {
ME_DisplayItem *pRun = pCursor->pRun; ME_DisplayItem *pRun = pCursor->pRun;
@ -1480,7 +1479,7 @@ static void ME_ArrowEnd(ME_TextEditor *editor, ME_Cursor *pCursor)
static void ME_ArrowCtrlEnd(ME_TextEditor *editor, ME_Cursor *pCursor) static void ME_ArrowCtrlEnd(ME_TextEditor *editor, ME_Cursor *pCursor)
{ {
ME_SetCursorToEnd(editor, pCursor); ME_SetCursorToEnd(editor, pCursor, FALSE);
editor->bCaretAtEnd = FALSE; editor->bCaretAtEnd = FALSE;
} }