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 = ¶->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