Nikolay Sivov : gdiplus: Use static data for identity check in GdipIsMatrixIdentity().

Alexandre Julliard julliard at winehq.org
Fri Nov 4 15:15:54 CDT 2016


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Nov  4 04:18:19 2016 +0300

gdiplus: Use static data for identity check in GdipIsMatrixIdentity().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdiplus/matrix.c       | 20 +++++++-------------
 dlls/gdiplus/tests/matrix.c | 38 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/dlls/gdiplus/matrix.c b/dlls/gdiplus/matrix.c
index fc2d3f5..3cd8d82 100644
--- a/dlls/gdiplus/matrix.c
+++ b/dlls/gdiplus/matrix.c
@@ -497,23 +497,17 @@ GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix *matrix, GDIPCONST GpMa
 
 GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix *matrix, BOOL *result)
 {
-    GpMatrix *e;
-    GpStatus ret;
-    BOOL isIdentity;
+    static const GpMatrix identity =
+    {
+      { 1.0, 0.0,
+        0.0, 1.0,
+        0.0, 0.0 }
+    };
 
     TRACE("(%p, %p)\n", matrix, result);
 
     if(!matrix || !result)
         return InvalidParameter;
 
-    ret = GdipCreateMatrix(&e);
-    if(ret != Ok) return ret;
-
-    ret = GdipIsMatrixEqual(matrix, e, &isIdentity);
-    if(ret == Ok)
-        *result = isIdentity;
-
-    heap_free(e);
-
-    return ret;
+    return GdipIsMatrixEqual(matrix, &identity, result);
 }
diff --git a/dlls/gdiplus/tests/matrix.c b/dlls/gdiplus/tests/matrix.c
index 83b57ef..a2e0595 100644
--- a/dlls/gdiplus/tests/matrix.c
+++ b/dlls/gdiplus/tests/matrix.c
@@ -302,7 +302,42 @@ static void test_constructor3(void)
     expectf(0.0, values[4]);
     expectf(0.0, values[5]);
 
-    GdipDeleteMatrix(matrix);}
+    GdipDeleteMatrix(matrix);
+}
+
+static void test_isidentity(void)
+{
+    GpMatrix *matrix;
+    GpStatus stat;
+    BOOL result;
+
+    stat = GdipIsMatrixIdentity(NULL, NULL);
+    expect(InvalidParameter, stat);
+
+    stat = GdipIsMatrixIdentity(NULL, &result);
+    expect(InvalidParameter, stat);
+
+    stat = GdipCreateMatrix2(1.0, 0.0, 0.0, 1.0, 0.0, 0.0, &matrix);
+    expect(Ok, stat);
+
+    stat = GdipIsMatrixIdentity(matrix, NULL);
+    expect(InvalidParameter, stat);
+
+    result = FALSE;
+    stat = GdipIsMatrixIdentity(matrix, &result);
+    expect(Ok, stat);
+    ok(!!result, "got %d\n", result);
+
+    stat = GdipSetMatrixElements(matrix, 1.0, 0.0, 0.0, 1.0, 0.1, 0.0);
+    expect(Ok, stat);
+
+    result = TRUE;
+    stat = GdipIsMatrixIdentity(matrix, &result);
+    expect(Ok, stat);
+    ok(!result, "got %d\n", result);
+
+    GdipDeleteMatrix(matrix);
+}
 
 START_TEST(matrix)
 {
@@ -322,6 +357,7 @@ START_TEST(matrix)
     test_invert();
     test_shear();
     test_constructor3();
+    test_isidentity();
 
     GdiplusShutdown(gdiplusToken);
 }




More information about the wine-cvs mailing list