Signed-off-by: Huw Davies huw@codeweavers.com --- dlls/riched20/caret.c | 6 ++--- dlls/riched20/editor.h | 8 +++--- dlls/riched20/paint.c | 4 +-- dlls/riched20/para.c | 13 ++++++++++ dlls/riched20/table.c | 57 ++++++++++++++++++------------------------ dlls/riched20/wrap.c | 9 +++---- dlls/riched20/writer.c | 4 +-- 7 files changed, 54 insertions(+), 47 deletions(-)
diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c index 89fd9d7326c..e9ea64ed1bc 100644 --- a/dlls/riched20/caret.c +++ b/dlls/riched20/caret.c @@ -1033,7 +1033,7 @@ static BOOL ME_FindPixelPos(ME_TextEditor *editor, int x, int y, } else if (p->member.para.nFlags & MEPF_ROWSTART) { - p = ME_GetTableRowEnd(p); + p = para_get_di( table_row_end( &p->member.para ) ); } } /* find row */ @@ -1304,7 +1304,7 @@ ME_MoveCursorLines(ME_TextEditor *editor, ME_Cursor *pCursor, int nRelOfs, BOOL pOldPara->member.para.pCell != pNewPara->member.para.pCell)) { /* Brought out of a cell */ - pNewPara = ME_GetTableRowStart(pOldPara)->member.para.prev_para; + 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); @@ -1335,7 +1335,7 @@ ME_MoveCursorLines(ME_TextEditor *editor, ME_Cursor *pCursor, int nRelOfs, BOOL pOldPara->member.para.pCell != pNewPara->member.para.pCell)) { /* Brought out of a cell */ - pNewPara = ME_GetTableRowEnd(pOldPara)->member.para.next_para; + 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); diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h index e7687272510..910a87c33c4 100644 --- a/dlls/riched20/editor.h +++ b/dlls/riched20/editor.h @@ -211,6 +211,8 @@ int get_total_width(ME_TextEditor *editor) DECLSPEC_HIDDEN; void para_mark_rewrap( ME_TextEditor *editor, ME_Paragraph *para ) DECLSPEC_HIDDEN; void para_mark_add( ME_TextEditor *editor, ME_Paragraph *para ) DECLSPEC_HIDDEN; void para_mark_remove( ME_TextEditor *editor, ME_Paragraph *para ) DECLSPEC_HIDDEN; +ME_Paragraph *para_next( ME_Paragraph *para ) DECLSPEC_HIDDEN; +ME_Paragraph *para_prev( ME_Paragraph *para ) DECLSPEC_HIDDEN; ME_Run *para_first_run( ME_Paragraph *para ) DECLSPEC_HIDDEN; static inline ME_DisplayItem *para_get_di(ME_Paragraph *para) { @@ -273,9 +275,9 @@ ME_DisplayItem *ME_InsertTableRowStartAtParagraph(ME_TextEditor *editor, ME_DisplayItem *para) DECLSPEC_HIDDEN; ME_DisplayItem *ME_InsertTableCellFromCursor(ME_TextEditor *editor) DECLSPEC_HIDDEN; ME_DisplayItem *ME_InsertTableRowEndFromCursor(ME_TextEditor *editor) DECLSPEC_HIDDEN; -ME_DisplayItem *ME_GetTableRowEnd(ME_DisplayItem *para) DECLSPEC_HIDDEN; -ME_DisplayItem *ME_GetTableRowStart(ME_DisplayItem *para) DECLSPEC_HIDDEN; -ME_DisplayItem *ME_GetOuterParagraph(ME_DisplayItem *para) DECLSPEC_HIDDEN; +ME_Paragraph *table_row_end( ME_Paragraph *para ) DECLSPEC_HIDDEN; +ME_Paragraph *table_row_start( ME_Paragraph *para ) DECLSPEC_HIDDEN; +ME_Paragraph *table_outer_para( ME_Paragraph *para ) DECLSPEC_HIDDEN; void ME_CheckTablesForCorruption(ME_TextEditor *editor) DECLSPEC_HIDDEN; void ME_ProtectPartialTableDeletion(ME_TextEditor *editor, ME_Cursor *c, int *nChars) DECLSPEC_HIDDEN; ME_DisplayItem* ME_AppendTableRow(ME_TextEditor *editor, ME_DisplayItem *table_row) DECLSPEC_HIDDEN; diff --git a/dlls/riched20/paint.c b/dlls/riched20/paint.c index 72128072380..53583de21ce 100644 --- a/dlls/riched20/paint.c +++ b/dlls/riched20/paint.c @@ -778,10 +778,10 @@ static void ME_DrawTableBorders(ME_Context *c, ME_DisplayItem *paragraph) if (atBottom) { int oldLeft = rc.left; width = max(ME_twips2pointsY(c, cell->border.bottom.width), 1); - paraAfterRow = ME_GetTableRowEnd(paragraph)->member.para.next_para; + paraAfterRow = table_row_end( ¶graph->member.para )->next_para; if (paraAfterRow->member.para.nFlags & MEPF_ROWSTART) { ME_DisplayItem *nextEndCell; - nextEndCell = ME_FindItemBack(ME_GetTableRowEnd(paraAfterRow), diCell); + nextEndCell = ME_FindItemBack( para_get_di( table_row_end( ¶AfterRow->member.para ) ), diCell ); assert(nextEndCell && !nextEndCell->member.cell.next_cell); rc.left = c->pt.x + nextEndCell->member.cell.pt.x; /* FIXME: Native draws FROM the bottom of the table rather than diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c index 58dcfc8e712..0f8b76f76d0 100644 --- a/dlls/riched20/para.c +++ b/dlls/riched20/para.c @@ -55,6 +55,19 @@ void destroy_para(ME_TextEditor *editor, ME_DisplayItem *item) ME_DestroyDisplayItem(item); }
+/* Note para_next/prev will return the start and end doc nodes */ +ME_Paragraph *para_next( ME_Paragraph *para ) +{ + if (para->next_para) return ¶->next_para->member.para; + return NULL; +} + +ME_Paragraph *para_prev( ME_Paragraph *para ) +{ + if (para->prev_para) return ¶->prev_para->member.para; + return NULL; +} + int get_total_width(ME_TextEditor *editor) { ME_Paragraph *para; diff --git a/dlls/riched20/table.c b/dlls/riched20/table.c index 1b4b9143d16..615145b85e8 100644 --- a/dlls/riched20/table.c +++ b/dlls/riched20/table.c @@ -133,52 +133,46 @@ ME_DisplayItem* ME_InsertTableRowEndFromCursor(ME_TextEditor *editor) return para->member.para.prev_para; }
-ME_DisplayItem* ME_GetTableRowEnd(ME_DisplayItem *para) +ME_Paragraph* table_row_end( ME_Paragraph *para ) { ME_DisplayItem *cell; - assert(para); - if (para->member.para.nFlags & MEPF_ROWEND) - return para; - if (para->member.para.nFlags & MEPF_ROWSTART) - para = para->member.para.next_para; - cell = para->member.para.pCell; + assert( para ); + if (para->nFlags & MEPF_ROWEND) return para; + if (para->nFlags & MEPF_ROWSTART) para = para_next( para ); + cell = para->pCell; assert(cell && cell->type == diCell); while (cell->member.cell.next_cell) cell = cell->member.cell.next_cell;
- para = ME_FindItemFwd(cell, diParagraph); - assert(para && para->member.para.nFlags & MEPF_ROWEND); + para = &ME_FindItemFwd( cell, diParagraph )->member.para; + assert( para && para->nFlags & MEPF_ROWEND ); return para; }
-ME_DisplayItem* ME_GetTableRowStart(ME_DisplayItem *para) +ME_Paragraph* table_row_start( ME_Paragraph *para ) { ME_DisplayItem *cell; - assert(para); - if (para->member.para.nFlags & MEPF_ROWSTART) - return para; - if (para->member.para.nFlags & MEPF_ROWEND) - para = para->member.para.prev_para; - cell = para->member.para.pCell; + assert( para ); + if (para->nFlags & MEPF_ROWSTART) return para; + if (para->nFlags & MEPF_ROWEND) para = para_prev( para ); + cell = para->pCell; assert(cell && cell->type == diCell); while (cell->member.cell.prev_cell) cell = cell->member.cell.prev_cell;
- para = ME_FindItemBack(cell, diParagraph); - assert(para && para->member.para.nFlags & MEPF_ROWSTART); + para = &ME_FindItemBack( cell, diParagraph )->member.para; + assert( para && para->nFlags & MEPF_ROWSTART ); return para; }
-ME_DisplayItem* ME_GetOuterParagraph(ME_DisplayItem *para) +ME_Paragraph* table_outer_para( ME_Paragraph *para ) { - if (para->member.para.nFlags & MEPF_ROWEND) - para = para->member.para.prev_para; - while (para->member.para.pCell) + if (para->nFlags & MEPF_ROWEND) para = para_prev( para ); + while (para->pCell) { - para = ME_GetTableRowStart(para); - if (!para->member.para.pCell) - break; - para = ME_FindItemBack(para->member.para.pCell, diParagraph); + para = table_row_start( para ); + if (!para->pCell) break; + para = &ME_FindItemBack( para->pCell, diParagraph )->member.para; } return para; } @@ -330,7 +324,7 @@ void ME_ProtectPartialTableDeletion(ME_TextEditor *editor, ME_Cursor *c, int *nC while (!bTruancateDeletion && next_para->member.para.nFlags & MEPF_ROWSTART) { - next_para = ME_GetTableRowEnd(next_para)->member.para.next_para; + next_para = table_row_end( &next_para->member.para )->next_para; if (next_para->member.para.nCharOfs > nOfs + *nChars) { /* End of deletion is not past the end of the table row. */ @@ -416,8 +410,8 @@ ME_DisplayItem* ME_AppendTableRow(ME_TextEditor *editor, assert(table_row->type == diParagraph); if (!editor->bEmulateVersion10) { /* v4.1 */ ME_DisplayItem *insertedCell, *para, *cell, *prevTableEnd; - cell = ME_FindItemFwd(ME_GetTableRowStart(table_row), diCell); - prevTableEnd = ME_GetTableRowEnd(table_row); + cell = ME_FindItemFwd( para_get_di( table_row_start( &table_row->member.para ) ), diCell ); + prevTableEnd = para_get_di( table_row_end( &table_row->member.para ) ); para = prevTableEnd->member.para.next_para; run = ME_FindItemFwd(para, diRun); editor->pCursors[0].pPara = para; @@ -484,15 +478,14 @@ static void ME_SelectOrInsertNextCell(ME_TextEditor *editor, { cell = cell->member.cell.next_cell; } else { - para = ME_GetTableRowEnd(ME_FindItemFwd(cell, diParagraph)); - para = para->member.para.next_para; + para = table_row_end( &ME_FindItemFwd( cell, diParagraph )->member.para )->next_para; assert(para); if (para->member.para.nFlags & MEPF_ROWSTART) { cell = para->member.para.next_para->member.para.pCell; } else { /* Insert row */ para = para->member.para.prev_para; - para = ME_AppendTableRow(editor, ME_GetTableRowStart(para)); + para = ME_AppendTableRow( editor, para_get_di( table_row_start( ¶->member.para ) ) ); /* Put cursor at the start of the new table row */ para = para->member.para.next_para; editor->pCursors[0].pPara = para; diff --git a/dlls/riched20/wrap.c b/dlls/riched20/wrap.c index 5ff9623e336..a84f738e925 100644 --- a/dlls/riched20/wrap.c +++ b/dlls/riched20/wrap.c @@ -209,7 +209,7 @@ static void ME_BeginRow(ME_WrapContext *wc) width -= cell->prev_cell->member.cell.nRightBoundary; if (!cell->prev_cell) { - int rowIndent = ME_GetTableRowEnd( para_get_di( wc->para ) )->member.para.fmt.dxStartIndent; + int rowIndent = table_row_end( wc->para )->fmt.dxStartIndent; width -= rowIndent; } cell->nWidth = max(ME_twips2pointsX(wc->context, width), 0); @@ -843,8 +843,7 @@ static void ME_WrapTextParagraph( ME_TextEditor *editor, ME_Context *c, ME_Parag else { int dxStartIndent = para->fmt.dxStartIndent; - if (para->pCell) - dxStartIndent += ME_GetTableRowEnd( para_get_di( para ) )->member.para.fmt.dxOffset; + if (para->pCell) dxStartIndent += table_row_end( para )->fmt.dxOffset;
wc.nLeftMargin = ME_twips2pointsX( c, dxStartIndent + para->fmt.dxOffset ); wc.nFirstMargin = ME_twips2pointsX( c, dxStartIndent ); @@ -1101,8 +1100,8 @@ void ME_InvalidateParagraphRange(ME_TextEditor *editor,
if (start_para) { - start_para = ME_GetOuterParagraph(start_para); - last_para = ME_GetOuterParagraph(last_para); + start_para = para_get_di( table_outer_para( &start_para->member.para ) ); + last_para = para_get_di( table_outer_para( &last_para->member.para ) ); rc.top += start_para->member.para.pt.y - ofs; } else { rc.top += editor->nTotalLength - ofs; diff --git a/dlls/riched20/writer.c b/dlls/riched20/writer.c index 94001ee44b2..6f5bb4e1f83 100644 --- a/dlls/riched20/writer.c +++ b/dlls/riched20/writer.c @@ -400,8 +400,8 @@ ME_StreamOutRTFTableProps(ME_TextEditor *editor, ME_OutStream *pStream, if (!ME_StreamOutPrint(pStream, "\trowd")) return FALSE; if (!editor->bEmulateVersion10) { /* v4.1 */ - PARAFORMAT2 *pFmt = &ME_GetTableRowEnd(para)->member.para.fmt; - para = ME_GetTableRowStart(para); + PARAFORMAT2 *pFmt = &table_row_end( ¶->member.para )->fmt; + para = para_get_di( table_row_start( ¶->member.para ) ); cell = para->member.para.next_para->member.para.pCell; assert(cell); if (pFmt->dxOffset)