Added C binding for the 3DView
authorMatthew Leibowitz <mattleibow@live.com>
Thu, 19 Jan 2017 01:10:44 +0000 (03:10 +0200)
committerMatthew Leibowitz <mattleibow@live.com>
Thu, 19 Jan 2017 01:10:44 +0000 (03:10 +0200)
include/c/sk_matrix.h
include/c/sk_types.h
src/c/sk_matrix.cpp
src/c/sk_types_priv.h

index c257f21..acf0102 100644 (file)
@@ -113,6 +113,21 @@ SK_API void sk_matrix_map_vector (sk_matrix_t *matrix, float x, float y, sk_poin
 */
 SK_API float sk_matrix_map_radius (sk_matrix_t *matrix, float radius);
 
+SK_API sk_3dview_t* sk_3dview_new ();
+SK_API void sk_3dview_destroy (sk_3dview_t* cview);
+SK_API void sk_3dview_save (sk_3dview_t* cview);
+SK_API void sk_3dview_restore (sk_3dview_t* cview);
+SK_API void sk_3dview_translate (sk_3dview_t* cview, float x, float y, float z);
+SK_API void sk_3dview_rotate_x_degrees (sk_3dview_t* cview, float degrees);
+SK_API void sk_3dview_rotate_y_degrees (sk_3dview_t* cview, float degrees);
+SK_API void sk_3dview_rotate_z_degrees (sk_3dview_t* cview, float degrees);
+SK_API void sk_3dview_rotate_x_radians (sk_3dview_t* cview, float radians);
+SK_API void sk_3dview_rotate_y_radians (sk_3dview_t* cview, float radians);
+SK_API void sk_3dview_rotate_z_radians (sk_3dview_t* cview, float radians);
+SK_API void sk_3dview_get_matrix (sk_3dview_t* cview, sk_matrix_t* cmatrix);
+SK_API void sk_3dview_apply_to_canvas (sk_3dview_t* cview, sk_canvas_t* ccanvas);
+SK_API float sk_3dview_dot_with_normal (sk_3dview_t* cview, float dx, float dy, float dz);
+
 SK_C_PLUS_PLUS_END_GUARD
 
 #endif
index 70e3a01..5a04d11 100644 (file)
@@ -747,6 +747,8 @@ typedef struct sk_xmlwriter_t sk_xmlwriter_t;
 
 typedef struct sk_svgcanvas_t sk_svgcanvas_t;
 
+typedef struct sk_3dview_t sk_3dview_t;
+
 SK_C_PLUS_PLUS_END_GUARD
 
 #endif
index 093e600..dd40583 100644 (file)
@@ -155,3 +155,75 @@ float sk_matrix_map_radius (sk_matrix_t *matrix, float radius)
     return skmatrix.mapRadius (radius);
 }
 
+sk_3dview_t* sk_3dview_new ()
+{
+    return To3DView (new Sk3DView ());
+}
+
+void sk_3dview_destroy (sk_3dview_t* cview)
+{
+    delete As3DView (cview);
+}
+
+void sk_3dview_save (sk_3dview_t* cview)
+{
+    As3DView (cview)->save ();
+}
+
+void sk_3dview_restore (sk_3dview_t* cview)
+{
+    As3DView (cview)->restore ();
+}
+
+void sk_3dview_translate (sk_3dview_t* cview, float x, float y, float z)
+{
+    As3DView (cview)->translate (x, y, z);
+}
+
+void sk_3dview_rotate_x_degrees (sk_3dview_t* cview, float degrees)
+{
+    As3DView (cview)->rotateX (degrees);
+}
+
+void sk_3dview_rotate_y_degrees (sk_3dview_t* cview, float degrees)
+{
+    As3DView (cview)->rotateY (degrees);
+}
+
+void sk_3dview_rotate_z_degrees (sk_3dview_t* cview, float degrees)
+{
+    As3DView (cview)->rotateZ (degrees);
+}
+
+void sk_3dview_rotate_x_radians (sk_3dview_t* cview, float radians)
+{
+    As3DView (cview)->rotateX (SkRadiansToDegrees (radians));
+}
+
+void sk_3dview_rotate_y_radians (sk_3dview_t* cview, float radians)
+{
+    As3DView (cview)->rotateY (SkRadiansToDegrees (radians));
+}
+
+void sk_3dview_rotate_z_radians (sk_3dview_t* cview, float radians)
+{
+    As3DView (cview)->rotateZ (SkRadiansToDegrees (radians));
+}
+
+void sk_3dview_get_matrix (sk_3dview_t* cview, sk_matrix_t* cmatrix)
+{
+    SkMatrix matrix;
+    As3DView (cview)->getMatrix (&matrix);
+    from_sk (&matrix, cmatrix);
+}
+
+void sk_3dview_apply_to_canvas (sk_3dview_t* cview, sk_canvas_t* ccanvas)
+{
+    As3DView (cview)->applyToCanvas (AsCanvas (ccanvas));
+}
+
+float sk_3dview_dot_with_normal (sk_3dview_t* cview, float dx, float dy, float dz)
+{
+    return As3DView (cview)->dotWithNormal (dx, dy, dz);
+}
+
index 6f2cfe8..ae98435 100644 (file)
@@ -33,6 +33,7 @@
 #include "SkTypeface.h"
 #include "SkEncodedInfo.h"
 #include "SkTime.h"
+#include "SkCamera.h"
 #include "gl/GrGLInterface.h"
 
 #include "sk_path.h"
@@ -646,6 +647,22 @@ static inline const sk_xmlwriter_t* ToXMLWriter(const SkXMLWriter* p) {
     return reinterpret_cast<const sk_xmlwriter_t*>(p);
 }
 
+static inline const Sk3DView* As3DView(const sk_3dview_t* p) {
+    return reinterpret_cast<const Sk3DView*>(p);
+}
+
+static inline Sk3DView* As3DView(sk_3dview_t* p) {
+    return reinterpret_cast<Sk3DView*>(p);
+}
+
+static inline sk_3dview_t* To3DView(Sk3DView* p) {
+    return reinterpret_cast<sk_3dview_t*>(p);
+}
+
+static inline const sk_3dview_t* To3DView(const Sk3DView* p) {
+    return reinterpret_cast<const sk_3dview_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],