From b927bc8d99e658d5c0d0af943010f38e984baab6 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Thu, 18 Mar 2021 08:30:06 +0000 Subject: [PATCH] riched20: Handle EM_SETBKGNDCOLOR in the host. Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- 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 );