Vincent Povirk : gdiplus: Rewrite GdipCreateMatrix3.

Alexandre Julliard julliard at winehq.org
Mon Jan 17 10:59:44 CST 2011


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Sun Jan 16 10:59:50 2011 -0600

gdiplus: Rewrite GdipCreateMatrix3.

---

 dlls/gdiplus/matrix.c       |   16 ++++++++--------
 dlls/gdiplus/tests/matrix.c |   36 ++++++++++++++++++------------------
 2 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/dlls/gdiplus/matrix.c b/dlls/gdiplus/matrix.c
index a6724d3..3798bd2 100644
--- a/dlls/gdiplus/matrix.c
+++ b/dlls/gdiplus/matrix.c
@@ -85,20 +85,20 @@ GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22,
 GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *rect,
     GDIPCONST GpPointF *pt, GpMatrix **matrix)
 {
+    REAL m11, m12, m21, m22, dx, dy;
     TRACE("(%p, %p, %p)\n", rect, pt, matrix);
 
     if(!matrix || !pt)
         return InvalidParameter;
 
-    *matrix = GdipAlloc(sizeof(GpMatrix));
-    if(!*matrix)    return OutOfMemory;
-
-    memcpy((*matrix)->matrix, rect, 4 * sizeof(REAL));
+    m11 = (pt[1].X - pt[0].X) / rect->Width;
+    m21 = (pt[2].X - pt[0].X) / rect->Height;
+    dx = pt[0].X - m11 * rect->X - m21 * rect->Y;
+    m12 = (pt[1].Y - pt[0].Y) / rect->Width;
+    m22 = (pt[2].Y - pt[0].Y) / rect->Height;
+    dy = pt[0].Y - m12 * rect->X - m22 * rect->Y;
 
-    (*matrix)->matrix[4] = pt->X;
-    (*matrix)->matrix[5] = pt->Y;
-
-    return Ok;
+    return GdipCreateMatrix2(m11, m12, m21, m22, dx, dy, matrix);
 }
 
 GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect *rect, GDIPCONST GpPoint *pt,
diff --git a/dlls/gdiplus/tests/matrix.c b/dlls/gdiplus/tests/matrix.c
index b9992c3..cf8f158 100644
--- a/dlls/gdiplus/tests/matrix.c
+++ b/dlls/gdiplus/tests/matrix.c
@@ -249,12 +249,12 @@ static void test_constructor3(void)
     stat = GdipGetMatrixElements(matrix, values);
     expect(Ok, stat);
 
-    todo_wine expectf(1.0, values[0]);
-    todo_wine expectf(0.0, values[1]);
-    todo_wine expectf(0.0, values[2]);
-    todo_wine expectf(1.0, values[3]);
-    todo_wine expectf(0.0, values[4]);
-    todo_wine expectf(0.0, values[5]);
+    expectf(1.0, values[0]);
+    expectf(0.0, values[1]);
+    expectf(0.0, values[2]);
+    expectf(1.0, values[3]);
+    expectf(0.0, values[4]);
+    expectf(0.0, values[5]);
 
     GdipDeleteMatrix(matrix);
 
@@ -271,12 +271,12 @@ static void test_constructor3(void)
     stat = GdipGetMatrixElements(matrix, values);
     expect(Ok, stat);
 
-    todo_wine expectf(2.0, values[0]);
-    todo_wine expectf(0.0, values[1]);
-    todo_wine expectf(0.0, values[2]);
-    todo_wine expectf(1.0, values[3]);
-    todo_wine expectf(0.0, values[4]);
-    todo_wine expectf(0.0, values[5]);
+    expectf(2.0, values[0]);
+    expectf(0.0, values[1]);
+    expectf(0.0, values[2]);
+    expectf(1.0, values[3]);
+    expectf(0.0, values[4]);
+    expectf(0.0, values[5]);
 
     GdipDeleteMatrix(matrix);
 
@@ -293,12 +293,12 @@ static void test_constructor3(void)
     stat = GdipGetMatrixElements(matrix, values);
     expect(Ok, stat);
 
-    todo_wine expectf(1.0, values[0]);
-    todo_wine expectf(1.0, values[1]);
-    todo_wine expectf(0.0, values[2]);
-    todo_wine expectf(1.0, values[3]);
-    todo_wine expectf(0.0, values[4]);
-    todo_wine expectf(0.0, values[5]);
+    expectf(1.0, values[0]);
+    expectf(1.0, values[1]);
+    expectf(0.0, values[2]);
+    expectf(1.0, values[3]);
+    expectf(0.0, values[4]);
+    expectf(0.0, values[5]);
 
     GdipDeleteMatrix(matrix);}
 




More information about the wine-cvs mailing list