diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 37d7dfffe51..0b570271614 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -105,7 +105,7 @@ @ stub GdipCreateLineBrushFromRectWithAngleI @ stub GdipCreateLineBrushI @ stdcall GdipCreateMatrix2(long long long long long long ptr) -@ stub GdipCreateMatrix3 +@ stdcall GdipCreateMatrix3(ptr ptr ptr) @ stub GdipCreateMatrix3I @ stdcall GdipCreateMatrix(ptr) @ stdcall GdipCreateMetafileFromEmf(ptr long ptr) diff --git a/dlls/gdiplus/matrix.c b/dlls/gdiplus/matrix.c index 3f96e4f9f08..1c4738e15f8 100644 --- a/dlls/gdiplus/matrix.c +++ b/dlls/gdiplus/matrix.c @@ -70,6 +70,23 @@ GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, return Ok; } +GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *rect, + GDIPCONST GpPointF *pt, GpMatrix **matrix) +{ + if(!matrix) + return InvalidParameter; + + *matrix = GdipAlloc(sizeof(GpMatrix)); + if(!*matrix) return OutOfMemory; + + memcpy((*matrix)->matrix, rect, 4 * sizeof(REAL)); + + (*matrix)->matrix[4] = pt->X; + (*matrix)->matrix[5] = pt->Y; + + return Ok; +} + GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix *matrix, GpMatrix **clone) { if(!matrix || !clone) diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 214055062f2..4906160831e 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -114,6 +114,8 @@ GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*); GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**); +GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*, + GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**); GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*); GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*);