*/
void sk_matrix_post_scale(sk_matrix_t*, float sx, float sy);
+/**
+ Returns the matrix type
+ */
+SK_API int sk_matrix_try_invert (sk_matrix_t *matrix, sk_matrix_t *result);
+
+/**
+ Sets a matrix to the concatenation of the other two.
+ */
+SK_API void sk_matrix_concat (sk_matrix_t *result, sk_matrix_t *first, sk_matrix_t *second);
+
+/**
+ Preconcatenates the matrix
+ */
+SK_API void sk_matrix_pre_concat (sk_matrix_t *result, sk_matrix_t *matrix);
+/**
+ Sets a matrix to the concatenation of the other two.
+ */
+SK_API void sk_matrix_post_concat (sk_matrix_t *result, sk_matrix_t *matrix);
+
SK_C_PLUS_PLUS_END_GUARD
#endif
SkPaint *paint = AsPaint(cpaint);
return paint->getFontMetrics(AsFontMetrics(cfontmetrics), scale);
}
+
+int sk_matrix_try_invert (sk_matrix_t *matrix, sk_matrix_t *result)
+{
+ SkMatrix copy, inverse;
+ from_c (matrix, ©);
+ if (copy.invert (&inverse)){
+ from_sk (&inverse, result);
+ return 1;
+ }
+ return 0;
+}
+
+void sk_matrix_concat (sk_matrix_t *matrix, sk_matrix_t *first, sk_matrix_t *second)
+{
+ SkMatrix target, skfirst, sksecond;
+
+ from_c (matrix, &target);
+ from_c (first, &skfirst);
+ from_c (second, &sksecond);
+ target.setConcat (skfirst, sksecond);
+ from_sk (&target, matrix);
+}
+
+void sk_matrix_pre_concat (sk_matrix_t *target, sk_matrix_t *matrix)
+{
+ SkMatrix sktarget, skmatrix;
+ from_c (target, &sktarget);
+ from_c (matrix, &skmatrix);
+ sktarget.preConcat (skmatrix);
+ from_sk (&sktarget, target);
+}
+
+void sk_matrix_post_concat (sk_matrix_t *target, sk_matrix_t *matrix)
+{
+ SkMatrix sktarget, skmatrix;
+ from_c (target, &sktarget);
+ from_c (matrix, &skmatrix);
+ sktarget.postConcat (skmatrix);
+ from_sk (&sktarget, target);
+}