@@ -1775,6 +1775,22 @@ get_current_transform(Context2d *context) {
1775
1775
return Nan::NewInstance (context->_DOMMatrix .Get (iso), argc, argv).ToLocalChecked ();
1776
1776
}
1777
1777
1778
+ /*
1779
+ * Helper for get/set transform.
1780
+ */
1781
+
1782
+ void parse_matrix_from_object (cairo_matrix_t &matrix, Local<Object> mat) {
1783
+ cairo_matrix_init (&matrix,
1784
+ Nan::To<double >(Nan::Get (mat, Nan::New (" a" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1785
+ Nan::To<double >(Nan::Get (mat, Nan::New (" b" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1786
+ Nan::To<double >(Nan::Get (mat, Nan::New (" c" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1787
+ Nan::To<double >(Nan::Get (mat, Nan::New (" d" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1788
+ Nan::To<double >(Nan::Get (mat, Nan::New (" e" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1789
+ Nan::To<double >(Nan::Get (mat, Nan::New (" f" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 )
1790
+ );
1791
+ }
1792
+
1793
+
1778
1794
/*
1779
1795
* Get current transform.
1780
1796
*/
@@ -1802,14 +1818,7 @@ NAN_SETTER(Context2d::SetCurrentTransform) {
1802
1818
#endif
1803
1819
1804
1820
cairo_matrix_t matrix;
1805
- cairo_matrix_init (&matrix,
1806
- Nan::To<double >(Nan::Get (mat, Nan::New (" a" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1807
- Nan::To<double >(Nan::Get (mat, Nan::New (" b" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1808
- Nan::To<double >(Nan::Get (mat, Nan::New (" c" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1809
- Nan::To<double >(Nan::Get (mat, Nan::New (" d" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1810
- Nan::To<double >(Nan::Get (mat, Nan::New (" e" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 ),
1811
- Nan::To<double >(Nan::Get (mat, Nan::New (" f" ).ToLocalChecked ()).ToLocalChecked ()).FromMaybe (0 )
1812
- );
1821
+ parse_matrix_from_object (matrix, mat);
1813
1822
1814
1823
cairo_transform (context->context (), &matrix);
1815
1824
}
@@ -2279,8 +2288,24 @@ NAN_METHOD(Context2d::ResetTransform) {
2279
2288
2280
2289
NAN_METHOD (Context2d::SetTransform) {
2281
2290
Context2d *context = Nan::ObjectWrap::Unwrap<Context2d>(info.This ());
2282
- cairo_identity_matrix (context->context ());
2283
- Context2d::Transform (info);
2291
+ if (info.Length () == 1 ) {
2292
+ Local<Object> mat = Nan::To<Object>(info[0 ]).ToLocalChecked ();
2293
+
2294
+ #if NODE_MAJOR_VERSION >= 8
2295
+ Local<Context> ctx = Nan::GetCurrentContext ();
2296
+ if (!mat->InstanceOf (ctx, _DOMMatrix.Get (Isolate::GetCurrent ())).ToChecked ()) {
2297
+ return Nan::ThrowTypeError (" Expected DOMMatrix" );
2298
+ }
2299
+ #endif
2300
+
2301
+ cairo_matrix_t matrix;
2302
+ parse_matrix_from_object (matrix, mat);
2303
+
2304
+ cairo_set_matrix (context->context (), &matrix);
2305
+ } else {
2306
+ cairo_identity_matrix (context->context ());
2307
+ Context2d::Transform (info);
2308
+ }
2284
2309
}
2285
2310
2286
2311
/*
0 commit comments