Commit 24426858 authored by Fabian Maurer's avatar Fabian Maurer Committed by Alexandre Julliard

user32/edit: In EM_POSFROMCHAR return correct position for empty lines.

parent 34b980e6
...@@ -1097,12 +1097,8 @@ static LRESULT EDIT_EM_PosFromChar(EDITSTATE *es, INT index, BOOL after_wrap) ...@@ -1097,12 +1097,8 @@ static LRESULT EDIT_EM_PosFromChar(EDITSTATE *es, INT index, BOOL after_wrap)
lw = line_def->width; lw = line_def->width;
w = es->format_rect.right - es->format_rect.left; w = es->format_rect.right - es->format_rect.left;
if (line_def->ssa) if (line_def->ssa)
{
ScriptStringCPtoX(line_def->ssa, (index - 1) - li, TRUE, &x); ScriptStringCPtoX(line_def->ssa, (index - 1) - li, TRUE, &x);
x -= es->x_offset; x -= es->x_offset;
}
else
x = es->x_offset;
if (es->style & ES_RIGHT) if (es->style & ES_RIGHT)
x = w - (lw - x); x = w - (lw - x);
......
...@@ -1136,12 +1136,14 @@ static void test_edit_control_3(void) ...@@ -1136,12 +1136,14 @@ static void test_edit_control_3(void)
/* Test EM_CHARFROMPOS and EM_POSFROMCHAR /* Test EM_CHARFROMPOS and EM_POSFROMCHAR
*/ */
static void test_edit_control_4(void) static void test_char_from_pos(void)
{ {
HWND hwEdit; HWND hwEdit;
int lo, hi, mid; int lo, hi, mid;
int ret; int ret;
int i; int i;
HDC dc;
SIZE size;
trace("EDIT: Test EM_CHARFROMPOS and EM_POSFROMCHAR\n"); trace("EDIT: Test EM_CHARFROMPOS and EM_POSFROMCHAR\n");
hwEdit = create_editcontrol(ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0); hwEdit = create_editcontrol(ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0);
...@@ -1251,6 +1253,24 @@ static void test_edit_control_4(void) ...@@ -1251,6 +1253,24 @@ static void test_edit_control_4(void)
ret = SendMessageA(hwEdit, EM_POSFROMCHAR, 2, 0); ret = SendMessageA(hwEdit, EM_POSFROMCHAR, 2, 0);
ok(-1 == ret, "expected -1 got %d\n", ret); ok(-1 == ret, "expected -1 got %d\n", ret);
DestroyWindow(hwEdit); DestroyWindow(hwEdit);
/* Scrolled to the right with partially visible line, position on next line. */
hwEdit = create_editcontrol(ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0);
dc = GetDC(hwEdit);
GetTextExtentPoint32A(dc, "w", 1, &size);
ReleaseDC(hwEdit, dc);
SetWindowPos(hwEdit, NULL, 0, 0, size.cx * 15, size.cy * 5, SWP_NOMOVE | SWP_NOZORDER);
SendMessageA(hwEdit, WM_SETTEXT, 0, (LPARAM)"wwwwwwwwwwwwwwwwwwww\r\n\r\n");
SendMessageA(hwEdit, EM_SETSEL, 40, 40);
lo = (short)SendMessageA(hwEdit, EM_POSFROMCHAR, 22, 0);
ret = (short)SendMessageA(hwEdit, EM_POSFROMCHAR, 20, 0);
ret -= 20 * size.cx; /* Calculate expected position, 20 characters back. */
ok(ret == lo, "Unexpected position %d vs %d.\n", lo, ret);
DestroyWindow(hwEdit);
} }
/* Test if creating edit control without ES_AUTOHSCROLL and ES_AUTOVSCROLL /* Test if creating edit control without ES_AUTOHSCROLL and ES_AUTOVSCROLL
...@@ -3243,7 +3263,7 @@ START_TEST(edit) ...@@ -3243,7 +3263,7 @@ START_TEST(edit)
test_edit_control_1(); test_edit_control_1();
test_edit_control_2(); test_edit_control_2();
test_edit_control_3(); test_edit_control_3();
test_edit_control_4(); test_char_from_pos();
test_edit_control_5(); test_edit_control_5();
test_edit_control_6(); test_edit_control_6();
test_edit_control_limittext(); test_edit_control_limittext();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment