[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