Huw Davies : riched20: Use run and para ptrs in the cursor move lines function.
Alexandre Julliard
julliard at winehq.org
Fri Oct 23 14:27:18 CDT 2020
Module: wine
Branch: master
Commit: c8862864fec884272a46aa477c1e218b3a2b8c78
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c8862864fec884272a46aa477c1e218b3a2b8c78
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Oct 23 10:25:05 2020 +0100
riched20: Use run and para ptrs in the cursor move lines function.
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/riched20/caret.c | 63 +++++++++++++++++++++++++--------------------------
1 file changed, 31 insertions(+), 32 deletions(-)
diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index 9676636a64e..bb462b034b7 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -1241,13 +1241,17 @@ static void
ME_MoveCursorLines(ME_TextEditor *editor, ME_Cursor *pCursor, int nRelOfs, BOOL extend)
{
ME_DisplayItem *pRun = pCursor->pRun;
- ME_DisplayItem *pOldPara = pCursor->pPara;
- ME_DisplayItem *pItem, *pNewPara;
+ ME_Paragraph *old_para = &pCursor->pPara->member.para, *new_para;
+ ME_DisplayItem *pItem;
int x = ME_GetXForArrow(editor, pCursor);
if (editor->bCaretAtEnd && !pCursor->nOffset)
- if (!ME_PrevRun(&pOldPara, &pRun, TRUE))
- return;
+ {
+ ME_Run *prev = run_prev_all_paras( &pRun->member.run );
+ if (!prev) return;
+ pRun = run_get_di( prev );
+ old_para = prev->para;
+ }
if (nRelOfs == -1)
{
@@ -1262,25 +1266,23 @@ ME_MoveCursorLines(ME_TextEditor *editor, ME_Cursor *pCursor, int nRelOfs, BOOL
ME_SetCursorToStart(editor, pCursor);
return;
}
- pNewPara = ME_GetParagraph(pItem);
- if (pOldPara->member.para.nFlags & MEPF_ROWEND ||
- (pOldPara->member.para.pCell &&
- pOldPara->member.para.pCell != pNewPara->member.para.pCell))
+ new_para = &ME_GetParagraph(pItem)->member.para;
+ if (old_para->nFlags & MEPF_ROWEND ||
+ (para_cell( old_para ) && para_cell( old_para ) != para_cell( new_para )))
{
/* Brought out of a cell */
- pNewPara = table_row_start( &pOldPara->member.para )->prev_para;
- if (pNewPara->type == diTextStart)
- return; /* At the top, so don't go anywhere. */
- pItem = ME_FindItemFwd(pNewPara, diStartRow);
+ new_para = para_prev( table_row_start( old_para ));
+ if (!new_para) return; /* At the top, so don't go anywhere. */
+ pItem = ME_FindItemFwd( para_get_di( new_para ), diStartRow);
}
- if (pNewPara->member.para.nFlags & MEPF_ROWEND)
+ if (new_para->nFlags & MEPF_ROWEND)
{
/* Brought into a table row */
- ME_Cell *cell = &ME_FindItemBack(pNewPara, diCell)->member.cell;
- while (x < cell->pt.x && cell->prev_cell)
- cell = &cell->prev_cell->member.cell;
- if (cell->next_cell) /* else - we are still at the end of the row */
- pItem = ME_FindItemBack(cell->next_cell, diStartRow);
+ ME_Cell *cell = table_row_end_cell( new_para );
+ while (x < cell->pt.x && cell_prev( cell ))
+ cell = cell_prev( cell );
+ if (cell_next( cell )) /* else - we are still at the end of the row */
+ pItem = ME_FindItemBack( cell_get_di( cell_next( cell ) ), diStartRow );
}
}
else
@@ -1293,25 +1295,22 @@ ME_MoveCursorLines(ME_TextEditor *editor, ME_Cursor *pCursor, int nRelOfs, BOOL
ME_SetCursorToEnd(editor, pCursor, TRUE);
return;
}
- pNewPara = ME_GetParagraph(pItem);
- if (pOldPara->member.para.nFlags & MEPF_ROWSTART ||
- (pOldPara->member.para.pCell &&
- pOldPara->member.para.pCell != pNewPara->member.para.pCell))
+ new_para = &ME_GetParagraph(pItem)->member.para;
+ if (old_para->nFlags & MEPF_ROWSTART ||
+ (para_cell( old_para ) && para_cell( old_para ) != para_cell( new_para )))
{
/* Brought out of a cell */
- pNewPara = table_row_end( &pOldPara->member.para )->next_para;
- if (pNewPara->type == diTextEnd)
- return; /* At the bottom, so don't go anywhere. */
- pItem = ME_FindItemFwd(pNewPara, diStartRow);
+ new_para = para_next( table_row_end( old_para ) );
+ if (!para_next( new_para )) return; /* At the bottom, so don't go anywhere. */
+ pItem = ME_FindItemFwd( para_get_di( new_para ), diStartRow );
}
- if (pNewPara->member.para.nFlags & MEPF_ROWSTART)
+ if (new_para->nFlags & MEPF_ROWSTART)
{
/* Brought into a table row */
- ME_DisplayItem *cell = ME_FindItemFwd(pNewPara, diCell);
- while (cell->member.cell.next_cell &&
- x >= cell->member.cell.next_cell->member.cell.pt.x)
- cell = cell->member.cell.next_cell;
- pItem = ME_FindItemFwd(cell, diStartRow);
+ ME_Cell *cell = table_row_first_cell( new_para );
+ while (cell_next( cell ) && x >= cell_next( cell )->pt.x)
+ cell = cell_next( cell );
+ pItem = ME_FindItemFwd( cell_get_di( cell ), diStartRow );
}
}
if (!pItem)
More information about the wine-cvs
mailing list