Krzysztof Foltman : riched20: WM_SETFONT support.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 17 07:00:13 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: d17591fdf918568201ce52221c178df7ef114eb3
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d17591fdf918568201ce52221c178df7ef114eb3
Author: Krzysztof Foltman <wdev at 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)
{
More information about the wine-cvs
mailing list