Eric Pouech : richedit: Extend the usage of underlinetype from charformat2 in richedit.
Alexandre Julliard
julliard at winehq.org
Wed Jan 2 07:34:50 CST 2008
Module: wine
Branch: master
Commit: 6b591ef23aadaf8981eb1a782b9f1e37024b5a66
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6b591ef23aadaf8981eb1a782b9f1e37024b5a66
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Tue Jan 1 22:03:58 2008 +0100
richedit: Extend the usage of underlinetype from charformat2 in richedit.
---
dlls/riched20/editor.c | 24 ++++++++++++++++++------
dlls/riched20/para.c | 4 ++--
dlls/riched20/run.c | 6 ++++--
dlls/riched20/style.c | 37 +++++++++++++++++++++++++++++++++++++
4 files changed, 61 insertions(+), 10 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 12fa18c..1589173 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -332,10 +332,11 @@ static void ME_RTFCharAttrHook(RTF_Info *info)
{
case rtfPlain:
/* FIXME add more flags once they're implemented */
- fmt.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_STRIKEOUT | CFM_COLOR | CFM_BACKCOLOR | CFM_SIZE | CFM_WEIGHT;
+ fmt.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINETYPE | CFM_STRIKEOUT | CFM_COLOR | CFM_BACKCOLOR | CFM_SIZE | CFM_WEIGHT;
fmt.dwEffects = CFE_AUTOCOLOR | CFE_AUTOBACKCOLOR;
fmt.yHeight = 12*20; /* 12pt */
fmt.wWeight = 400;
+ fmt.bUnderlineType = CFU_UNDERLINENONE;
break;
case rtfBold:
fmt.dwMask = CFM_BOLD;
@@ -346,13 +347,24 @@ static void ME_RTFCharAttrHook(RTF_Info *info)
fmt.dwEffects = info->rtfParam ? fmt.dwMask : 0;
break;
case rtfUnderline:
- fmt.dwMask = CFM_UNDERLINE;
- fmt.dwEffects = info->rtfParam ? fmt.dwMask : 0;
- fmt.bUnderlineType = CFU_CF1UNDERLINE;
+ fmt.dwMask = CFM_UNDERLINETYPE;
+ fmt.bUnderlineType = info->rtfParam ? CFU_CF1UNDERLINE : CFU_UNDERLINENONE;
+ break;
+ case rtfDotUnderline:
+ fmt.dwMask = CFM_UNDERLINETYPE;
+ fmt.bUnderlineType = info->rtfParam ? CFU_UNDERLINEDOTTED : CFU_UNDERLINENONE;
+ break;
+ case rtfDbUnderline:
+ fmt.dwMask = CFM_UNDERLINETYPE;
+ fmt.bUnderlineType = info->rtfParam ? CFU_UNDERLINEDOUBLE : CFU_UNDERLINENONE;
+ break;
+ case rtfWordUnderline:
+ fmt.dwMask = CFM_UNDERLINETYPE;
+ fmt.bUnderlineType = info->rtfParam ? CFU_UNDERLINEWORD : CFU_UNDERLINENONE;
break;
case rtfNoUnderline:
- fmt.dwMask = CFM_UNDERLINE;
- fmt.dwEffects = 0;
+ fmt.dwMask = CFM_UNDERLINETYPE;
+ fmt.bUnderlineType = CFU_UNDERLINENONE;
break;
case rtfStrikeThru:
fmt.dwMask = CFM_STRIKEOUT;
diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c
index 8a373ec..5f93653 100644
--- a/dlls/riched20/para.c
+++ b/dlls/riched20/para.c
@@ -44,7 +44,7 @@ void ME_MakeFirstParagraph(HDC hDC, ME_TextBuffer *text)
cf.dwMask |= CFM_ALLCAPS|CFM_BOLD|CFM_DISABLED|CFM_EMBOSS|CFM_HIDDEN;
cf.dwMask |= CFM_IMPRINT|CFM_ITALIC|CFM_LINK|CFM_OUTLINE|CFM_PROTECTED;
cf.dwMask |= CFM_REVISED|CFM_SHADOW|CFM_SMALLCAPS|CFM_STRIKEOUT;
- cf.dwMask |= CFM_SUBSCRIPT|CFM_UNDERLINE|CFM_WEIGHT;
+ cf.dwMask |= CFM_SUBSCRIPT|CFM_UNDERLINETYPE|CFM_WEIGHT;
cf.dwEffects = CFE_AUTOCOLOR | CFE_AUTOBACKCOLOR;
lstrcpyW(cf.szFaceName, lf.lfFaceName);
@@ -53,7 +53,7 @@ void ME_MakeFirstParagraph(HDC hDC, ME_TextBuffer *text)
cf.dwEffects |= CFE_BOLD;
cf.wWeight = lf.lfWeight;
if (lf.lfItalic) cf.dwEffects |= CFE_ITALIC;
- if (lf.lfUnderline) cf.dwEffects |= CFE_UNDERLINE;
+ cf.bUnderlineType = (lf.lfUnderline) ? CFU_CF1UNDERLINE : CFU_UNDERLINENONE;
if (lf.lfStrikeOut) cf.dwEffects |= CFE_STRIKEOUT;
cf.bPitchAndFamily = lf.lfPitchAndFamily;
cf.bCharSet = lf.lfCharSet;
diff --git a/dlls/riched20/run.c b/dlls/riched20/run.c
index 1630653..71354fe 100644
--- a/dlls/riched20/run.c
+++ b/dlls/riched20/run.c
@@ -938,8 +938,8 @@ void ME_GetCharFormat(ME_TextEditor *editor, int nFrom, int nTo, CHARFORMAT2W *p
do {
/* FIXME add more style feature comparisons */
- int nAttribs = CFM_SIZE | CFM_FACE | CFM_COLOR;
- int nEffects = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE;
+ int nAttribs = CFM_SIZE | CFM_FACE | CFM_COLOR | CFM_UNDERLINETYPE;
+ int nEffects = CFM_BOLD | CFM_ITALIC;
run = ME_FindItemFwd(run, diRun);
@@ -962,6 +962,8 @@ void ME_GetCharFormat(ME_TextEditor *editor, int nFrom, int nTo, CHARFORMAT2W *p
}
if (pFmt->yHeight != tmp.yHeight)
pFmt->dwMask &= ~CFM_SIZE;
+ if (pFmt->bUnderlineType != tmp.bUnderlineType)
+ pFmt->dwMask &= ~CFM_UNDERLINETYPE;
if (pFmt->dwMask & CFM_COLOR)
{
if (!((pFmt->dwEffects&CFE_AUTOCOLOR) & (tmp.dwEffects&CFE_AUTOCOLOR)))
diff --git a/dlls/riched20/style.c b/dlls/riched20/style.c
index 1113f73..fbf8a30 100644
--- a/dlls/riched20/style.c
+++ b/dlls/riched20/style.c
@@ -85,6 +85,20 @@ CHARFORMAT2W *ME_ToCFAny(CHARFORMAT2W *to, CHARFORMAT2W *from)
CHARFORMATA *t = (CHARFORMATA *)to;
CopyMemory(t, from, FIELD_OFFSET(CHARFORMATA, szFaceName));
WideCharToMultiByte(0, 0, from->szFaceName, -1, t->szFaceName, sizeof(t->szFaceName), 0, 0);
+ if (from->dwMask & CFM_UNDERLINETYPE)
+ {
+ switch (from->bUnderlineType)
+ {
+ case CFU_CF1UNDERLINE:
+ to->dwMask |= CFM_UNDERLINE;
+ to->dwEffects |= CFE_UNDERLINE;
+ break;
+ case CFU_UNDERLINENONE:
+ to->dwMask |= CFM_UNDERLINE;
+ to->dwEffects &= ~CFE_UNDERLINE;
+ break;
+ }
+ }
t->cbSize = sizeof(*t); /* it was overwritten by CopyMemory */
return to;
}
@@ -92,6 +106,20 @@ CHARFORMAT2W *ME_ToCFAny(CHARFORMAT2W *to, CHARFORMAT2W *from)
{
CHARFORMATW *t = (CHARFORMATW *)to;
CopyMemory(t, from, sizeof(*t));
+ if (from->dwMask & CFM_UNDERLINETYPE)
+ {
+ switch (from->bUnderlineType)
+ {
+ case CFU_CF1UNDERLINE:
+ to->dwMask |= CFM_UNDERLINE;
+ to->dwEffects |= CFE_UNDERLINE;
+ break;
+ case CFU_UNDERLINENONE:
+ to->dwMask |= CFM_UNDERLINE;
+ to->dwEffects &= ~CFE_UNDERLINE;
+ break;
+ }
+ }
t->cbSize = sizeof(*t); /* it was overwritten by CopyMemory */
return to;
}
@@ -187,6 +215,13 @@ ME_Style *ME_ApplyStyle(ME_Style *sSrc, CHARFORMAT2W *style)
else
s->fmt.dwEffects &= ~CFE_AUTOCOLOR;
}
+ if (style->dwMask & CFM_UNDERLINE)
+ {
+ s->fmt.dwMask |= CFM_UNDERLINETYPE;
+ s->fmt.dwMask &= ~CFM_UNDERLINE;
+ s->fmt.bUnderlineType = (style->dwEffects & CFM_UNDERLINE) ?
+ CFU_CF1UNDERLINE : CFU_UNDERLINENONE;
+ }
return s;
}
@@ -286,6 +321,8 @@ ME_LogFontFromStyle(HDC hDC, LOGFONTW *lf, const ME_Style *s, int nZoomNumerator
lf->lfItalic = 1;
if (s->fmt.dwEffects & s->fmt.dwMask & (CFM_UNDERLINE | CFE_LINK))
lf->lfUnderline = 1;
+ if (s->fmt.dwMask & CFM_UNDERLINETYPE && s->fmt.bUnderlineType == CFU_CF1UNDERLINE)
+ lf->lfUnderline = 1;
if (s->fmt.dwEffects & s->fmt.dwMask & CFM_STRIKEOUT)
lf->lfStrikeOut = 1;
if (s->fmt.dwEffects & s->fmt.dwMask & (CFM_SUBSCRIPT|CFM_SUPERSCRIPT))
More information about the wine-cvs
mailing list