[PATCH 2/5] riched20: Store a ME_Paragraph ptr in the wrap context.

Huw Davies huw at codeweavers.com
Thu Oct 8 05:10:46 CDT 2020


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/riched20/editor.h |  5 +++-
 dlls/riched20/para.c   |  9 ++----
 dlls/riched20/run.c    |  4 +--
 dlls/riched20/wrap.c   | 68 +++++++++++++++++++-----------------------
 4 files changed, 39 insertions(+), 47 deletions(-)

diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index c42d3bc5e7c..922a1e5c6c2 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -209,9 +209,12 @@ void para_num_init( ME_Context *c, ME_Paragraph *para ) DECLSPEC_HIDDEN;
 void para_num_clear( struct para_num *pn ) DECLSPEC_HIDDEN;
 int get_total_width(ME_TextEditor *editor) DECLSPEC_HIDDEN;
 void mark_para_rewrap(ME_TextEditor *editor, ME_DisplayItem *para) DECLSPEC_HIDDEN;
-ME_DisplayItem *get_di_from_para(ME_Paragraph *para) DECLSPEC_HIDDEN;
 void add_marked_para(ME_TextEditor *editor, ME_DisplayItem *para) DECLSPEC_HIDDEN;
 void remove_marked_para(ME_TextEditor *editor, ME_DisplayItem *para) DECLSPEC_HIDDEN;
+static inline ME_DisplayItem *para_get_di(ME_Paragraph *para)
+{
+    return (ME_DisplayItem *)((ptrdiff_t)para - offsetof(ME_DisplayItem, member));
+}
 
 /* paint.c */
 void ME_PaintContent(ME_TextEditor *editor, HDC hDC, const RECT *rcUpdate) DECLSPEC_HIDDEN;
diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c
index bde0654b666..7cef6ca9932 100644
--- a/dlls/riched20/para.c
+++ b/dlls/riched20/para.c
@@ -29,11 +29,6 @@ void mark_para_rewrap(ME_TextEditor *editor, ME_DisplayItem *para)
     add_marked_para(editor, para);
 }
 
-ME_DisplayItem *get_di_from_para(ME_Paragraph *para)
-{
-    return (ME_DisplayItem *)((ptrdiff_t)para - offsetof(ME_DisplayItem, member));
-}
-
 static ME_DisplayItem *make_para(ME_TextEditor *editor)
 {
     ME_DisplayItem *item = ME_MakeDI(diParagraph);
@@ -454,7 +449,7 @@ static void para_num_clear_list( ME_TextEditor *editor, ME_Paragraph *para, cons
 {
     do
     {
-        mark_para_rewrap(editor, get_di_from_para(para));
+        mark_para_rewrap( editor, para_get_di( para ) );
         para_num_clear( &para->para_num );
         if (para->next_para->type != diParagraph) break;
         para = &para->next_para->member.para;
@@ -529,7 +524,7 @@ static BOOL ME_SetParaFormat(ME_TextEditor *editor, ME_Paragraph *para, const PA
 
   if (memcmp(&copy, &para->fmt, sizeof(PARAFORMAT2)))
   {
-    mark_para_rewrap(editor, get_di_from_para(para));
+    mark_para_rewrap( editor, para_get_di( para ) );
     if (((dwMask & PFM_NUMBERING)      && (copy.wNumbering != para->fmt.wNumbering)) ||
         ((dwMask & PFM_NUMBERINGSTART) && (copy.wNumberingStart != para->fmt.wNumberingStart)) ||
         ((dwMask & PFM_NUMBERINGSTYLE) && (copy.wNumberingStyle != para->fmt.wNumberingStyle)))
diff --git a/dlls/riched20/run.c b/dlls/riched20/run.c
index 66925ca3434..f98288a94a2 100644
--- a/dlls/riched20/run.c
+++ b/dlls/riched20/run.c
@@ -367,7 +367,7 @@ ME_InsertRunAtCursor(ME_TextEditor *editor, ME_Cursor *cursor, ME_Style *style,
   ME_InsertBefore( insert_before, pDI );
   TRACE("Shift length:%d\n", len);
   ME_PropagateCharOffset( insert_before, len );
-  mark_para_rewrap(editor, get_di_from_para(insert_before->member.run.para));
+  mark_para_rewrap( editor, para_get_di( insert_before->member.run.para ) );
 
   /* Move any cursors that were at the end of the previous run to the end of the inserted run */
   prev = ME_FindItemBack( pDI, diRun );
@@ -787,7 +787,7 @@ void ME_SetCharFormat(ME_TextEditor *editor, ME_Cursor *start, ME_Cursor *end, C
       ME_ReleaseStyle(para->para_num.style);
       para->para_num.style = NULL;
     }
-    mark_para_rewrap(editor, get_di_from_para(para));
+    mark_para_rewrap( editor, para_get_di( para ) );
   }
 }
 
diff --git a/dlls/riched20/wrap.c b/dlls/riched20/wrap.c
index cde46e2d7cf..c74931015a1 100644
--- a/dlls/riched20/wrap.c
+++ b/dlls/riched20/wrap.c
@@ -43,7 +43,7 @@ typedef struct tagME_WrapContext
   int nRow;
   POINT pt;
   BOOL bOverflown, bWordWrap;
-  ME_DisplayItem *pPara;
+  ME_Paragraph *para;
   ME_Run *pRowStart;
   ME_Run *pLastSplittableRun;
 } ME_WrapContext;
@@ -131,8 +131,7 @@ static ME_Run *split_run_extents( ME_WrapContext *wc, ME_Run *run, int nVChar )
 {
   ME_TextEditor *editor = wc->context->editor;
   ME_Run *run2;
-  ME_Paragraph *para = &wc->pPara->member.para;
-  ME_Cursor cursor = {wc->pPara, run_get_di( run ), nVChar};
+  ME_Cursor cursor = {para_get_di( wc->para ), run_get_di( run ), nVChar};
 
   assert( run->nCharOfs != -1 );
   ME_CheckCharOffsets(editor);
@@ -147,7 +146,7 @@ static ME_Run *split_run_extents( ME_WrapContext *wc, ME_Run *run, int nVChar )
 
   shape_run( wc->context, run );
   shape_run( wc->context, run2 );
-  calc_run_extent(wc->context, para, wc->nRow ? wc->nLeftMargin : wc->nFirstMargin, run);
+  calc_run_extent(wc->context, wc->para, wc->nRow ? wc->nLeftMargin : wc->nFirstMargin, run);
 
   run2->pt.x = run->pt.x + run->nWidth;
   run2->pt.y = run->pt.y;
@@ -186,24 +185,23 @@ static ME_DisplayItem *ME_MakeRow(int height, int baseline, int width)
 
 static void ME_BeginRow(ME_WrapContext *wc)
 {
-  PARAFORMAT2 *pFmt;
-  ME_DisplayItem *para = wc->pPara;
-
-  pFmt = &para->member.para.fmt;
   wc->pRowStart = NULL;
   wc->bOverflown = FALSE;
   wc->pLastSplittableRun = NULL;
   wc->bWordWrap = wc->context->editor->bWordWrap;
-  if (para->member.para.nFlags & (MEPF_ROWSTART|MEPF_ROWEND)) {
+  if (wc->para->nFlags & (MEPF_ROWSTART | MEPF_ROWEND))
+  {
     wc->nAvailWidth = 0;
     wc->bWordWrap = FALSE;
-    if (para->member.para.nFlags & MEPF_ROWEND)
+    if (wc->para->nFlags & MEPF_ROWEND)
     {
-      ME_Cell *cell = &ME_FindItemBack(para, diCell)->member.cell;
+      ME_Cell *cell = &ME_FindItemBack( para_get_di( wc->para ), diCell)->member.cell;
       cell->nWidth = 0;
     }
-  } else if (para->member.para.pCell) {
-    ME_Cell *cell = &para->member.para.pCell->member.cell;
+  }
+  else if (wc->para->pCell)
+  {
+    ME_Cell *cell = &wc->para->pCell->member.cell;
     int width;
 
     width = cell->nRightBoundary;
@@ -211,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)->member.para.fmt.dxStartIndent;
+      int rowIndent = ME_GetTableRowEnd( para_get_di( wc->para ) )->member.para.fmt.dxStartIndent;
       width -= rowIndent;
     }
     cell->nWidth = max(ME_twips2pointsX(wc->context, width), 0);
@@ -225,7 +223,7 @@ static void ME_BeginRow(ME_WrapContext *wc)
   }
   wc->pt.x = wc->context->pt.x;
   if (wc->context->editor->bEmulateVersion10 && /* v1.0 - 3.0 */
-      pFmt->dwMask & PFM_TABLE && pFmt->wEffects & PFE_TABLE)
+      wc->para->fmt.dwMask & PFM_TABLE && wc->para->fmt.wEffects & PFE_TABLE)
     /* Shift the text down because of the border. */
     wc->pt.y++;
 }
@@ -285,15 +283,14 @@ static void ME_InsertRowStart( ME_WrapContext *wc, ME_Run *last )
 {
     ME_Run *run;
     ME_DisplayItem *row;
-    ME_Paragraph *para = &wc->pPara->member.para;
     BOOL bSkippingSpaces = TRUE;
     int ascent = 0, descent = 0, width = 0, shift = 0, align = 0;
 
     /* Include height of para numbering label */
-    if (wc->nRow == 0 && para->fmt.wNumbering)
+    if (wc->nRow == 0 && wc->para->fmt.wNumbering)
     {
-        ascent = para->para_num.style->tm.tmAscent;
-        descent = para->para_num.style->tm.tmDescent;
+        ascent = wc->para->para_num.style->tm.tmAscent;
+        descent = wc->para->para_num.style->tm.tmDescent;
     }
 
     for (run = last; run; run = run_prev( run ))
@@ -301,8 +298,8 @@ static void ME_InsertRowStart( ME_WrapContext *wc, ME_Run *last )
         /* ENDPARA run shouldn't affect row height, except if it's the only run in the paragraph */
         if (run == wc->pRowStart || !(run->nFlags & MERF_ENDPARA))
         {
-            if (run->nAscent>ascent) ascent = run->nAscent;
-            if (run->nDescent>descent) descent = run->nDescent;
+            if (run->nAscent > ascent) ascent = run->nAscent;
+            if (run->nDescent > descent) descent = run->nDescent;
             if (bSkippingSpaces)
             {
                 /* Exclude space characters from run width.
@@ -328,10 +325,10 @@ static void ME_InsertRowStart( ME_WrapContext *wc, ME_Run *last )
         if (run == wc->pRowStart) break;
     }
 
-    para->nWidth = max(para->nWidth, width);
+    wc->para->nWidth = max( wc->para->nWidth, width );
     row = ME_MakeRow( ascent + descent, ascent, width );
     if (wc->context->editor->bEmulateVersion10 && /* v1.0 - 3.0 */
-        (para->fmt.dwMask & PFM_TABLE) && (para->fmt.wEffects & PFE_TABLE))
+        (wc->para->fmt.dwMask & PFM_TABLE) && (wc->para->fmt.wEffects & PFE_TABLE))
     {
         /* The text was shifted down in ME_BeginRow so move the wrap context
          * back to where it should be. */
@@ -342,12 +339,12 @@ static void ME_InsertRowStart( ME_WrapContext *wc, ME_Run *last )
     row->member.row.pt = wc->pt;
     row->member.row.nLMargin = (!wc->nRow ? wc->nFirstMargin : wc->nLeftMargin);
     row->member.row.nRMargin = wc->nRightMargin;
-    assert(para->fmt.dwMask & PFM_ALIGNMENT);
-    align = para->fmt.wAlignment;
+    assert(wc->para->fmt.dwMask & PFM_ALIGNMENT);
+    align = wc->para->fmt.wAlignment;
     if (align == PFA_CENTER) shift = max((wc->nAvailWidth-width)/2, 0);
     if (align == PFA_RIGHT) shift = max(wc->nAvailWidth-width, 0);
 
-    if (para->nFlags & MEPF_COMPLEX) layout_row( wc->pRowStart, last );
+    if (wc->para->nFlags & MEPF_COMPLEX) layout_row( wc->pRowStart, last );
 
     row->member.row.pt.x = row->member.row.nLMargin + shift;
 
@@ -357,10 +354,10 @@ static void ME_InsertRowStart( ME_WrapContext *wc, ME_Run *last )
         if (run == last) break;
     }
 
-    if (wc->nRow == 0 && para->fmt.wNumbering)
+    if (wc->nRow == 0 && wc->para->fmt.wNumbering)
     {
-        para->para_num.pt.x = wc->nParaNumOffset + shift;
-        para->para_num.pt.y = wc->pt.y + row->member.row.nBaseline;
+        wc->para->para_num.pt.x = wc->nParaNumOffset + shift;
+        wc->para->para_num.pt.y = wc->pt.y + row->member.row.nBaseline;
     }
 
     ME_InsertBefore( run_get_di( wc->pRowStart ), row );
@@ -371,13 +368,10 @@ static void ME_InsertRowStart( ME_WrapContext *wc, ME_Run *last )
 
 static void ME_WrapEndParagraph( ME_WrapContext *wc )
 {
-  ME_DisplayItem *para = wc->pPara;
-  PARAFORMAT2 *pFmt = &para->member.para.fmt;
-
-  if (wc->pRowStart) ME_InsertRowStart( wc, para->member.para.eop_run );
+  if (wc->pRowStart) ME_InsertRowStart( wc, wc->para->eop_run );
 
   if (wc->context->editor->bEmulateVersion10 && /* v1.0 - 3.0 */
-      pFmt->dwMask & PFM_TABLE && pFmt->wEffects & PFE_TABLE)
+      wc->para->fmt.dwMask & PFM_TABLE && wc->para->fmt.wEffects & PFE_TABLE)
   {
     /* ME_BeginRow was called an extra time for the paragraph, and it shifts the
      * text down by one pixel for the border, so fix up the wrap context. */
@@ -391,7 +385,7 @@ static void ME_WrapSizeRun( ME_WrapContext *wc, ME_Run *run )
 
   ME_UpdateRunFlags( wc->context->editor, run );
 
-  calc_run_extent( wc->context, &wc->pPara->member.para,
+  calc_run_extent( wc->context, wc->para,
                    wc->nRow ? wc->nLeftMargin : wc->nFirstMargin, run );
 }
 
@@ -576,7 +570,7 @@ static ME_Run *ME_WrapHandleRun( ME_WrapContext *wc, ME_Run *run )
         ME_Run *new_run;
         wc->bOverflown = FALSE;
         new_run = split_run_extents( wc, run, black );
-        calc_run_extent( wc->context, &wc->pPara->member.para,
+        calc_run_extent( wc->context, wc->para,
                          wc->nRow ? wc->nLeftMargin : wc->nFirstMargin, run );
         ME_InsertRowStart( wc, run );
         return new_run;
@@ -859,7 +853,7 @@ static void ME_WrapTextParagraph( ME_TextEditor *editor, ME_Context *c, ME_Displ
   pFmt = &tp->member.para.fmt;
 
   wc.context = c;
-  wc.pPara = tp;
+  wc.para = &tp->member.para;
 /*   wc.para_style = tp->member.para.style; */
   wc.style = NULL;
   wc.nParaNumOffset = 0;
-- 
2.23.0




More information about the wine-devel mailing list