mirror of
https://github.com/reactos/wine.git
synced 2025-02-16 02:50:29 +00:00
riched20: Implement EM_SETFONTSIZE.
This commit is contained in:
parent
836f06f6f9
commit
d62dd46516
@ -96,7 +96,7 @@
|
||||
+ EM_SETCHARFORMAT (partly done, no ANSI)
|
||||
- EM_SETEDITSTYLE
|
||||
+ EM_SETEVENTMASK (few notifications supported)
|
||||
- EM_SETFONTSIZE
|
||||
+ EM_SETFONTSIZE
|
||||
- EM_SETIMECOLOR 1.0asian
|
||||
- EM_SETIMEOPTIONS 1.0asian
|
||||
- EM_SETIMESTATUS
|
||||
@ -3265,7 +3265,6 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
|
||||
UNSUPPORTED_MSG(EM_SELECTIONTYPE)
|
||||
UNSUPPORTED_MSG(EM_SETBIDIOPTIONS)
|
||||
UNSUPPORTED_MSG(EM_SETEDITSTYLE)
|
||||
UNSUPPORTED_MSG(EM_SETFONTSIZE)
|
||||
UNSUPPORTED_MSG(EM_SETLANGOPTIONS)
|
||||
UNSUPPORTED_MSG(EM_SETMARGINS)
|
||||
UNSUPPORTED_MSG(EM_SETPALETTE)
|
||||
@ -3341,6 +3340,48 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
|
||||
|
||||
return settings;
|
||||
}
|
||||
case EM_SETFONTSIZE:
|
||||
{
|
||||
CHARFORMAT2W cf;
|
||||
LONG tmp_size, size;
|
||||
BOOL is_increase = ((LONG)wParam > 0);
|
||||
|
||||
if (editor->mode & TM_PLAINTEXT)
|
||||
return FALSE;
|
||||
|
||||
cf.cbSize = sizeof(cf);
|
||||
cf.dwMask = CFM_SIZE;
|
||||
ME_GetSelectionCharFormat(editor, &cf);
|
||||
tmp_size = (cf.yHeight / 20) + wParam;
|
||||
|
||||
if (tmp_size <= 1)
|
||||
size = 1;
|
||||
else if (tmp_size > 12 && tmp_size < 28 && tmp_size % 2)
|
||||
size = tmp_size + (is_increase ? 1 : -1);
|
||||
else if (tmp_size > 28 && tmp_size < 36)
|
||||
size = is_increase ? 36 : 28;
|
||||
else if (tmp_size > 36 && tmp_size < 48)
|
||||
size = is_increase ? 48 : 36;
|
||||
else if (tmp_size > 48 && tmp_size < 72)
|
||||
size = is_increase ? 72 : 48;
|
||||
else if (tmp_size > 72 && tmp_size < 80)
|
||||
size = is_increase ? 80 : 72;
|
||||
else if (tmp_size > 80 && tmp_size < 1638)
|
||||
size = 10 * (is_increase ? (tmp_size / 10 + 1) : (tmp_size / 10));
|
||||
else if (tmp_size >= 1638)
|
||||
size = 1638;
|
||||
else
|
||||
size = tmp_size;
|
||||
|
||||
cf.yHeight = size * 20; /* convert twips to points */
|
||||
ME_SetSelectionCharFormat(editor, &cf);
|
||||
ME_CommitUndo(editor);
|
||||
ME_WrapMarkedParagraphs(editor);
|
||||
ME_UpdateScrollBar(editor);
|
||||
ME_Repaint(editor);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
case EM_SETOPTIONS:
|
||||
{
|
||||
/* these flags are equivalent to ES_* counterparts, except for
|
||||
|
@ -7857,6 +7857,100 @@ static void test_EM_SETREADONLY(void)
|
||||
DestroyWindow(richedit);
|
||||
}
|
||||
|
||||
static inline LONG twips2points(LONG value)
|
||||
{
|
||||
return value / 20;
|
||||
}
|
||||
|
||||
#define TEST_EM_SETFONTSIZE(hwnd,size,expected_size,expected_res,expected_undo) \
|
||||
_test_font_size(__LINE__,hwnd,size,expected_size,expected_res,expected_undo)
|
||||
static void _test_font_size(unsigned line, HWND hwnd, LONG size, LONG expected_size,
|
||||
LRESULT expected_res, BOOL expected_undo)
|
||||
{
|
||||
CHARFORMAT2A cf;
|
||||
LRESULT res;
|
||||
BOOL isundo;
|
||||
|
||||
cf.cbSize = sizeof(cf);
|
||||
cf.dwMask = CFM_SIZE;
|
||||
|
||||
res = SendMessageA(hwnd, EM_SETFONTSIZE, size, 0);
|
||||
SendMessageA(hwnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
|
||||
isundo = SendMessageA(hwnd, EM_CANUNDO, 0, 0);
|
||||
ok_(__FILE__,line)(res == expected_res, "EM_SETFONTSIZE unexpected return value: %lx.\n", res);
|
||||
ok_(__FILE__,line)(twips2points(cf.yHeight) == expected_size, "got wrong font size: %d, expected: %d\n",
|
||||
twips2points(cf.yHeight), expected_size);
|
||||
ok_(__FILE__,line)(isundo == expected_undo, "get wrong undo mark: %d, expected: %d.\n",
|
||||
isundo, expected_undo);
|
||||
}
|
||||
|
||||
static void test_EM_SETFONTSIZE(void)
|
||||
{
|
||||
HWND richedit = new_richedit(NULL);
|
||||
CHAR text[] = "wine";
|
||||
CHARFORMAT2A tmp_cf;
|
||||
LONG default_size;
|
||||
|
||||
tmp_cf.cbSize = sizeof(tmp_cf);
|
||||
tmp_cf.dwMask = CFM_SIZE;
|
||||
tmp_cf.yHeight = 9 * 20.0;
|
||||
SendMessageA(richedit, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&tmp_cf);
|
||||
|
||||
SendMessageA(richedit, WM_SETTEXT, 0, (LPARAM)text);
|
||||
|
||||
SendMessageA(richedit, EM_SETMODIFY, FALSE, 0);
|
||||
/* without selection */
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 10, TRUE, FALSE); /* 9 + 1 -> 10 */
|
||||
SendMessageA(richedit, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM)&tmp_cf);
|
||||
default_size = twips2points(tmp_cf.yHeight);
|
||||
ok(default_size == 9, "Default font size should not be changed.\n");
|
||||
ok(SendMessageA(richedit, EM_SETMODIFY, 0, 0) == FALSE, "Modify flag should not be changed.\n");
|
||||
|
||||
SendMessageA(richedit, EM_SETSEL, 0, 2);
|
||||
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 9, TRUE, TRUE); /* 9 + 0 -> 9 */
|
||||
|
||||
SendMessageA(richedit, EM_SETMODIFY, FALSE, 0);
|
||||
TEST_EM_SETFONTSIZE(richedit, 3, 12, TRUE, TRUE); /* 9 + 3 -> 12 */
|
||||
ok(SendMessageA(richedit, EM_SETMODIFY, 0, 0) == FALSE, "Modify flag should not be changed.\n");
|
||||
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 14, TRUE, TRUE); /* 12 + 1 + 1 -> 14 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -1, 12, TRUE, TRUE); /* 14 - 1 - 1 -> 12 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 4, 16, TRUE, TRUE); /* 12 + 4 -> 16 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 3, 20, TRUE, TRUE); /* 16 + 3 + 1 -> 20 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 20, TRUE, TRUE); /* 20 + 0 -> 20 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 8, 28, TRUE, TRUE); /* 20 + 8 -> 28 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 28, TRUE, TRUE); /* 28 + 0 -> 28 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 36, TRUE, TRUE); /* 28 + 1 -> 36 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 36, TRUE, TRUE); /* 36 + 0 -> 36 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 48, TRUE, TRUE); /* 36 + 1 -> 48 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 48, TRUE, TRUE); /* 48 + 0 -> 48 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 72, TRUE, TRUE); /* 48 + 1 -> 72 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 72, TRUE, TRUE); /* 72 + 0 -> 72 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 80, TRUE, TRUE); /* 72 + 1 -> 80 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 80, TRUE, TRUE); /* 80 + 0 -> 80 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 90, TRUE, TRUE); /* 80 + 1 -> 90 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 90, TRUE, TRUE); /* 90 + 0 -> 90 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 1, 100, TRUE, TRUE); /* 90 + 1 -> 100 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 25, 130, TRUE, TRUE); /* 100 + 25 -> 130 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -1, 120, TRUE, TRUE); /* 130 - 1 -> 120 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -35, 80, TRUE, TRUE); /* 120 - 35 -> 80 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -7, 72, TRUE, TRUE); /* 80 - 7 -> 72 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -42, 28, TRUE, TRUE); /* 72 - 42 -> 28 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -16, 12, TRUE, TRUE); /* 28 - 16 -> 12 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -3, 9, TRUE, TRUE); /* 12 - 3 -> 9 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -8, 1, TRUE, TRUE); /* 9 - 8 -> 1 */
|
||||
TEST_EM_SETFONTSIZE(richedit, -111, 1, TRUE, TRUE); /* 1 - 111 -> 1 */
|
||||
TEST_EM_SETFONTSIZE(richedit, 10086, 1638, TRUE, TRUE); /* 1 + 10086 -> 1638 */
|
||||
|
||||
/* return FALSE when richedit is TM_PLAINTEXT mode */
|
||||
SendMessageA(richedit, WM_SETTEXT, 0, (LPARAM)"");
|
||||
SendMessageA(richedit, EM_SETTEXTMODE, (WPARAM)TM_PLAINTEXT, 0);
|
||||
TEST_EM_SETFONTSIZE(richedit, 0, 9, FALSE, FALSE);
|
||||
|
||||
DestroyWindow(richedit);
|
||||
}
|
||||
|
||||
START_TEST( editor )
|
||||
{
|
||||
BOOL ret;
|
||||
@ -7922,6 +8016,7 @@ START_TEST( editor )
|
||||
test_WM_CREATE();
|
||||
test_reset_default_para_fmt();
|
||||
test_EM_SETREADONLY();
|
||||
test_EM_SETFONTSIZE();
|
||||
|
||||
/* Set the environment variable WINETEST_RICHED20 to keep windows
|
||||
* responsive and open for 30 seconds. This is useful for debugging.
|
||||
|
Loading…
x
Reference in New Issue
Block a user