Evan Stade : gdiplus: Added GdipGetImageGraphicsContext.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 10 07:31:15 CDT 2007


Module: wine
Branch: master
Commit: 94a19d1f759b76de7d2127978a09e844b6026cde
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=94a19d1f759b76de7d2127978a09e844b6026cde

Author: Evan Stade <estade at gmail.com>
Date:   Thu Aug  9 18:25:01 2007 -0700

gdiplus: Added GdipGetImageGraphicsContext.

---

 dlls/gdiplus/gdiplus.spec |    2 +-
 dlls/gdiplus/image.c      |   27 +++++++++++++++++++++++++++
 include/gdiplusflat.h     |    1 +
 3 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 50d2f6b..b09ca8e 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -287,7 +287,7 @@
 @ stub GdipGetImageEncoders
 @ stub GdipGetImageEncodersSize
 @ stub GdipGetImageFlags
-@ stub GdipGetImageGraphicsContext
+@ stdcall GdipGetImageGraphicsContext(ptr ptr)
 @ stdcall GdipGetImageHeight(ptr ptr)
 @ stdcall GdipGetImageHorizontalResolution(ptr ptr)
 @ stub GdipGetImageItemData
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index d813678..d779907 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -384,9 +384,13 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream* stream,
 
 GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
 {
+    HDC hdc;
+
     if(!image)
         return InvalidParameter;
 
+    IPicture_get_CurDC(image->picture, &hdc);
+    DeleteDC(hdc);
     IPicture_Release(image->picture);
     GdipFree(image);
 
@@ -429,6 +433,29 @@ GpStatus WINGDIPAPI GdipGetImageBounds(GpImage *image, GpRectF *srcRect,
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage *image,
+    GpGraphics **graphics)
+{
+    HDC hdc;
+
+    if(!image || !graphics)
+        return InvalidParameter;
+
+    if(image->type != ImageTypeBitmap){
+        FIXME("not implemented for image type %d\n", image->type);
+        return NotImplemented;
+    }
+
+    IPicture_get_CurDC(image->picture, &hdc);
+
+    if(!hdc){
+        hdc = CreateCompatibleDC(0);
+        IPicture_SelectPicture(image->picture, hdc, NULL, NULL);
+    }
+
+    return GdipCreateFromHDC(hdc, graphics);
+}
+
 GpStatus WINGDIPAPI GdipGetImageHeight(GpImage *image, UINT *height)
 {
     if(!image || !height)
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 33d0e33..b190492 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -192,6 +192,7 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**);
 GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**);
 GpStatus WINGDIPAPI GdipDisposeImage(GpImage*);
 GpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**);
 GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);
 GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);
 GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*);




More information about the wine-cvs mailing list