[2/10] gdiplus: fixed 2 GdipDrawString bugs

Evan Stade estade at gmail.com
Wed Aug 15 18:21:56 CDT 2007


Hi,

changelog:
* fix calculation text length
* don't force line wrap (if line doesn't go out of bounds don't search
for where to wrap it)

 dlls/gdiplus/graphics.c |   34 ++++++++++++++++++----------------
 1 files changed, 18 insertions(+), 16 deletions(-)

-- 
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index c8a732d..19f89a0 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -1355,8 +1355,8 @@ GpStatus WINGDIPAPI GdipDrawString(GpGra
     length = j;
 
     while(sum < length){
-        GetTextExtentExPointW(graphics->hdc, stringdup, length, nwidth,
-                              &fit, NULL, &size);
+        GetTextExtentExPointW(graphics->hdc, stringdup + sum, length - sum,
+                              nwidth, &fit, NULL, &size);
         fitcpy = fit;
 
         if(fit == 0){
@@ -1374,21 +1374,23 @@ GpStatus WINGDIPAPI GdipDrawString(GpGra
         /* Line break code (may look strange, but it imitates windows). */
         if(lret < fit)
             fit = lret;    /* this is not an off-by-one error */
-        else if(*(stringdup + sum + fit) == ' ')
-            while(*(stringdup + sum + fit) == ' ')
-                fit++;
-        else
-            while(*(stringdup + sum + fit - 1) != ' '){
-                fit--;
-
-                if(*(stringdup + sum + fit) == '\t')
-                    break;
-
-                if(fit == 0){
-                    fit = fitcpy;
-                    break;
+        else if(fit < (length - sum)){
+            if(*(stringdup + sum + fit) == ' ')
+                while(*(stringdup + sum + fit) == ' ')
+                    fit++;
+            else
+                while(*(stringdup + sum + fit - 1) != ' '){
+                    fit--;
+
+                    if(*(stringdup + sum + fit) == '\t')
+                        break;
+
+                    if(fit == 0){
+                        fit = fitcpy;
+                        break;
+                    }
                 }
-            }
+        }
 
         TabbedTextOutW(graphics->hdc,
                        corners[0].x - roundr(ang_sin * (REAL) height),
-- 
1.4.1


More information about the wine-patches mailing list