Henri Verbeet : user32: Fix TEXT_WordBreak() when no characters fit.

Alexandre Julliard julliard at winehq.org
Tue Mar 11 14:45:41 CDT 2014


Module: wine
Branch: master
Commit: ec66785f02ff5fba9ec7a18a8697c19140059ae8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ec66785f02ff5fba9ec7a18a8697c19140059ae8

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Mar 11 18:41:43 2014 +0100

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 217baab..19bcd72 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 7bef476..fdc3554 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;




More information about the wine-cvs mailing list