[C API] Add more sk_matrix operations
authorMiguel de Icaza <miguel@gnome.org>
Tue, 28 Jun 2016 03:06:07 +0000 (23:06 -0400)
committerMiguel de Icaza <miguel@gnome.org>
Tue, 28 Jun 2016 03:06:07 +0000 (23:06 -0400)
include/c/sk_matrix.h
src/c/xamarin/sk_x_paint.cpp

index 83f0122..e0f14e6 100644 (file)
@@ -44,6 +44,25 @@ void sk_matrix_pre_scale(sk_matrix_t*, float sx, float sy);
 */
 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
index e1e9647..d0d6880 100644 (file)
@@ -181,3 +181,43 @@ float sk_paint_get_fontmetrics(sk_paint_t* cpaint, sk_fontmetrics_t* cfontmetric
     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, &copy);
+       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);
+}