https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f48a01324c82341a3bc798...
commit f48a01324c82341a3bc79815fc3e3bf5f7b81275 Author: Katayama Hirofumi MZ katayama.hirofumi.mz@gmail.com AuthorDate: Wed Jan 1 16:48:52 2020 +0900 Commit: GitHub noreply@github.com CommitDate: Wed Jan 1 16:48:52 2020 +0900
[SDK][INCLUDE] Improve gdiplusmatrix.h (#2220)
CORE-16585 --- sdk/include/psdk/gdiplusmatrix.h | 62 ++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 19 deletions(-)
diff --git a/sdk/include/psdk/gdiplusmatrix.h b/sdk/include/psdk/gdiplusmatrix.h index 124b070a9e4..f959dc9d07a 100644 --- a/sdk/include/psdk/gdiplusmatrix.h +++ b/sdk/include/psdk/gdiplusmatrix.h @@ -50,7 +50,7 @@ class Matrix : public GdiplusBase }
Matrix * - Clone() + Clone() const { GpMatrix *cloneMatrix = NULL; SetStatus(DllExports::GdipCloneMatrix(nativeMatrix, &cloneMatrix)); @@ -58,7 +58,11 @@ class Matrix : public GdiplusBase if (lastStatus != Ok) return NULL;
- return new Matrix(cloneMatrix); + Matrix *newMatrix = new Matrix(cloneMatrix); + if (!newMatrix) + DllExports::GdipDeleteMatrix(cloneMatrix); + + return newMatrix; }
~Matrix() @@ -67,7 +71,7 @@ class Matrix : public GdiplusBase }
BOOL - Equals(const Matrix *matrix) + Equals(const Matrix *matrix) const { BOOL result; SetStatus(DllExports::GdipIsMatrixEqual(nativeMatrix, matrix ? getNat(matrix) : NULL, &result)); @@ -93,7 +97,7 @@ class Matrix : public GdiplusBase }
BOOL - IsIdentity() + IsIdentity() const { BOOL result; SetStatus(DllExports::GdipIsMatrixIdentity(nativeMatrix, &result)); @@ -101,7 +105,7 @@ class Matrix : public GdiplusBase }
BOOL - IsInvertible() + IsInvertible() const { BOOL result; SetStatus(DllExports::GdipIsMatrixInvertible(nativeMatrix, &result)); @@ -109,40 +113,60 @@ class Matrix : public GdiplusBase }
Status - Multiply(const Matrix *matrix, MatrixOrder order) + Multiply(const Matrix *matrix, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipMultiplyMatrix(nativeMatrix, matrix ? getNat(matrix) : NULL, order)); }
- REAL OffsetX(VOID) + REAL + OffsetX() const { - return 0; + REAL elements[6]; + if (GetElements(elements) == Ok) + return elements[4]; + return 0.0f; }
- REAL OffsetY(VOID) + REAL + OffsetY() const { - return 0; + REAL elements[6]; + if (GetElements(elements) == Ok) + return elements[5]; + return 0.0f; }
- Status Reset(VOID) + Status + Reset() { - return NotImplemented; + return SetStatus(DllExports::GdipSetMatrixElements(nativeMatrix, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0)); }
Status - Rotate(REAL angle, MatrixOrder order) + Rotate(REAL angle, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); }
Status - RotateAt(REAL angle, const PointF ¢er, MatrixOrder order) - { - return NotImplemented; + RotateAt(REAL angle, const PointF ¢er, MatrixOrder order = MatrixOrderPrepend) + { + if (order == MatrixOrderPrepend) + { + SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order)); + SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); + return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, -center.X, -center.Y, order)); + } + else + { + SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, -center.X, -center.Y, order)); + SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); + return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order)); + } }
Status - Scale(REAL scaleX, REAL scaleY, MatrixOrder order) + Scale(REAL scaleX, REAL scaleY, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipScaleMatrix(nativeMatrix, scaleX, scaleY, order)); } @@ -154,7 +178,7 @@ class Matrix : public GdiplusBase }
Status - Shear(REAL shearX, REAL shearY, MatrixOrder order) + Shear(REAL shearX, REAL shearY, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipShearMatrix(nativeMatrix, shearX, shearY, order)); } @@ -184,7 +208,7 @@ class Matrix : public GdiplusBase }
Status - Translate(REAL offsetX, REAL offsetY, MatrixOrder order) + Translate(REAL offsetX, REAL offsetY, MatrixOrder order = MatrixOrderPrepend) { return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, offsetX, offsetY, order)); }