gdiplus: Rewrite GdipCreateMatrix3.
This commit is contained in:
parent
9fd1e23602
commit
d7379712e7
|
@ -85,20 +85,20 @@ GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22,
|
||||||
GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *rect,
|
GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *rect,
|
||||||
GDIPCONST GpPointF *pt, GpMatrix **matrix)
|
GDIPCONST GpPointF *pt, GpMatrix **matrix)
|
||||||
{
|
{
|
||||||
|
REAL m11, m12, m21, m22, dx, dy;
|
||||||
TRACE("(%p, %p, %p)\n", rect, pt, matrix);
|
TRACE("(%p, %p, %p)\n", rect, pt, matrix);
|
||||||
|
|
||||||
if(!matrix || !pt)
|
if(!matrix || !pt)
|
||||||
return InvalidParameter;
|
return InvalidParameter;
|
||||||
|
|
||||||
*matrix = GdipAlloc(sizeof(GpMatrix));
|
m11 = (pt[1].X - pt[0].X) / rect->Width;
|
||||||
if(!*matrix) return OutOfMemory;
|
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;
|
||||||
|
|
||||||
memcpy((*matrix)->matrix, rect, 4 * sizeof(REAL));
|
return GdipCreateMatrix2(m11, m12, m21, m22, dx, dy, matrix);
|
||||||
|
|
||||||
(*matrix)->matrix[4] = pt->X;
|
|
||||||
(*matrix)->matrix[5] = pt->Y;
|
|
||||||
|
|
||||||
return Ok;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect *rect, GDIPCONST GpPoint *pt,
|
GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect *rect, GDIPCONST GpPoint *pt,
|
||||||
|
|
|
@ -249,12 +249,12 @@ static void test_constructor3(void)
|
||||||
stat = GdipGetMatrixElements(matrix, values);
|
stat = GdipGetMatrixElements(matrix, values);
|
||||||
expect(Ok, stat);
|
expect(Ok, stat);
|
||||||
|
|
||||||
todo_wine expectf(1.0, values[0]);
|
expectf(1.0, values[0]);
|
||||||
todo_wine expectf(0.0, values[1]);
|
expectf(0.0, values[1]);
|
||||||
todo_wine expectf(0.0, values[2]);
|
expectf(0.0, values[2]);
|
||||||
todo_wine expectf(1.0, values[3]);
|
expectf(1.0, values[3]);
|
||||||
todo_wine expectf(0.0, values[4]);
|
expectf(0.0, values[4]);
|
||||||
todo_wine expectf(0.0, values[5]);
|
expectf(0.0, values[5]);
|
||||||
|
|
||||||
GdipDeleteMatrix(matrix);
|
GdipDeleteMatrix(matrix);
|
||||||
|
|
||||||
|
@ -271,12 +271,12 @@ static void test_constructor3(void)
|
||||||
stat = GdipGetMatrixElements(matrix, values);
|
stat = GdipGetMatrixElements(matrix, values);
|
||||||
expect(Ok, stat);
|
expect(Ok, stat);
|
||||||
|
|
||||||
todo_wine expectf(2.0, values[0]);
|
expectf(2.0, values[0]);
|
||||||
todo_wine expectf(0.0, values[1]);
|
expectf(0.0, values[1]);
|
||||||
todo_wine expectf(0.0, values[2]);
|
expectf(0.0, values[2]);
|
||||||
todo_wine expectf(1.0, values[3]);
|
expectf(1.0, values[3]);
|
||||||
todo_wine expectf(0.0, values[4]);
|
expectf(0.0, values[4]);
|
||||||
todo_wine expectf(0.0, values[5]);
|
expectf(0.0, values[5]);
|
||||||
|
|
||||||
GdipDeleteMatrix(matrix);
|
GdipDeleteMatrix(matrix);
|
||||||
|
|
||||||
|
@ -293,12 +293,12 @@ static void test_constructor3(void)
|
||||||
stat = GdipGetMatrixElements(matrix, values);
|
stat = GdipGetMatrixElements(matrix, values);
|
||||||
expect(Ok, stat);
|
expect(Ok, stat);
|
||||||
|
|
||||||
todo_wine expectf(1.0, values[0]);
|
expectf(1.0, values[0]);
|
||||||
todo_wine expectf(1.0, values[1]);
|
expectf(1.0, values[1]);
|
||||||
todo_wine expectf(0.0, values[2]);
|
expectf(0.0, values[2]);
|
||||||
todo_wine expectf(1.0, values[3]);
|
expectf(1.0, values[3]);
|
||||||
todo_wine expectf(0.0, values[4]);
|
expectf(0.0, values[4]);
|
||||||
todo_wine expectf(0.0, values[5]);
|
expectf(0.0, values[5]);
|
||||||
|
|
||||||
GdipDeleteMatrix(matrix);}
|
GdipDeleteMatrix(matrix);}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue