Huw Davies : riched20: Handle EM_SETBKGNDCOLOR in the host.
Alexandre Julliard
julliard at winehq.org
Thu Mar 18 16:43:53 CDT 2021
Module: wine
Branch: master
Commit: b927bc8d99e658d5c0d0af943010f38e984baab6
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b927bc8d99e658d5c0d0af943010f38e984baab6
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Mar 18 08:30:06 2021 +0000
riched20: Handle EM_SETBKGNDCOLOR in the host.
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/riched20/editor.c | 26 --------------------------
dlls/riched20/editstr.h | 2 --
dlls/riched20/txthost.c | 26 ++++++++++++++++++++++----
3 files changed, 22 insertions(+), 32 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 13a04a003f4..3073294bd7b 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -3005,8 +3005,6 @@ ME_TextEditor *ME_MakeEditor(ITextHost *texthost, BOOL bEmulateVersion10)
ed->nLastTotalLength = ed->nTotalLength = 0;
ed->nLastTotalWidth = ed->nTotalWidth = 0;
ed->nUDArrowX = -1;
- ed->rgbBackColor = -1;
- ed->hbrBackground = GetSysColorBrush(COLOR_WINDOW);
ed->nEventMask = 0;
ed->nModifyStep = 0;
ed->nTextLimit = TEXT_LIMIT_DEFAULT;
@@ -3100,8 +3098,6 @@ void ME_DestroyEditor(ME_TextEditor *editor)
if (editor->pFontCache[i].hFont)
DeleteObject(editor->pFontCache[i].hFont);
}
- if (editor->rgbBackColor != -1)
- DeleteObject(editor->hbrBackground);
if(editor->lpOleCallback)
IRichEditOleCallback_Release(editor->lpOleCallback);
if (editor->reOle)
@@ -3516,28 +3512,6 @@ LRESULT editor_handle_message( ME_TextEditor *editor, UINT msg, WPARAM wParam,
}
case EM_SELECTIONTYPE:
return ME_GetSelectionType(editor);
- case EM_SETBKGNDCOLOR:
- {
- LRESULT lColor;
- if (editor->rgbBackColor != -1) {
- DeleteObject(editor->hbrBackground);
- lColor = editor->rgbBackColor;
- }
- else lColor = ITextHost_TxGetSysColor(editor->texthost, COLOR_WINDOW);
-
- if (wParam)
- {
- editor->rgbBackColor = -1;
- editor->hbrBackground = GetSysColorBrush(COLOR_WINDOW);
- }
- else
- {
- editor->rgbBackColor = lParam;
- editor->hbrBackground = CreateSolidBrush(editor->rgbBackColor);
- }
- ITextHost_TxInvalidateRect(editor->texthost, NULL, TRUE);
- return lColor;
- }
case EM_GETMODIFY:
return editor->nModifyStep == 0 ? 0 : -1;
case EM_SETMODIFY:
diff --git a/dlls/riched20/editstr.h b/dlls/riched20/editstr.h
index 1f277cbf6bc..0273fde4350 100644
--- a/dlls/riched20/editstr.h
+++ b/dlls/riched20/editstr.h
@@ -392,8 +392,6 @@ typedef struct tagME_TextEditor
int nAvailWidth; /* 0 = wrap to client area, else wrap width in twips */
int nUDArrowX;
int total_rows;
- COLORREF rgbBackColor;
- HBRUSH hbrBackground;
int nEventMask;
int nModifyStep;
struct list undo_stack;
diff --git a/dlls/riched20/txthost.c b/dlls/riched20/txthost.c
index c80263bbd69..ebccddf65e3 100644
--- a/dlls/riched20/txthost.c
+++ b/dlls/riched20/txthost.c
@@ -45,9 +45,11 @@ struct host
unsigned int sel_bar : 1;
unsigned int client_edge : 1;
unsigned int use_set_rect : 1;
+ unsigned int use_back_colour : 1;
PARAFORMAT2 para_fmt;
DWORD props, scrollbars, event_mask;
RECT client_rect, set_rect;
+ COLORREF back_colour;
};
static const ITextHostVtbl textHostVtbl;
@@ -111,6 +113,7 @@ struct host *host_create( HWND hwnd, CREATESTRUCTW *cs, BOOL emulate_10 )
texthost->use_set_rect = 0;
SetRectEmpty( &texthost->set_rect );
GetClientRect( hwnd, &texthost->client_rect );
+ texthost->use_back_colour = 0;
return texthost;
}
@@ -346,6 +349,9 @@ DECLSPEC_HIDDEN HRESULT __thiscall ITextHostImpl_TxGetParaFormat( ITextHost *ifa
DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSysColor,8)
DECLSPEC_HIDDEN COLORREF __thiscall ITextHostImpl_TxGetSysColor( ITextHost *iface, int index )
{
+ struct host *host = impl_from_ITextHost( iface );
+
+ if (index == COLOR_WINDOW && host->use_back_colour) return host->back_colour;
return GetSysColor( index );
}
@@ -992,9 +998,14 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
{
HDC hdc = (HDC)wparam;
RECT rc;
+ HBRUSH brush;
if (GetUpdateRect( editor->hWnd, &rc, TRUE ))
- FillRect( hdc, &rc, editor->hbrBackground );
+ {
+ brush = CreateSolidBrush( ITextHost_TxGetSysColor( &host->ITextHost_iface, COLOR_WINDOW ) );
+ FillRect( hdc, &rc, brush );
+ DeleteObject( brush );
+ }
return 1;
}
case EM_FINDTEXT:
@@ -1127,13 +1138,13 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
HDC hdc;
RECT rc;
PAINTSTRUCT ps;
- HBRUSH old_brush;
+ HBRUSH brush = CreateSolidBrush( ITextHost_TxGetSysColor( &host->ITextHost_iface, COLOR_WINDOW ) );
update_caret( editor );
hdc = BeginPaint( editor->hWnd, &ps );
if (!editor->bEmulateVersion10 || (editor->nEventMask & ENM_UPDATE))
ME_SendOldNotify( editor, EN_UPDATE );
- old_brush = SelectObject( hdc, editor->hbrBackground );
+ brush = SelectObject( hdc, brush );
/* Erase area outside of the formatting rectangle */
if (ps.rcPaint.top < editor->rcFormat.top)
@@ -1166,7 +1177,7 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
}
ME_PaintContent( editor, hdc, &ps.rcPaint );
- SelectObject( hdc, old_brush );
+ DeleteObject( SelectObject( hdc, brush ) );
EndPaint( editor->hWnd, &ps );
return 0;
}
@@ -1181,6 +1192,13 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
res = len;
break;
}
+ case EM_SETBKGNDCOLOR:
+ res = ITextHost_TxGetSysColor( &host->ITextHost_iface, COLOR_WINDOW );
+ host->use_back_colour = !wparam;
+ if (host->use_back_colour) host->back_colour = lparam;
+ InvalidateRect( hwnd, NULL, TRUE );
+ break;
+
case EM_SETEVENTMASK:
host->event_mask = lparam;
hr = ITextServices_TxSendMessage( host->text_srv, msg, wparam, lparam, &res );
More information about the wine-cvs
mailing list