gdiplus: Rewrite GdipCreateMatrix3.
Vincent Povirk
madewokherd at gmail.com
Sun Jan 16 11:05:05 CST 2011
-------------- next part --------------
From f3a6381728e885fd2d98ab07ff163a6e43c2d3d7 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Sun, 16 Jan 2011 10:59:50 -0600
Subject: [PATCH] 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);}
--
1.7.2.3
More information about the wine-patches
mailing list