From 9fb88c79994c8d5a1561ca446139bbf99386e68e Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Mon, 4 Mar 2013 17:52:24 +0900 Subject: [PATCH] gdiplus: GdipDrawString should not clip the string if StringFormatFlagsNoClip is specified. --- dlls/gdiplus/graphics.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 806cfa908f3..a450dedb454 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -4907,7 +4907,7 @@ GpStatus WINGDIPAPI GdipDrawString(GpGraphics *graphics, GDIPCONST WCHAR *string GpPointF pt[3], rectcpy[4]; POINT corners[4]; REAL rel_width, rel_height, margin_x; - INT save_state; + INT save_state, format_flags = 0; REAL offsety = 0.0; struct draw_string_args args; RectF scaled_rect; @@ -4932,6 +4932,8 @@ GpStatus WINGDIPAPI GdipDrawString(GpGraphics *graphics, GDIPCONST WCHAR *string if(format){ TRACE("may be ignoring some format flags: attr %x\n", format->attr); + format_flags = format->attr; + /* Should be no need to explicitly test for StringAlignmentNear as * that is default behavior if no alignment is passed. */ if(format->vertalign != StringAlignmentNear){ @@ -4985,7 +4987,8 @@ GpStatus WINGDIPAPI GdipDrawString(GpGraphics *graphics, GDIPCONST WCHAR *string if (scaled_rect.Width >= 1 << 23 || scaled_rect.Width < 0.5) scaled_rect.Width = 1 << 23; if (scaled_rect.Height >= 1 << 23 || scaled_rect.Height < 0.5) scaled_rect.Height = 1 << 23; - if (scaled_rect.Width != 1 << 23 && scaled_rect.Height != 1 << 23) + if (!(format_flags & StringFormatFlagsNoClip) && + scaled_rect.Width != 1 << 23 && scaled_rect.Height != 1 << 23) { /* FIXME: If only the width or only the height is 0, we should probably still clip */ rgn = CreatePolygonRgn(corners, 4, ALTERNATE);