Sergio Gómez Del Rea =?UTF-8?Q?l=20?=: riched20: Move y-adjust to its own function.

Alexandre Julliard julliard at winehq.org
Thu Nov 29 15:33:01 CST 2018


Module: wine
Branch: master
Commit: 70a2fe5886f4fafcb5636076d6463e46c92873ff
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=70a2fe5886f4fafcb5636076d6463e46c92873ff

Author: Sergio Gómez Del Real <sdelreal at codeweavers.com>
Date:   Thu Nov 29 08:44:50 2018 -0500

riched20: Move y-adjust to its own function.

Signed-off-by: Sergio Gómez Del Real <sdelreal at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/riched20/wrap.c | 222 ++++++++++++++++++++++++++-------------------------
 1 file changed, 115 insertions(+), 107 deletions(-)

diff --git a/dlls/riched20/wrap.c b/dlls/riched20/wrap.c
index 1855825..e1ec692 100644
--- a/dlls/riched20/wrap.c
+++ b/dlls/riched20/wrap.c
@@ -980,6 +980,120 @@ static void ME_MarkRepaintEnd(ME_DisplayItem *para,
     *repaint_end = para;
 }
 
+static void adjust_para_y(ME_DisplayItem *item, ME_Context *c, ME_DisplayItem *repaint_start, ME_DisplayItem *repaint_end)
+{
+    if (item->member.para.nFlags & MEPF_ROWSTART)
+    {
+        ME_DisplayItem *cell = ME_FindItemFwd(item, diCell);
+        ME_DisplayItem *endRowPara;
+        int borderWidth = 0;
+        cell->member.cell.pt = c->pt;
+        /* Offset the text by the largest top border width. */
+        while (cell->member.cell.next_cell)
+        {
+            borderWidth = max(borderWidth, cell->member.cell.border.top.width);
+            cell = cell->member.cell.next_cell;
+        }
+        endRowPara = ME_FindItemFwd(cell, diParagraph);
+        assert(endRowPara->member.para.nFlags & MEPF_ROWEND);
+        if (borderWidth > 0)
+        {
+            borderWidth = max(ME_twips2pointsY(c, borderWidth), 1);
+            while (cell)
+            {
+                cell->member.cell.yTextOffset = borderWidth;
+                cell = cell->member.cell.prev_cell;
+            }
+            c->pt.y += borderWidth;
+        }
+        if (endRowPara->member.para.fmt.dxStartIndent > 0)
+        {
+            int dxStartIndent = endRowPara->member.para.fmt.dxStartIndent;
+            cell = ME_FindItemFwd(item, diCell);
+            cell->member.cell.pt.x += ME_twips2pointsX(c, dxStartIndent);
+            c->pt.x = cell->member.cell.pt.x;
+        }
+    }
+    else if (item->member.para.nFlags & MEPF_ROWEND)
+    {
+        /* Set all the cells to the height of the largest cell */
+        ME_DisplayItem *startRowPara;
+        int prevHeight, nHeight, bottomBorder = 0;
+        ME_DisplayItem *cell = ME_FindItemBack(item, diCell);
+        item->member.para.nWidth = cell->member.cell.pt.x + cell->member.cell.nWidth;
+        if (!(item->member.para.next_para->member.para.nFlags & MEPF_ROWSTART))
+        {
+            /* Last row, the bottom border is added to the height. */
+            cell = cell->member.cell.prev_cell;
+            while (cell)
+            {
+                bottomBorder = max(bottomBorder, cell->member.cell.border.bottom.width);
+                cell = cell->member.cell.prev_cell;
+            }
+            bottomBorder = ME_twips2pointsY(c, bottomBorder);
+            cell = ME_FindItemBack(item, diCell);
+        }
+        prevHeight = cell->member.cell.nHeight;
+        nHeight = cell->member.cell.prev_cell->member.cell.nHeight + bottomBorder;
+        cell->member.cell.nHeight = nHeight;
+        item->member.para.nHeight = nHeight;
+        cell = cell->member.cell.prev_cell;
+        cell->member.cell.nHeight = nHeight;
+        while (cell->member.cell.prev_cell)
+        {
+            cell = cell->member.cell.prev_cell;
+            cell->member.cell.nHeight = nHeight;
+        }
+        /* Also set the height of the start row paragraph */
+        startRowPara = ME_FindItemBack(cell, diParagraph);
+        startRowPara->member.para.nHeight = nHeight;
+        c->pt.x = startRowPara->member.para.pt.x;
+        c->pt.y = cell->member.cell.pt.y + nHeight;
+        if (prevHeight < nHeight)
+        {
+            /* The height of the cells has grown, so invalidate the bottom of
+             * the cells. */
+            ME_MarkRepaintEnd(item, &repaint_start, &repaint_end);
+            cell = ME_FindItemBack(item, diCell);
+            while (cell)
+            {
+                ME_MarkRepaintEnd(ME_FindItemBack(cell, diParagraph), &repaint_start, &repaint_end);
+                cell = cell->member.cell.prev_cell;
+            }
+        }
+    }
+    else if (item->member.para.pCell &&
+             item->member.para.pCell != item->member.para.next_para->member.para.pCell)
+    {
+        /* The next paragraph is in the next cell in the table row. */
+        ME_Cell *cell = &item->member.para.pCell->member.cell;
+        cell->nHeight = c->pt.y + item->member.para.nHeight - cell->pt.y;
+
+        /* Propagate the largest height to the end so that it can be easily
+         * sent back to all the cells at the end of the row. */
+        if (cell->prev_cell)
+            cell->nHeight = max(cell->nHeight, cell->prev_cell->member.cell.nHeight);
+
+        c->pt.x = cell->pt.x + cell->nWidth;
+        c->pt.y = cell->pt.y;
+        cell->next_cell->member.cell.pt = c->pt;
+        if (!(item->member.para.next_para->member.para.nFlags & MEPF_ROWEND))
+            c->pt.y += cell->yTextOffset;
+    }
+    else
+    {
+        if (item->member.para.pCell)
+        {
+            /* Next paragraph in the same cell. */
+            c->pt.x = item->member.para.pCell->member.cell.pt.x;
+        }
+        else
+            /* Normal paragraph */
+            c->pt.x = 0;
+        c->pt.y += item->member.para.nHeight;
+    }
+}
+
 BOOL ME_WrapMarkedParagraphs(ME_TextEditor *editor)
 {
   ME_DisplayItem *item;
@@ -1004,113 +1118,7 @@ BOOL ME_WrapMarkedParagraphs(ME_TextEditor *editor)
     if (bRedraw)
       ME_MarkRepaintEnd(item, &repaint_start, &repaint_end);
 
-    if (item->member.para.nFlags & MEPF_ROWSTART)
-    {
-      ME_DisplayItem *cell = ME_FindItemFwd(item, diCell);
-      ME_DisplayItem *endRowPara;
-      int borderWidth = 0;
-      cell->member.cell.pt = c.pt;
-      /* Offset the text by the largest top border width. */
-      while (cell->member.cell.next_cell) {
-        borderWidth = max(borderWidth, cell->member.cell.border.top.width);
-        cell = cell->member.cell.next_cell;
-      }
-      endRowPara = ME_FindItemFwd(cell, diParagraph);
-      assert(endRowPara->member.para.nFlags & MEPF_ROWEND);
-      if (borderWidth > 0)
-      {
-        borderWidth = max(ME_twips2pointsY(&c, borderWidth), 1);
-        while (cell) {
-          cell->member.cell.yTextOffset = borderWidth;
-          cell = cell->member.cell.prev_cell;
-        }
-        c.pt.y += borderWidth;
-      }
-      if (endRowPara->member.para.fmt.dxStartIndent > 0)
-      {
-        int dxStartIndent = endRowPara->member.para.fmt.dxStartIndent;
-        cell = ME_FindItemFwd(item, diCell);
-        cell->member.cell.pt.x += ME_twips2pointsX(&c, dxStartIndent);
-        c.pt.x = cell->member.cell.pt.x;
-      }
-    }
-    else if (item->member.para.nFlags & MEPF_ROWEND)
-    {
-      /* Set all the cells to the height of the largest cell */
-      ME_DisplayItem *startRowPara;
-      int prevHeight, nHeight, bottomBorder = 0;
-      ME_DisplayItem *cell = ME_FindItemBack(item, diCell);
-      item->member.para.nWidth = cell->member.cell.pt.x + cell->member.cell.nWidth;
-      if (!(item->member.para.next_para->member.para.nFlags & MEPF_ROWSTART))
-      {
-        /* Last row, the bottom border is added to the height. */
-        cell = cell->member.cell.prev_cell;
-        while (cell)
-        {
-          bottomBorder = max(bottomBorder, cell->member.cell.border.bottom.width);
-          cell = cell->member.cell.prev_cell;
-        }
-        bottomBorder = ME_twips2pointsY(&c, bottomBorder);
-        cell = ME_FindItemBack(item, diCell);
-      }
-      prevHeight = cell->member.cell.nHeight;
-      nHeight = cell->member.cell.prev_cell->member.cell.nHeight + bottomBorder;
-      cell->member.cell.nHeight = nHeight;
-      item->member.para.nHeight = nHeight;
-      cell = cell->member.cell.prev_cell;
-      cell->member.cell.nHeight = nHeight;
-      while (cell->member.cell.prev_cell)
-      {
-        cell = cell->member.cell.prev_cell;
-        cell->member.cell.nHeight = nHeight;
-      }
-      /* Also set the height of the start row paragraph */
-      startRowPara = ME_FindItemBack(cell, diParagraph);
-      startRowPara->member.para.nHeight = nHeight;
-      c.pt.x = startRowPara->member.para.pt.x;
-      c.pt.y = cell->member.cell.pt.y + nHeight;
-      if (prevHeight < nHeight)
-      {
-        /* The height of the cells has grown, so invalidate the bottom of
-         * the cells. */
-        ME_MarkRepaintEnd(item, &repaint_start, &repaint_end);
-        cell = ME_FindItemBack(item, diCell);
-        while (cell) {
-          ME_MarkRepaintEnd(ME_FindItemBack(cell, diParagraph), &repaint_start, &repaint_end);
-          cell = cell->member.cell.prev_cell;
-        }
-      }
-    }
-    else if (item->member.para.pCell &&
-             item->member.para.pCell != item->member.para.next_para->member.para.pCell)
-    {
-      /* The next paragraph is in the next cell in the table row. */
-      ME_Cell *cell = &item->member.para.pCell->member.cell;
-      cell->nHeight = c.pt.y + item->member.para.nHeight - cell->pt.y;
-
-      /* Propagate the largest height to the end so that it can be easily
-       * sent back to all the cells at the end of the row. */
-      if (cell->prev_cell)
-        cell->nHeight = max(cell->nHeight, cell->prev_cell->member.cell.nHeight);
-
-      c.pt.x = cell->pt.x + cell->nWidth;
-      c.pt.y = cell->pt.y;
-      cell->next_cell->member.cell.pt = c.pt;
-      if (!(item->member.para.next_para->member.para.nFlags & MEPF_ROWEND))
-        c.pt.y += cell->yTextOffset;
-    }
-    else
-    {
-      if (item->member.para.pCell) {
-        /* Next paragraph in the same cell. */
-        c.pt.x = item->member.para.pCell->member.cell.pt.x;
-      } else {
-        /* Normal paragraph */
-        c.pt.x = 0;
-      }
-      c.pt.y += item->member.para.nHeight;
-    }
-
+    adjust_para_y(item, &c, repaint_start, repaint_end);
     totalWidth = max(totalWidth, item->member.para.nWidth);
     item = item->member.para.next_para;
   }




More information about the wine-cvs mailing list