From b39e619cec14994277b6f8e3bc6d35a2476d5d12 Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Thu, 19 Jan 2017 03:10:44 +0200 Subject: [PATCH] Added C binding for the 3DView --- include/c/sk_matrix.h | 15 +++++++++++ include/c/sk_types.h | 2 ++ src/c/sk_matrix.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/c/sk_types_priv.h | 17 ++++++++++++ 4 files changed, 106 insertions(+) diff --git a/include/c/sk_matrix.h b/include/c/sk_matrix.h index c257f21..acf0102 100644 --- a/include/c/sk_matrix.h +++ b/include/c/sk_matrix.h @@ -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 diff --git a/include/c/sk_types.h b/include/c/sk_types.h index 70e3a01..5a04d11 100644 --- a/include/c/sk_types.h +++ b/include/c/sk_types.h @@ -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 diff --git a/src/c/sk_matrix.cpp b/src/c/sk_matrix.cpp index 093e600..dd40583 100644 --- a/src/c/sk_matrix.cpp +++ b/src/c/sk_matrix.cpp @@ -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); +} + diff --git a/src/c/sk_types_priv.h b/src/c/sk_types_priv.h index 6f2cfe8..ae98435 100644 --- a/src/c/sk_types_priv.h +++ b/src/c/sk_types_priv.h @@ -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(p); } +static inline const Sk3DView* As3DView(const sk_3dview_t* p) { + return reinterpret_cast(p); +} + +static inline Sk3DView* As3DView(sk_3dview_t* p) { + return reinterpret_cast(p); +} + +static inline sk_3dview_t* To3DView(Sk3DView* p) { + return reinterpret_cast(p); +} + +static inline const sk_3dview_t* To3DView(const Sk3DView* p) { + return reinterpret_cast(p); +} + static inline void from_c(const sk_matrix_t* cmatrix, SkMatrix* matrix) { matrix->setAll( cmatrix->mat[0], cmatrix->mat[1], cmatrix->mat[2], -- 2.7.4