Henri Verbeet : d2d1: Implement D2D1MakeRotateMatrix().

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jul 18 14:20:24 CDT 2014


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Fri Jul 18 10:37:57 2014 +0200

d2d1: Implement D2D1MakeRotateMatrix().

---

 dlls/d2d1/d2d1.spec |  2 +-
 dlls/d2d1/factory.c | 19 +++++++++++++++++++
 include/d2d1.idl    |  1 +
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/dlls/d2d1/d2d1.spec b/dlls/d2d1/d2d1.spec
index b1bfe9b..26d17c6 100644
--- a/dlls/d2d1/d2d1.spec
+++ b/dlls/d2d1/d2d1.spec
@@ -1,5 +1,5 @@
 @ stdcall D2D1CreateFactory(long ptr ptr ptr)
-@ stub D2D1MakeRotateMatrix
+@ stdcall D2D1MakeRotateMatrix(float float float ptr)
 @ stub D2D1MakeSkewMatrix
 @ stub D2D1IsMatrixInvertible
 @ stub D2D1InvertMatrix
diff --git a/dlls/d2d1/factory.c b/dlls/d2d1/factory.c
index 1003f0d..0bc465e 100644
--- a/dlls/d2d1/factory.c
+++ b/dlls/d2d1/factory.c
@@ -264,3 +264,22 @@ HRESULT WINAPI D2D1CreateFactory(D2D1_FACTORY_TYPE factory_type, REFIID iid,
 
     return hr;
 }
+
+void WINAPI D2D1MakeRotateMatrix(float angle, D2D1_POINT_2F center, D2D1_MATRIX_3X2_F *matrix)
+{
+    float theta, sin_theta, cos_theta;
+
+    TRACE("angle %.8e, center {%.8e, %.8e}, matrix %p.\n", angle, center.x, center.y, matrix);
+
+    theta = angle * (M_PI / 180.0f);
+    sin_theta = sinf(theta);
+    cos_theta = cosf(theta);
+
+    /* translate(center) * rotate(theta) * translate(-center) */
+    matrix->_11 = cos_theta;
+    matrix->_12 = sin_theta;
+    matrix->_21 = -sin_theta;
+    matrix->_22 = cos_theta;
+    matrix->_31 = center.x - center.x * cos_theta + center.y * sin_theta;
+    matrix->_32 = center.y - center.x * sin_theta - center.y * cos_theta;
+}
diff --git a/include/d2d1.idl b/include/d2d1.idl
index a6d0d36..4637338 100644
--- a/include/d2d1.idl
+++ b/include/d2d1.idl
@@ -1248,3 +1248,4 @@ interface ID2D1Factory : IUnknown
 
 [local] HRESULT __stdcall D2D1CreateFactory(D2D1_FACTORY_TYPE factory_type, REFIID iid,
         const D2D1_FACTORY_OPTIONS *factory_options, void **factory);
+[local] void __stdcall D2D1MakeRotateMatrix(float angle, D2D1_POINT_2F center, D2D1_MATRIX_3X2_F *matrix);




More information about the wine-cvs mailing list