v4 resend: Riched20: allow setting background text color.
Signed-off-by: Kenneth Haley <haleykd@users.sf.net> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
910fc594d9
commit
fc1b2e0473
|
@ -489,7 +489,7 @@ void ME_RTFCharAttrHook(RTF_Info *info)
|
||||||
{
|
{
|
||||||
RTFColor *c = RTFGetColor(info, info->rtfParam);
|
RTFColor *c = RTFGetColor(info, info->rtfParam);
|
||||||
if (c && c->rtfCBlue >= 0)
|
if (c && c->rtfCBlue >= 0)
|
||||||
fmt.crTextColor = (c->rtfCBlue<<16)|(c->rtfCGreen<<8)|(c->rtfCRed);
|
fmt.crBackColor = (c->rtfCBlue<<16)|(c->rtfCGreen<<8)|(c->rtfCRed);
|
||||||
else
|
else
|
||||||
fmt.dwEffects = CFE_AUTOBACKCOLOR;
|
fmt.dwEffects = CFE_AUTOBACKCOLOR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,6 +201,21 @@ static COLORREF get_text_color( ME_Context *c, ME_Style *style, BOOL highlight )
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static COLORREF get_back_color( ME_Context *c, ME_Style *style, BOOL highlight )
|
||||||
|
{
|
||||||
|
COLORREF color;
|
||||||
|
|
||||||
|
if (highlight)
|
||||||
|
color = ITextHost_TxGetSysColor( c->editor->texthost, COLOR_HIGHLIGHT );
|
||||||
|
else if ( (style->fmt.dwMask & CFM_BACKCOLOR)
|
||||||
|
&& !(style->fmt.dwEffects & CFE_AUTOBACKCOLOR) )
|
||||||
|
color = style->fmt.crBackColor;
|
||||||
|
else
|
||||||
|
color = ITextHost_TxGetSysColor( c->editor->texthost, COLOR_WINDOW );
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
static void get_underline_pen( ME_Style *style, COLORREF color, HPEN *pen )
|
static void get_underline_pen( ME_Style *style, COLORREF color, HPEN *pen )
|
||||||
{
|
{
|
||||||
*pen = NULL;
|
*pen = NULL;
|
||||||
|
@ -314,14 +329,17 @@ static void get_selection_rect( ME_Context *c, ME_Run *run, int from, int to, in
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void draw_text( ME_Context *c, ME_Run *run, int x, int y, BOOL selected, RECT *sel_rect )
|
static void draw_text( ME_Context *c, ME_Run *run, int x, int y, BOOL selected, RECT *sel_rect )
|
||||||
{
|
{
|
||||||
COLORREF text_color = get_text_color( c, run->style, selected );
|
COLORREF text_color = get_text_color( c, run->style, selected );
|
||||||
COLORREF back_color = selected ? ITextHost_TxGetSysColor( c->editor->texthost, COLOR_HIGHLIGHT ) : 0;
|
COLORREF back_color = get_back_color( c, run->style, selected );
|
||||||
COLORREF old_text, old_back = 0;
|
COLORREF old_text, old_back = 0;
|
||||||
const WCHAR *text = get_text( run, 0 );
|
const WCHAR *text = get_text( run, 0 );
|
||||||
ME_String *masked = NULL;
|
ME_String *masked = NULL;
|
||||||
|
const BOOL paint_bg = ( selected
|
||||||
|
|| ( ( run->style->fmt.dwMask & CFM_BACKCOLOR )
|
||||||
|
&& !(CFE_AUTOBACKCOLOR & run->style->fmt.dwEffects) )
|
||||||
|
);
|
||||||
|
|
||||||
if (c->editor->cPasswordMask)
|
if (c->editor->cPasswordMask)
|
||||||
{
|
{
|
||||||
|
@ -330,16 +348,16 @@ static void draw_text( ME_Context *c, ME_Run *run, int x, int y, BOOL selected,
|
||||||
}
|
}
|
||||||
|
|
||||||
old_text = SetTextColor( c->hDC, text_color );
|
old_text = SetTextColor( c->hDC, text_color );
|
||||||
if (selected) old_back = SetBkColor( c->hDC, back_color );
|
if (paint_bg) old_back = SetBkColor( c->hDC, back_color );
|
||||||
|
|
||||||
if (run->para->nFlags & MEPF_COMPLEX)
|
if (run->para->nFlags & MEPF_COMPLEX)
|
||||||
ScriptTextOut( c->hDC, &run->style->script_cache, x, y, selected ? ETO_OPAQUE : 0, sel_rect,
|
ScriptTextOut( c->hDC, &run->style->script_cache, x, y, paint_bg ? ETO_OPAQUE : 0, sel_rect,
|
||||||
&run->script_analysis, NULL, 0, run->glyphs, run->num_glyphs, run->advances,
|
&run->script_analysis, NULL, 0, run->glyphs, run->num_glyphs, run->advances,
|
||||||
NULL, run->offsets );
|
NULL, run->offsets );
|
||||||
else
|
else
|
||||||
ExtTextOutW( c->hDC, x, y, selected ? ETO_OPAQUE : 0, sel_rect, text, run->len, NULL );
|
ExtTextOutW( c->hDC, x, y, paint_bg ? ETO_OPAQUE : 0, sel_rect, text, run->len, NULL );
|
||||||
|
|
||||||
if (selected) SetBkColor( c->hDC, old_back );
|
if (paint_bg) SetBkColor( c->hDC, old_back );
|
||||||
SetTextColor( c->hDC, old_text );
|
SetTextColor( c->hDC, old_text );
|
||||||
|
|
||||||
draw_underline( c, run, x, y, text_color );
|
draw_underline( c, run, x, y, text_color );
|
||||||
|
@ -389,7 +407,18 @@ static void ME_DrawTextWithStyle(ME_Context *c, ME_Run *run, int x, int y,
|
||||||
hOldFont = ME_SelectStyleFont( c, run->style );
|
hOldFont = ME_SelectStyleFont( c, run->style );
|
||||||
|
|
||||||
if (sel_rgn) ExtSelectClipRgn( hDC, sel_rgn, RGN_DIFF );
|
if (sel_rgn) ExtSelectClipRgn( hDC, sel_rgn, RGN_DIFF );
|
||||||
draw_text( c, run, x, y - yOffset, FALSE, NULL );
|
|
||||||
|
if (!(run->style->fmt.dwEffects & CFE_AUTOBACKCOLOR)
|
||||||
|
&& (run->style->fmt.dwMask & CFM_BACKCOLOR) )
|
||||||
|
{
|
||||||
|
RECT tmp_rect;
|
||||||
|
get_selection_rect( c, run, 0, run->len, cy, &tmp_rect );
|
||||||
|
OffsetRect( &tmp_rect, x, ymin );
|
||||||
|
draw_text( c, run, x, y - yOffset, FALSE, &tmp_rect );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
draw_text( c, run, x, y - yOffset, FALSE, NULL );
|
||||||
|
|
||||||
if (sel_rgn)
|
if (sel_rgn)
|
||||||
{
|
{
|
||||||
ExtSelectClipRgn( hDC, clip, RGN_COPY );
|
ExtSelectClipRgn( hDC, clip, RGN_COPY );
|
||||||
|
|
Loading…
Reference in New Issue