Huw Davies : riched20: Add a paragraph ptr to each run.

Alexandre Julliard julliard at winehq.org
Wed Jan 30 13:43:23 CST 2013


Module: wine
Branch: master
Commit: 95938b7a10ce4f6e0fa1f2214ee53061e7df64b4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=95938b7a10ce4f6e0fa1f2214ee53061e7df64b4

Author: Huw Davies <huw at codeweavers.com>
Date:   Wed Jan 30 15:10:18 2013 +0000

riched20: Add a paragraph ptr to each run.

---

 dlls/riched20/editstr.h |    1 +
 dlls/riched20/para.c    |   10 +++++++---
 dlls/riched20/run.c     |    3 +++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/dlls/riched20/editstr.h b/dlls/riched20/editstr.h
index 0c49d30..49b461d 100644
--- a/dlls/riched20/editstr.h
+++ b/dlls/riched20/editstr.h
@@ -143,6 +143,7 @@ typedef struct tagME_Run
 {
   ME_String *strText;
   ME_Style *style;
+  struct tagME_Paragraph *para; /* ptr to the run's paragraph */
   int nCharOfs; /* relative to para's offset */
   int nWidth; /* width of full run, width of leading&trailing ws */
   int nFlags;
diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c
index 0539431..c909358 100644
--- a/dlls/riched20/para.c
+++ b/dlls/riched20/para.c
@@ -67,6 +67,7 @@ void ME_MakeFirstParagraph(ME_TextEditor *editor)
   eol_str = ME_MakeStringN(cr_lf, editor->bEmulateVersion10 ? 2 : 1);
   run = ME_MakeRun(style, eol_str, MERF_ENDPARA);
   run->member.run.nCharOfs = 0;
+  run->member.run.para = &para->member.para;
 
   ME_InsertBefore(text->pLast, para);
   ME_InsertBefore(text->pLast, run);
@@ -213,16 +214,17 @@ ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *run,
   } else { /* v1.0 - v3.0 */
     assert(!(paraFlags & (MEPF_CELL|MEPF_ROWSTART|MEPF_ROWEND)));
   }
-  end_run = ME_MakeRun(style, eol_str, run_flags);
-
   assert(run->type == diRun);
   run_para = ME_GetParagraph(run);
   assert(run_para->member.para.pFmt->cbSize == sizeof(PARAFORMAT2));
 
+  end_run = ME_MakeRun(style, eol_str, run_flags);
   ofs = end_run->member.run.nCharOfs = run->member.run.nCharOfs;
+  end_run->member.run.para = run->member.run.para;
+
   next_para = run_para->member.para.next_para;
   assert(next_para == ME_FindItemFwd(run_para, diParagraphOrEnd));
-  
+
   add_undo_join_paras( editor, run_para->member.para.nCharOfs + ofs );
 
   /* Update selection cursors to point to the correct paragraph. */
@@ -238,6 +240,7 @@ ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *run,
   pp = run;
   while(pp->type == diRun) {
     pp->member.run.nCharOfs -= ofs;
+    pp->member.run.para = &new_para->member.para;
     pp = ME_FindItemFwd(pp, diRunOrParagraphOrEnd);
   }
   new_para->member.para.nCharOfs = run_para->member.para.nCharOfs + ofs;
@@ -409,6 +412,7 @@ ME_DisplayItem *ME_JoinParagraphs(ME_TextEditor *editor, ME_DisplayItem *tp,
       break;
     TRACE("shifting \"%s\" by %d (previous %d)\n", debugstr_w(pTmp->member.run.strText->szData), shift, pTmp->member.run.nCharOfs);
     pTmp->member.run.nCharOfs += shift;
+    pTmp->member.run.para = &tp->member.para;
   } while(1);
 
   ME_Remove(pRun);
diff --git a/dlls/riched20/run.c b/dlls/riched20/run.c
index 10c3da3..0c594d3 100644
--- a/dlls/riched20/run.c
+++ b/dlls/riched20/run.c
@@ -310,6 +310,7 @@ ME_DisplayItem *ME_SplitRunSimple(ME_TextEditor *editor, ME_Cursor *cursor)
                        run->member.run.nFlags & MERF_SPLITMASK);
 
   new_run->member.run.nCharOfs = run->member.run.nCharOfs + nOffset;
+  new_run->member.run.para = run->member.run.para;
   cursor->pRun = new_run;
   cursor->nOffset = 0;
 
@@ -341,6 +342,7 @@ ME_DisplayItem *ME_MakeRun(ME_Style *s, ME_String *strData, int nFlags)
   item->member.run.strText = strData;
   item->member.run.nFlags = nFlags;
   item->member.run.nCharOfs = -1;
+  item->member.run.para = NULL;
   ME_AddRefStyle(s);
   return item;
 }
@@ -366,6 +368,7 @@ ME_InsertRunAtCursor(ME_TextEditor *editor, ME_Cursor *cursor, ME_Style *style,
 
   pDI = ME_MakeRun(style, ME_MakeStringN(str, len), flags);
   pDI->member.run.nCharOfs = cursor->pRun->member.run.nCharOfs;
+  pDI->member.run.para = cursor->pRun->member.run.para;
   ME_InsertBefore(cursor->pRun, pDI);
   TRACE("Shift length:%d\n", len);
   ME_PropagateCharOffset(cursor->pRun, len);




More information about the wine-cvs mailing list