[C API] add more Matrix APIs
authorMiguel de Icaza <miguel@gnome.org>
Tue, 28 Jun 2016 23:48:46 +0000 (19:48 -0400)
committerMiguel de Icaza <miguel@gnome.org>
Tue, 28 Jun 2016 23:48:46 +0000 (19:48 -0400)
gyp/core.gypi
include/c/sk_matrix.h
src/c/xamarin/sk_x_paint.cpp

index 49631f252a618983c9b8d207a38908d3a6704b8c..45c2beaa966e7b9f3d755750798ceceae0cd7e33 100644 (file)
@@ -20,6 +20,7 @@
         '<(skia_include_path)/c/xamarin/sk_x_document.h',
         '<(skia_include_path)/c/xamarin/sk_x_image.h',
         '<(skia_include_path)/c/xamarin/sk_x_maskfilter.h',
+        '<(skia_include_path)/c/xamarin/sk_x_matrix.h',
         '<(skia_include_path)/c/xamarin/sk_x_imagefilter.h',
         '<(skia_include_path)/c/xamarin/sk_x_colorfilter.h',
         '<(skia_include_path)/c/xamarin/sk_x_paint.h',
@@ -36,6 +37,7 @@
         '<(skia_src_path)/c/xamarin/sk_x_document.cpp',
         '<(skia_src_path)/c/xamarin/sk_x_image.cpp',
         '<(skia_src_path)/c/xamarin/sk_x_maskfilter.cpp',
+        '<(skia_src_path)/c/xamarin/sk_x_matrix.cpp',
         '<(skia_src_path)/c/xamarin/sk_x_imagefilter.cpp',
         '<(skia_src_path)/c/xamarin/sk_x_colorfilter.cpp',
         '<(skia_src_path)/c/xamarin/sk_x_paint.cpp',
index e0f14e6454f53af6125e59586e9b886bb736238d..5a1941965b10a14fcdb0f3830026d3eba3383070 100644 (file)
@@ -63,6 +63,46 @@ SK_API void sk_matrix_pre_concat (sk_matrix_t *result, sk_matrix_t *matrix);
  */
 SK_API void sk_matrix_post_concat (sk_matrix_t *result, sk_matrix_t *matrix);
 
+/**
+    Apply the @matrix to the coordinates in rectangle @source using the matrix definition into @dest
+*/
+SK_API void sk_matrix_map_rect (sk_matrix_t *matrix, sk_rect_t *dest, sk_rect_t *source);
+
+/**
+    Apply the @matrix to the array of points @src containing @count points into @dst
+*/
+SK_API void sk_matrix_map_points (sk_matrix_t *matrix, sk_point_t *dst, sk_point_t *src, int count);
+
+/**
+    Apply this matrix to the array of vectors specified by src, and write
+        the transformed vectors into the array of vectors specified by dst.
+        This is similar to mapPoints, but ignores any translation in the matrix.
+        @param dst  Where the transformed coordinates are written. It must
+                    contain at least count entries
+        @param src  The original coordinates that are to be transformed. It
+                    must contain at least count entries
+        @param count The number of vectors in src to read, and then transform
+                     into dst.
+*/
+SK_API void sk_matrix_map_vectors (sk_matrix_t *matrix, sk_point_t *dst, sk_point_t *src, int count);
+
+/**
+    Applies the matrix to the the @x,@y positions
+*/
+SK_API sk_point_t sk_matrix_map_xy (sk_matrix_t *matrix, float x, float y);
+
+/**
+    Applies the matrix to the the @x,@y positions, ignoring the translation component.
+*/
+SK_API sk_point_t sk_matrix_map_vector (sk_matrix_t *matrix, float x, float y);
+
+/**
+    Return the mean radius of a circle after it has been mapped by
+    this matrix. NOTE: in perspective this value assumes the circle
+    has its center at the origin.
+*/
+SK_API float sk_matrix_map_radius (sk_matrix_t *matrix, float radius);
+
 SK_C_PLUS_PLUS_END_GUARD
 
 #endif
index d0d688061b645014efef2d525f6cc702e8c17c88..a366c8534b023db5269c63da2c1c971bb04d20ca 100644 (file)
@@ -182,42 +182,3 @@ float sk_paint_get_fontmetrics(sk_paint_t* cpaint, sk_fontmetrics_t* cfontmetric
     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);
-}