[Gdiplus 4/4] Implement GdipCloneImage

Adam Petaccia adam at tpetaccia.com
Tue Jul 1 20:41:22 CDT 2008


---
 dlls/gdiplus/image.c       |   19 +++++++++++++++++--
 dlls/gdiplus/tests/image.c |    6 ------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index bf2ac35..59ea837 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -244,9 +244,24 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage)
 {
     if (!(image && cloneImage)) return InvalidParameter;
 
-    FIXME("stub: %p, %p", image, cloneImage);
+    TRACE("%p, %p", image, cloneImage);
 
-    return NotImplemented;
+    *cloneImage = GdipAlloc(sizeof(GpImage));
+    if (!*cloneImage)
+        return OutOfMemory;
+
+    memcpy(*cloneImage, image, sizeof(GpImage));
+
+    (*cloneImage)->picture = GdipAlloc(sizeof(IPicture));
+    if (!(*cloneImage)->picture)
+    {
+        GdipFree(*cloneImage);
+        return OutOfMemory;
+    }
+
+    memcpy((*cloneImage)->picture, image->picture, sizeof(IPicture));
+
+    return Ok;
 }
 
 GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename,
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index 38a58b9..1c7c3ab 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -490,22 +490,16 @@ static void test_GdipCloneImage(void)
     /* Create an image, clone it, delete the original, make sure the copy works */
     stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
     expect(Ok, stat);
-todo_wine
-{
     image_src = ((GpImage*)bm);
     stat = GdipCloneImage(image_src, &image_dest);
     expect(Ok, stat);
-}
     stat = GdipDisposeImage((GpImage*)bm);
     expect(Ok, stat);
-todo_wine
-{
     stat = GdipGetImageBounds(image_dest, &rectF, &unit);
     expect(Ok, stat);
     stat = GdipDisposeImage(image_dest);
     expect(Ok, stat);
 }
-}
 
 START_TEST(image)
 {
-- 
1.5.4.3




More information about the wine-patches mailing list