Evan Stade : gdiplus: Added GdipSetWorldTransform/GdipGetWorldTransform.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 25 07:44:19 CDT 2007


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

Author: Evan Stade <estade at gmail.com>
Date:   Tue Jul 24 17:18:47 2007 -0700

gdiplus: Added GdipSetWorldTransform/GdipGetWorldTransform.

---

 dlls/gdiplus/gdiplus.spec      |    4 ++--
 dlls/gdiplus/gdiplus_private.h |    1 +
 dlls/gdiplus/graphics.c        |   26 ++++++++++++++++++++++++++
 include/gdiplusflat.h          |    2 ++
 4 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index f13a72f..49732db 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -386,7 +386,7 @@
 @ stub GdipGetTextureWrapMode
 @ stub GdipGetVisibleClipBounds
 @ stub GdipGetVisibleClipBoundsI
-@ stub GdipGetWorldTransform
+@ stdcall GdipGetWorldTransform(ptr ptr)
 @ stub GdipGraphicsClear
 @ stub GdipImageForceValidation
 @ stub GdipImageGetFrameCount
@@ -576,7 +576,7 @@
 @ stub GdipSetTextRenderingHint
 @ stub GdipSetTextureTransform
 @ stub GdipSetTextureWrapMode
-@ stub GdipSetWorldTransform
+@ stdcall GdipSetWorldTransform(ptr ptr)
 @ stub GdipShearMatrix
 @ stdcall GdipStartPathFigure(ptr)
 @ stub GdipStringFormatGetGenericDefault
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 2e7fc2c..f8e79f0 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -67,6 +67,7 @@ struct GpGraphics{
     PixelOffsetMode pixeloffset;
     GpUnit unit;    /* page unit */
     REAL scale;     /* page scale */
+    GpMatrix * worldtrans; /* world transform */
 };
 
 struct GpBrush{
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 3ed99ca..9daf092 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -734,6 +734,8 @@ end:
 
 GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
 {
+    GpStatus retval;
+
     if(hdc == NULL)
         return OutOfMemory;
 
@@ -743,6 +745,11 @@ GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
     *graphics = GdipAlloc(sizeof(GpGraphics));
     if(!*graphics)  return OutOfMemory;
 
+    if((retval = GdipCreateMatrix(&(*graphics)->worldtrans)) != Ok){
+        GdipFree(*graphics);
+        return retval;
+    }
+
     (*graphics)->hdc = hdc;
     (*graphics)->hwnd = NULL;
     (*graphics)->smoothing = SmoothingModeDefault;
@@ -773,6 +780,7 @@ GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
     if(graphics->hwnd)
         ReleaseDC(graphics->hwnd, graphics->hdc);
 
+    GdipDeleteMatrix(graphics->worldtrans);
     HeapFree(GetProcessHeap(), 0, graphics);
 
     return Ok;
@@ -1133,6 +1141,15 @@ GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics *graphics, SmoothingMode *mo
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics *graphics, GpMatrix *matrix)
+{
+    if(!graphics || !matrix)
+        return InvalidParameter;
+
+    memcpy(matrix, graphics->worldtrans, sizeof(GpMatrix));
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics *graphics, GraphicsState state)
 {
     if(!graphics)
@@ -1215,3 +1232,12 @@ GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics *graphics, SmoothingMode mod
 
     return Ok;
 }
+
+GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics *graphics, GpMatrix *matrix)
+{
+    if(!graphics || !matrix)
+        return InvalidParameter;
+
+    GdipDeleteMatrix(graphics->worldtrans);
+    return GdipCloneMatrix(matrix, &graphics->worldtrans);
+}
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 94693eb..1143195 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -66,6 +66,7 @@ GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*);
 GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*);
 GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*);
 GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*);
+GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*);
 GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState);
 GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
 GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality);
@@ -74,6 +75,7 @@ GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);
 GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);
 GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);
 GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
+GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*);
 
 GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);
 GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);




More information about the wine-cvs mailing list