Added C bindings for SkMatrix44
authorMatthew Leibowitz <mattleibow@live.com>
Sat, 11 Feb 2017 14:54:40 +0000 (18:54 +0400)
committerMatthew Leibowitz <mattleibow@live.com>
Sat, 11 Feb 2017 14:54:40 +0000 (18:54 +0400)
include/c/sk_matrix.h
include/c/sk_types.h
src/c/sk_enums.cpp
src/c/sk_matrix.cpp
src/c/sk_types_priv.h

index cc45657..2038f89 100644 (file)
@@ -113,6 +113,7 @@ SK_C_API void sk_matrix_map_vector (sk_matrix_t *matrix, float x, float y, sk_po
 */
 SK_C_API float sk_matrix_map_radius (sk_matrix_t *matrix, float radius);
 
+
 SK_C_API sk_3dview_t* sk_3dview_new ();
 SK_C_API void sk_3dview_destroy (sk_3dview_t* cview);
 SK_C_API void sk_3dview_save (sk_3dview_t* cview);
@@ -128,6 +129,43 @@ SK_C_API void sk_3dview_get_matrix (sk_3dview_t* cview, sk_matrix_t* cmatrix);
 SK_C_API void sk_3dview_apply_to_canvas (sk_3dview_t* cview, sk_canvas_t* ccanvas);
 SK_C_API float sk_3dview_dot_with_normal (sk_3dview_t* cview, float dx, float dy, float dz);
 
+
+SK_C_API void sk_matrix44_destroy (sk_matrix44_t* matrix);
+SK_C_API sk_matrix44_t* sk_matrix44_new ();
+SK_C_API sk_matrix44_t* sk_matrix44_new_identity ();
+SK_C_API sk_matrix44_t* sk_matrix44_new_copy (const sk_matrix44_t* src);
+SK_C_API sk_matrix44_t* sk_matrix44_new_concat (const sk_matrix44_t* a, const sk_matrix44_t* b);
+SK_C_API sk_matrix44_t* sk_matrix44_new_matrix (const sk_matrix_t* src);
+SK_C_API bool sk_matrix44_equals (sk_matrix44_t* matrix, const sk_matrix44_t* other);
+SK_C_API void sk_matrix44_to_matrix (sk_matrix44_t* matrix, sk_matrix_t* dst);
+SK_C_API sk_matrix44_type_mask_t sk_matrix44_get_type (sk_matrix44_t* matrix);
+SK_C_API void sk_matrix44_set_identity (sk_matrix44_t* matrix);
+SK_C_API float sk_matrix44_get (sk_matrix44_t* matrix, int row, int col);
+SK_C_API void sk_matrix44_set (sk_matrix44_t* matrix, int row, int col, float value);
+SK_C_API void sk_matrix44_as_col_major (sk_matrix44_t* matrix, float* dst);
+SK_C_API void sk_matrix44_as_row_major (sk_matrix44_t* matrix, float* dst);
+SK_C_API void sk_matrix44_set_col_major (sk_matrix44_t* matrix, float* dst);
+SK_C_API void sk_matrix44_set_row_major (sk_matrix44_t* matrix, float* dst);
+SK_C_API void sk_matrix44_set_translate (sk_matrix44_t* matrix, float dx, float dy, float dz);
+SK_C_API void sk_matrix44_pre_translate (sk_matrix44_t* matrix, float dx, float dy, float dz);
+SK_C_API void sk_matrix44_post_translate (sk_matrix44_t* matrix, float dx, float dy, float dz);
+SK_C_API void sk_matrix44_set_sccle (sk_matrix44_t* matrix, float sx, float sy, float sz);
+SK_C_API void sk_matrix44_pre_scale (sk_matrix44_t* matrix, float sx, float sy, float sz);
+SK_C_API void sk_matrix44_post_scale (sk_matrix44_t* matrix, float sx, float sy, float sz);
+SK_C_API void sk_matrix44_set_rotate_about_degrees (sk_matrix44_t* matrix, float x, float y, float z, float degrees);
+SK_C_API void sk_matrix44_set_rotate_about_radians (sk_matrix44_t* matrix, float x, float y, float z, float radians);
+SK_C_API void sk_matrix44_set_rotate_about_radians_unit (sk_matrix44_t* matrix, float x, float y, float z, float radians);
+SK_C_API void sk_matrix44_set_concat (sk_matrix44_t* matrix, const sk_matrix44_t* a, const sk_matrix44_t* b);
+SK_C_API void sk_matrix44_pre_concat (sk_matrix44_t* matrix, const sk_matrix44_t* m);
+SK_C_API void sk_matrix44_post_concat (sk_matrix44_t* matrix, const sk_matrix44_t* m);
+SK_C_API bool sk_matrix44_invert (sk_matrix44_t* matrix, sk_matrix44_t* inverse);
+SK_C_API void sk_matrix44_transpose (sk_matrix44_t* matrix);
+SK_C_API void sk_matrix44_map_scalars (sk_matrix44_t* matrix, const float* src, float* dst);
+SK_C_API void sk_matrix44_map2 (sk_matrix44_t* matrix, const float* src2, int count, float* dst4);
+SK_C_API bool sk_matrix44_preserves_2d_axis_alignment (sk_matrix44_t* matrix, float epsilon);
+SK_C_API double sk_matrix44_determinant (sk_matrix44_t* matrix);
+
+
 SK_C_PLUS_PLUS_END_GUARD
 
 #endif
index 1bd6646..b12a1cf 100644 (file)
@@ -120,6 +120,16 @@ typedef struct {
     float   mat[9];
 } sk_matrix_t;
 
+typedef struct sk_matrix44_t sk_matrix44_t;
+
+typedef enum {
+    IDENTITY_SK_MATRIX44_TYPE_MASK = 0,
+    TRANSLATE_SK_MATRIX44_TYPE_MASK = 0x01,
+    SCALE_SK_MATRIX44_TYPE_MASK = 0x02,
+    AFFINE_SK_MATRIX44_TYPE_MASK = 0x04,
+    PERSPECTIVE_SK_MATRIX44_TYPE_MASK = 0x08 
+} sk_matrix44_type_mask_t;
+
 /**
     A sk_canvas_t encapsulates all of the state about drawing into a
     destination This includes a reference to the destination itself,
index ee8da4e..4620996 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include "sk_types_priv.h"
+#include "SkMatrix44.h"
 #include "SkShadowMaskFilter.h"
 #include "SkBitmapScaler.h"
 #include "SkBlurMaskFilter.h"
@@ -372,4 +373,11 @@ static_assert ((int)SkMask::Format::k3D_Format       == (int)THREE_D_SK_MASK_FOR
 static_assert ((int)SkMask::Format::kARGB32_Format   == (int)ARGB32_SK_MASK_FORMAT,    ASSERT_MSG(SkMask::Format, sk_mask_format_t));
 static_assert ((int)SkMask::Format::kLCD16_Format    == (int)LCD16_SK_MASK_FORMAT,     ASSERT_MSG(SkMask::Format, sk_mask_format_t));
 
+// sk_matrix44_type_mask_t
+static_assert ((int)SkMatrix44::TypeMask::kIdentity_Mask      == (int)IDENTITY_SK_MATRIX44_TYPE_MASK,      ASSERT_MSG(SkMatrix44::TypeMask, sk_matrix44_type_mask_t));
+static_assert ((int)SkMatrix44::TypeMask::kTranslate_Mask     == (int)TRANSLATE_SK_MATRIX44_TYPE_MASK,     ASSERT_MSG(SkMatrix44::TypeMask, sk_matrix44_type_mask_t));
+static_assert ((int)SkMatrix44::TypeMask::kScale_Mask         == (int)SCALE_SK_MATRIX44_TYPE_MASK,         ASSERT_MSG(SkMatrix44::TypeMask, sk_matrix44_type_mask_t));
+static_assert ((int)SkMatrix44::TypeMask::kAffine_Mask        == (int)AFFINE_SK_MATRIX44_TYPE_MASK,        ASSERT_MSG(SkMatrix44::TypeMask, sk_matrix44_type_mask_t));
+static_assert ((int)SkMatrix44::TypeMask::kPerspective_Mask   == (int)PERSPECTIVE_SK_MATRIX44_TYPE_MASK,   ASSERT_MSG(SkMatrix44::TypeMask, sk_matrix44_type_mask_t));
+
 #endif
index dd40583..7aeac70 100644 (file)
@@ -227,3 +227,177 @@ float sk_3dview_dot_with_normal (sk_3dview_t* cview, float dx, float dy, float d
     return As3DView (cview)->dotWithNormal (dx, dy, dz);
 }
 
+
+void sk_matrix44_destroy (sk_matrix44_t* matrix)
+{
+    delete AsMatrix44 (matrix);
+}
+
+sk_matrix44_t* sk_matrix44_new ()
+{
+    return ToMatrix44 (new SkMatrix44(SkMatrix44::Uninitialized_Constructor::kUninitialized_Constructor));
+}
+
+sk_matrix44_t* sk_matrix44_new_identity ()
+{
+    return ToMatrix44 (new SkMatrix44(SkMatrix44::Identity_Constructor::kIdentity_Constructor));
+}
+
+sk_matrix44_t* sk_matrix44_new_copy (const sk_matrix44_t* src)
+{
+    return ToMatrix44 (new SkMatrix44(AsMatrix44 (*src)));
+}
+
+sk_matrix44_t* sk_matrix44_new_concat (const sk_matrix44_t* a, const sk_matrix44_t* b)
+{
+    return ToMatrix44 (new SkMatrix44(AsMatrix44 (*a), AsMatrix44 (*b)));
+}
+
+sk_matrix44_t* sk_matrix44_new_matrix (const sk_matrix_t* src)
+{
+    SkMatrix skmatrix;
+    from_c (src, &skmatrix);
+    return ToMatrix44 (new SkMatrix44(skmatrix));
+}
+
+bool sk_matrix44_equals (sk_matrix44_t* matrix, const sk_matrix44_t* other)
+{
+    return AsMatrix44(matrix) == AsMatrix44(other);
+}
+
+void sk_matrix44_to_matrix (sk_matrix44_t* matrix, sk_matrix_t* dst)
+{
+    SkMatrix skmatrix = AsMatrix44(*matrix);
+    from_sk (&skmatrix, dst);
+}
+
+sk_matrix44_type_mask_t sk_matrix44_get_type (sk_matrix44_t* matrix)
+{
+    return (sk_matrix44_type_mask_t) AsMatrix44(matrix)->getType ();
+}
+
+void sk_matrix44_set_identity (sk_matrix44_t* matrix)
+{
+    AsMatrix44(matrix)->setIdentity ();
+}
+
+float sk_matrix44_get (sk_matrix44_t* matrix, int row, int col)
+{
+    return AsMatrix44(matrix)->get (row, col);
+}
+
+void sk_matrix44_set (sk_matrix44_t* matrix, int row, int col, float value)
+{
+    AsMatrix44(matrix)->set (row, col, value);
+}
+
+void sk_matrix44_as_col_major (sk_matrix44_t* matrix, float* dst)
+{
+    AsMatrix44(matrix)->asColMajorf (dst);
+}
+
+void sk_matrix44_as_row_major (sk_matrix44_t* matrix, float* dst)
+{
+    AsMatrix44(matrix)->asRowMajorf (dst);
+}
+
+void sk_matrix44_set_col_major (sk_matrix44_t* matrix, float* dst)
+{
+    AsMatrix44(matrix)->setColMajorf (dst);
+}
+
+void sk_matrix44_set_row_major (sk_matrix44_t* matrix, float* dst)
+{
+    AsMatrix44(matrix)->setRowMajorf (dst);
+}
+
+void sk_matrix44_set_translate (sk_matrix44_t* matrix, float dx, float dy, float dz)
+{
+    AsMatrix44(matrix)->setTranslate (dx, dy, dz);
+}
+
+void sk_matrix44_pre_translate (sk_matrix44_t* matrix, float dx, float dy, float dz)
+{
+    AsMatrix44(matrix)->preTranslate (dx, dy, dz);
+}
+
+void sk_matrix44_post_translate (sk_matrix44_t* matrix, float dx, float dy, float dz)
+{
+    AsMatrix44(matrix)->postTranslate (dx, dy, dz);
+}
+
+void sk_matrix44_set_scale (sk_matrix44_t* matrix, float sx, float sy, float sz)
+{
+    AsMatrix44(matrix)->setScale (sx, sy, sz);
+}
+
+void sk_matrix44_pre_scale (sk_matrix44_t* matrix, float sx, float sy, float sz)
+{
+    AsMatrix44(matrix)->preScale (sx, sy, sz);
+}
+
+void sk_matrix44_post_scale (sk_matrix44_t* matrix, float sx, float sy, float sz)
+{
+    AsMatrix44(matrix)->postScale (sx, sy, sz);
+}
+
+void sk_matrix44_set_rotate_about_degrees (sk_matrix44_t* matrix, float x, float y, float z, float degrees)
+{
+    AsMatrix44(matrix)->setRotateDegreesAbout (x, y, z, degrees);
+}
+
+void sk_matrix44_set_rotate_about_radians (sk_matrix44_t* matrix, float x, float y, float z, float radians)
+{
+    AsMatrix44(matrix)->setRotateAbout (x, y, z, radians);
+}
+
+void sk_matrix44_set_rotate_about_radians_unit (sk_matrix44_t* matrix, float x, float y, float z, float radians)
+{
+    AsMatrix44(matrix)->setRotateAboutUnit (x, y, z, radians);
+}
+
+void sk_matrix44_set_concat (sk_matrix44_t* matrix, const sk_matrix44_t* a, const sk_matrix44_t* b)
+{
+    AsMatrix44 (matrix)->setConcat (AsMatrix44 (*a), AsMatrix44 (*b));
+}
+
+void sk_matrix44_pre_concat (sk_matrix44_t* matrix, const sk_matrix44_t* m)
+{
+    AsMatrix44 (matrix)->preConcat (AsMatrix44 (*m));
+}
+
+void sk_matrix44_post_concat (sk_matrix44_t* matrix, const sk_matrix44_t* m)
+{
+    AsMatrix44 (matrix)->postConcat (AsMatrix44 (*m));
+}
+
+bool sk_matrix44_invert (sk_matrix44_t* matrix, sk_matrix44_t* inverse)
+{
+    return AsMatrix44 (matrix)->invert (AsMatrix44 (inverse));
+}
+
+void sk_matrix44_transpose (sk_matrix44_t* matrix)
+{
+    AsMatrix44 (matrix)->transpose ();
+}
+
+void sk_matrix44_map_scalars (sk_matrix44_t* matrix, const float* src, float* dst)
+{
+    AsMatrix44(matrix)->mapScalars (src, dst);
+}
+
+void sk_matrix44_map2 (sk_matrix44_t* matrix, const float* src2, int count, float* dst4)
+{
+    AsMatrix44(matrix)->map2 (src2, count, dst4);
+}
+
+bool sk_matrix44_preserves_2d_axis_alignment (sk_matrix44_t* matrix, float epsilon)
+{
+    return AsMatrix44(matrix)->preserves2dAxisAlignment (epsilon);
+}
+
+double sk_matrix44_determinant (sk_matrix44_t* matrix)
+{
+    return AsMatrix44(matrix)->determinant ();
+}
+
index 913281c..0047978 100644 (file)
@@ -689,6 +689,30 @@ static inline const sk_3dview_t* To3DView(const Sk3DView* p) {
     return reinterpret_cast<const sk_3dview_t*>(p);
 }
 
+static inline const SkMatrix44& AsMatrix44(const sk_matrix44_t& p) {
+    return reinterpret_cast<const SkMatrix44&>(p);
+}
+
+static inline SkMatrix44& AsMatrix44(sk_matrix44_t& p) {
+    return reinterpret_cast<SkMatrix44&>(p);
+}
+
+static inline const SkMatrix44* AsMatrix44(const sk_matrix44_t* p) {
+    return reinterpret_cast<const SkMatrix44*>(p);
+}
+
+static inline SkMatrix44* AsMatrix44(sk_matrix44_t* p) {
+    return reinterpret_cast<SkMatrix44*>(p);
+}
+
+static inline sk_matrix44_t* ToMatrix44(SkMatrix44* p) {
+    return reinterpret_cast<sk_matrix44_t*>(p);
+}
+
+static inline const sk_matrix44_t* ToMatrix44(const SkMatrix44* p) {
+    return reinterpret_cast<const sk_matrix44_t*>(p);
+}
+
 static inline void from_c(const sk_matrix_t* cmatrix, SkMatrix* matrix) {
     matrix->setAll(
         cmatrix->mat[0], cmatrix->mat[1], cmatrix->mat[2],