Module: wine Branch: refs/heads/master Commit: d17591fdf918568201ce52221c178df7ef114eb3 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d17591fdf918568201ce5222...
Author: Krzysztof Foltman wdev@foltman.com Date: Fri Jul 14 19:43:00 2006 +0200
riched20: WM_SETFONT support.
---
dlls/riched20/editor.c | 26 +++++++++++++++++++++++--- dlls/riched20/editor.h | 1 + dlls/riched20/style.c | 19 +++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index 9a2b966..eaab0f7 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -92,7 +92,7 @@ - EM_SELECTIONTYPE - EM_SETBIDIOPTIONS 3.0 + EM_SETBKGNDCOLOR - - EM_SETCHARFORMAT (partly done, no ANSI) + + EM_SETCHARFORMAT (partly done, no ANSI) - EM_SETEDITSTYLE + EM_SETEVENTMASK (few notifications supported) - EM_SETFONTSIZE @@ -135,7 +135,7 @@ + WM_GETTEXT (ANSI&Unicode) + WM_GETTEXTLENGTH (ANSI version sucks) + WM_PASTE - - WM_SETFONT + + WM_SETFONT + WM_SETTEXT (resets undo stack !) (proper style?) ANSI&Unicode - WM_STYLECHANGING - WM_STYLECHANGED (things like read-only flag) @@ -1434,7 +1434,6 @@ LRESULT WINAPI RichEditANSIWndProc(HWND UNSUPPORTED_MSG(EM_SETTYPOGRAPHYOPTIONS) UNSUPPORTED_MSG(EM_SETWORDBREAKPROCEX) UNSUPPORTED_MSG(EM_SHOWSCROLLBAR) - UNSUPPORTED_MSG(WM_SETFONT) UNSUPPORTED_MSG(WM_STYLECHANGING) UNSUPPORTED_MSG(WM_STYLECHANGED) /* UNSUPPORTED_MSG(WM_UNICHAR) FIXME missing in Wine headers */ @@ -1836,6 +1835,27 @@ LRESULT WINAPI RichEditANSIWndProc(HWND
return 0; } + case WM_SETFONT: + { + LOGFONTW lf; + CHARFORMAT2W fmt; + HDC hDC; + BOOL bRepaint = LOWORD(lParam); + + if (!wParam) + wParam = (WPARAM)GetStockObject(DEFAULT_GUI_FONT); + GetObjectW((HGDIOBJ)wParam, sizeof(LOGFONTW), &lf); + hDC = GetDC(hWnd); + ME_CharFormatFromLogFont(hDC, &lf, &fmt); + ReleaseDC(hWnd, hDC); + ME_SetCharFormat(editor, 0, ME_GetTextLength(editor), &fmt); + ME_SetDefaultCharFormat(editor, &fmt); + + ME_CommitUndo(editor); + if (bRepaint) + ME_UpdateRepaint(editor); + return 0; + } case WM_SETTEXT: { ME_InternalDeleteText(editor, 0, ME_GetTextLength(editor)); diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h index 33b7626..a4d4980 100644 --- a/dlls/riched20/editor.h +++ b/dlls/riched20/editor.h @@ -55,6 +55,7 @@ void ME_CopyToCF2W(CHARFORMAT2W *to, CHA CHARFORMAT2W *ME_ToCFAny(CHARFORMAT2W *to, CHARFORMAT2W *from); void ME_CopyToCFAny(CHARFORMAT2W *to, CHARFORMAT2W *from); void ME_CopyCharFormat(CHARFORMAT2W *pDest, CHARFORMAT2W *pSrc); /* only works with 2W structs */ +void ME_CharFormatFromLogFont(HDC hDC, LOGFONTW *lf, CHARFORMAT2W *fmt); /* ditto */
/* list.c */ void ME_InsertBefore(ME_DisplayItem *diWhere, ME_DisplayItem *diWhat); diff --git a/dlls/riched20/style.c b/dlls/riched20/style.c index f420f09..6104a0c 100644 --- a/dlls/riched20/style.c +++ b/dlls/riched20/style.c @@ -286,6 +286,25 @@ ME_LogFontFromStyle(HDC hDC, LOGFONTW *l lf->lfCharSet = s->fmt.bCharSet; }
+void ME_CharFormatFromLogFont(HDC hDC, LOGFONTW *lf, CHARFORMAT2W *fmt) +{ + int rx, ry; + + ME_InitCharFormat2W(fmt); + rx = GetDeviceCaps(hDC, LOGPIXELSX); + ry = GetDeviceCaps(hDC, LOGPIXELSY); + lstrcpyW(fmt->szFaceName, lf->lfFaceName); + fmt->dwEffects = 0; + fmt->dwMask = CFM_WEIGHT|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_STRIKEOUT|CFM_SIZE|CFM_FACE|CFM_CHARSET; + fmt->wWeight = lf->lfWeight; + fmt->yHeight = -lf->lfHeight*1440/ry; + if (lf->lfWeight>400) fmt->dwEffects |= CFM_BOLD; + if (lf->lfItalic) fmt->dwEffects |= CFM_ITALIC; + if (lf->lfUnderline) fmt->dwEffects |= CFM_UNDERLINE; + if (lf->lfStrikeOut) fmt->dwEffects |= CFM_STRIKEOUT; + fmt->bPitchAndFamily = lf->lfPitchAndFamily; + fmt->bCharSet = lf->lfCharSet; +}
BOOL ME_IsFontEqual(LOGFONTW *p1, LOGFONTW *p2) {