From ec66785f02ff5fba9ec7a18a8697c19140059ae8 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 11 Mar 2014 18:41:43 +0100 Subject: [PATCH] user32: Fix TEXT_WordBreak() when no characters fit. --- dlls/user32/tests/text.c | 16 ++++++++++++++++ dlls/user32/text.c | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/dlls/user32/tests/text.c b/dlls/user32/tests/text.c index 217baab89b1..19bcd72abbe 100644 --- a/dlls/user32/tests/text.c +++ b/dlls/user32/tests/text.c @@ -42,6 +42,8 @@ static void test_DrawTextCalcRect(void) 's','t','r','i','n','g','\0'}; static CHAR emptystring[] = ""; static WCHAR emptystringW[] = { 0 }; + static CHAR wordbreak_text[] = "line1 line2"; + static WCHAR wordbreak_textW[] = {'l','i','n','e','1',' ','l','i','n','e','2',0}; INT textlen, textheight, heightcheck; RECT rect = { 0, 0, 100, 0 }; BOOL ret; @@ -556,6 +558,20 @@ static void test_DrawTextCalcRect(void) ok(rect.bottom, "rect.bottom should not be 0\n"); } + SetRect(&rect, 0, 0, 1, 1); + heightcheck = DrawTextA(hdc, wordbreak_text, -1, &rect, DT_CALCRECT); + SetRect(&rect, 0, 0, 1, 1); + textheight = DrawTextA(hdc, wordbreak_text, -1, &rect, DT_CALCRECT | DT_WORDBREAK); + ok(textheight == heightcheck * 2, "Got unexpected textheight %d, expected %d.\n", + textheight, heightcheck * 2); + + SetRect(&rect, 0, 0, 1, 1); + heightcheck = DrawTextW(hdc, wordbreak_textW, -1, &rect, DT_CALCRECT); + SetRect(&rect, 0, 0, 1, 1); + textheight = DrawTextW(hdc, wordbreak_textW, -1, &rect, DT_CALCRECT | DT_WORDBREAK); + ok(textheight == heightcheck * 2, "Got unexpected textheight %d, expected %d.\n", + textheight, heightcheck * 2); + SelectObject(hdc, hOldFont); ret = DeleteObject(hFont); ok( ret, "DeleteObject error %u\n", GetLastError()); diff --git a/dlls/user32/text.c b/dlls/user32/text.c index 7bef4761c0f..fdc35540e61 100644 --- a/dlls/user32/text.c +++ b/dlls/user32/text.c @@ -379,7 +379,7 @@ static void TEXT_WordBreak (HDC hdc, WCHAR *str, unsigned int max_str, i = chars_fit; word_fits = TRUE; if (!chars_fit) - ; /* we pretend that it fits anyway */ + word_fits = FALSE; else if (sla[i].fSoftBreak) /* chars_fit < *len_str so this is valid */ { /* the word just fitted */ @@ -392,7 +392,7 @@ static void TEXT_WordBreak (HDC hdc, WCHAR *str, unsigned int max_str, word_fits = (i != 0 || sla[i+1].fSoftBreak ); } - /* If there was one or the first character didn't fit then */ + /* If there was one. */ if (word_fits) { BOOL next_is_space; -- 2.11.4.GIT