Eric Pouech : richedit: Properly copying the paraformat2 structure for paragraphs.
Alexandre Julliard
julliard at winehq.org
Wed Jan 2 07:34:53 CST 2008
Module: wine
Branch: master
Commit: 0e8c08756151a3c38abaf6cc856813b0b56cf300
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0e8c08756151a3c38abaf6cc856813b0b56cf300
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Tue Jan 1 22:04:28 2008 +0100
richedit: Properly copying the paraformat2 structure for paragraphs.
---
dlls/riched20/para.c | 100 ++++++++++++++++++++++++++++++++++++-------------
1 files changed, 73 insertions(+), 27 deletions(-)
diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c
index 9bac824..1c8b21c 100644
--- a/dlls/riched20/para.c
+++ b/dlls/riched20/para.c
@@ -351,22 +351,51 @@ void ME_SetParaFormat(ME_TextEditor *editor, ME_DisplayItem *para, const PARAFOR
CopyMemory(©, para->member.para.pFmt, sizeof(PARAFORMAT2));
- if (pFmt->dwMask & PFM_ALIGNMENT)
- para->member.para.pFmt->wAlignment = pFmt->wAlignment;
- if (pFmt->dwMask & PFM_STARTINDENT)
- para->member.para.pFmt->dxStartIndent = pFmt->dxStartIndent;
- if (pFmt->dwMask & PFM_OFFSET)
- para->member.para.pFmt->dxOffset = pFmt->dxOffset;
+#define COPY_FIELD(m, f) \
+ if (pFmt->dwMask & (m)) { \
+ para->member.para.pFmt->dwMask |= m; \
+ para->member.para.pFmt->f = pFmt->f; \
+ }
+
+ COPY_FIELD(PFM_NUMBERING, wNumbering);
+#define EFFECTS_MASK (PFM_RTLPARA|PFM_KEEP|PFM_KEEPNEXT|PFM_PAGEBREAKBEFORE| \
+ PFM_NOLINENUMBER|PFM_NOWIDOWCONTROL|PFM_DONOTHYPHEN|PFM_SIDEBYSIDE| \
+ PFM_TABLE)
+ /* we take for granted that PFE_xxx is the hiword of the corresponding PFM_xxx */
+ if (pFmt->dwMask & EFFECTS_MASK) {
+ para->member.para.pFmt->dwMask &= ~(pFmt->dwMask & EFFECTS_MASK);
+ para->member.para.pFmt->wEffects |= pFmt->wEffects & HIWORD(pFmt->dwMask);
+ }
+#undef EFFECTS_MASK
+
+ COPY_FIELD(PFM_STARTINDENT, dxStartIndent);
if (pFmt->dwMask & PFM_OFFSETINDENT)
para->member.para.pFmt->dxStartIndent += pFmt->dxStartIndent;
-
+ COPY_FIELD(PFM_RIGHTINDENT, dxRightIndent);
+ COPY_FIELD(PFM_OFFSET, dxOffset);
+ COPY_FIELD(PFM_ALIGNMENT, wAlignment);
+
if (pFmt->dwMask & PFM_TABSTOPS)
{
para->member.para.pFmt->cTabCount = pFmt->cTabCount;
- memcpy(para->member.para.pFmt->rgxTabs, pFmt->rgxTabs, pFmt->cTabCount*sizeof(int));
+ memcpy(para->member.para.pFmt->rgxTabs, pFmt->rgxTabs, pFmt->cTabCount*sizeof(LONG));
}
-
- /* FIXME to be continued (indents, bulleting and such) */
+ COPY_FIELD(PFM_SPACEBEFORE, dySpaceBefore);
+ COPY_FIELD(PFM_SPACEAFTER, dySpaceAfter);
+ COPY_FIELD(PFM_LINESPACING, dyLineSpacing);
+ COPY_FIELD(PFM_STYLE, sStyle);
+ COPY_FIELD(PFM_LINESPACING, bLineSpacingRule);
+ COPY_FIELD(PFM_SHADING, wShadingWeight);
+ COPY_FIELD(PFM_SHADING, wShadingStyle);
+ COPY_FIELD(PFM_NUMBERINGSTART, wNumberingStart);
+ COPY_FIELD(PFM_NUMBERINGSTYLE, wNumberingStyle);
+ COPY_FIELD(PFM_NUMBERINGTAB, wNumberingTab);
+ COPY_FIELD(PFM_BORDER, wBorderSpace);
+ COPY_FIELD(PFM_BORDER, wBorderWidth);
+ COPY_FIELD(PFM_BORDER, wBorders);
+
+ para->member.para.pFmt->dwMask |= pFmt->dwMask;
+#undef COPY_FIELD
if (memcmp(©, para->member.para.pFmt, sizeof(PARAFORMAT2)))
para->member.para.nFlags |= MEPF_REWRAP;
@@ -435,28 +464,45 @@ void ME_GetSelectionParaFormat(ME_TextEditor *editor, PARAFORMAT2 *pFmt)
ZeroMemory(&tmp, sizeof(tmp));
tmp.cbSize = sizeof(tmp);
ME_GetParaFormat(editor, para, &tmp);
-
- assert(tmp.dwMask & PFM_ALIGNMENT);
- if (pFmt->wAlignment != tmp.wAlignment)
- pFmt->dwMask &= ~PFM_ALIGNMENT;
-
+
+#define CHECK_FIELD(m, f) \
+ if (pFmt->f != tmp.f) pFmt->dwMask &= ~(m);
+
+ CHECK_FIELD(PFM_NUMBERING, wNumbering);
+ /* para->member.para.pFmt->wEffects = pFmt->wEffects; */
+ assert(tmp.dwMask & PFM_ALIGNMENT);
+ CHECK_FIELD(PFM_NUMBERING, wNumbering);
assert(tmp.dwMask & PFM_STARTINDENT);
- if (pFmt->dxStartIndent != tmp.dxStartIndent)
- pFmt->dwMask &= ~PFM_STARTINDENT;
-
+ CHECK_FIELD(PFM_STARTINDENT, dxStartIndent);
+ assert(tmp.dwMask & PFM_RIGHTINDENT);
+ CHECK_FIELD(PFM_RIGHTINDENT, dxRightIndent);
assert(tmp.dwMask & PFM_OFFSET);
- if (pFmt->dxOffset != tmp.dxOffset)
- pFmt->dwMask &= ~PFM_OFFSET;
-
- assert(tmp.dwMask & PFM_TABSTOPS);
+ CHECK_FIELD(PFM_OFFSET, dxOffset);
+ CHECK_FIELD(PFM_ALIGNMENT, wAlignment);
+
+ assert(tmp.dwMask & PFM_TABSTOPS);
if (pFmt->dwMask & PFM_TABSTOPS) {
- if (pFmt->cTabCount != tmp.cTabCount)
- pFmt->dwMask &= ~PFM_TABSTOPS;
- else
- if (memcmp(pFmt->rgxTabs, tmp.rgxTabs, tmp.cTabCount*sizeof(int)))
+ if (pFmt->cTabCount != tmp.cTabCount ||
+ memcmp(pFmt->rgxTabs, tmp.rgxTabs, tmp.cTabCount*sizeof(int)))
pFmt->dwMask &= ~PFM_TABSTOPS;
}
-
+
+ CHECK_FIELD(PFM_SPACEBEFORE, dySpaceBefore);
+ CHECK_FIELD(PFM_SPACEAFTER, dySpaceAfter);
+ CHECK_FIELD(PFM_LINESPACING, dyLineSpacing);
+ CHECK_FIELD(PFM_STYLE, sStyle);
+ CHECK_FIELD(PFM_SPACEAFTER, bLineSpacingRule);
+ CHECK_FIELD(PFM_SHADING, wShadingWeight);
+ CHECK_FIELD(PFM_SHADING, wShadingStyle);
+ CHECK_FIELD(PFM_NUMBERINGSTART, wNumberingStart);
+ CHECK_FIELD(PFM_NUMBERINGSTYLE, wNumberingStyle);
+ CHECK_FIELD(PFM_NUMBERINGTAB, wNumberingTab);
+ CHECK_FIELD(PFM_BORDER, wBorderSpace);
+ CHECK_FIELD(PFM_BORDER, wBorderWidth);
+ CHECK_FIELD(PFM_BORDER, wBorders);
+
+#undef CHECK_FIELD
+
if (para == para_end)
return;
para = para->member.para.next_para;
More information about the wine-cvs
mailing list