Module: wine Branch: master Commit: 176e4ba405a7537efc879adb66bb7c5894017998 URL: http://source.winehq.org/git/wine.git/?a=commit;h=176e4ba405a7537efc879adb66...
Author: Kirill K. Smirnov lich@math.spbu.ru Date: Mon Oct 20 17:10:10 2008 +0400
gdiplus: Whole picture object should be cloned in GdipCloneImage(), not just parent class 'image'.
---
dlls/gdiplus/image.c | 25 ++++--------------------- dlls/gdiplus/tests/image.c | 4 ++++ 2 files changed, 8 insertions(+), 21 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 0cb5ded..9dbefc0 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -254,6 +254,7 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) HRESULT hr; INT size; LARGE_INTEGER move; + GpStatus stat = GenericError;
TRACE("%p, %p\n", image, cloneImage);
@@ -264,15 +265,6 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) if (FAILED(hr)) return GenericError;
- *cloneImage = GdipAlloc(sizeof(GpImage)); - if (!*cloneImage) - { - IStream_Release(stream); - return OutOfMemory; - } - (*cloneImage)->type = image->type; - (*cloneImage)->flags = image->flags; - hr = IPicture_SaveAsFile(image->picture, stream, FALSE, &size); if(FAILED(hr)) { @@ -286,21 +278,12 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) if (FAILED(hr)) goto out;
- hr = OleLoadPicture(stream, size, FALSE, &IID_IPicture, - (LPVOID*) &(*cloneImage)->picture); - if (FAILED(hr)) - { - WARN("Failed to load image from stream\n"); - goto out; - } + stat = GdipLoadImageFromStream(stream, cloneImage); + if (stat != Ok) WARN("Failed to load image from stream\n");
- IStream_Release(stream); - return Ok; out: IStream_Release(stream); - GdipFree(*cloneImage); - *cloneImage = NULL; - return GenericError; + return stat; }
GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 5d8c535..4d93da4 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -514,6 +514,10 @@ static void test_GdipCloneImage(void) stat = GdipGetImageBounds(image_dest, &rectF, &unit); expect(Ok, stat);
+ /* Treat FP values carefully */ + ok(fabsf(rectF.Width-WIDTH)<1e-5, "Expected: %d, got %.05f\n", WIDTH, rectF.Width); + ok(fabsf(rectF.Height-HEIGHT)<1e-5, "Expected: %d, got %.05f\n", HEIGHT, rectF.Height); + stat = GdipDisposeImage(image_dest); expect(Ok, stat); }