2 * Copyright 2016 Xamarin Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
10 #include "sk_matrix.h"
12 #include "sk_types_priv.h"
14 void sk_matrix_set_identity (sk_matrix_t* matrix)
17 from_c (matrix, &skmatrix);
18 skmatrix.setIdentity ();
19 from_sk (&skmatrix, matrix);
22 void sk_matrix_set_translate (sk_matrix_t* matrix, float tx, float ty)
25 from_c (matrix, &skmatrix);
26 skmatrix.setTranslate (tx, ty);
27 from_sk (&skmatrix, matrix);
30 void sk_matrix_pre_translate (sk_matrix_t* matrix, float tx, float ty)
33 from_c (matrix, &skmatrix);
34 skmatrix.preTranslate (tx, ty);
35 from_sk (&skmatrix, matrix);
38 void sk_matrix_post_translate (sk_matrix_t* matrix, float tx, float ty)
41 from_c (matrix, &skmatrix);
42 skmatrix.postTranslate (tx, ty);
43 from_sk (&skmatrix, matrix);
46 void sk_matrix_set_scale (sk_matrix_t* matrix, float sx, float sy)
49 from_c (matrix, &skmatrix);
50 skmatrix.setScale (sx, sy);
51 from_sk (&skmatrix, matrix);
54 void sk_matrix_pre_scale (sk_matrix_t* matrix, float sx, float sy)
57 from_c (matrix, &skmatrix);
58 skmatrix.preScale (sx, sy);
59 from_sk (&skmatrix, matrix);
62 void sk_matrix_post_scale (sk_matrix_t* matrix, float sx, float sy)
65 from_c (matrix, &skmatrix);
66 skmatrix.postScale (sx, sy);
67 from_sk (&skmatrix, matrix);
70 int sk_matrix_try_invert (sk_matrix_t *matrix, sk_matrix_t *result)
72 SkMatrix copy, inverse;
73 from_c (matrix, ©);
74 if (copy.invert (&inverse)){
75 from_sk (&inverse, result);
81 void sk_matrix_concat (sk_matrix_t *matrix, sk_matrix_t *first, sk_matrix_t *second)
83 SkMatrix target, skfirst, sksecond;
84 from_c (matrix, &target);
85 from_c (first, &skfirst);
86 from_c (second, &sksecond);
87 target.setConcat (skfirst, sksecond);
88 from_sk (&target, matrix);
91 void sk_matrix_pre_concat (sk_matrix_t *target, sk_matrix_t *matrix)
93 SkMatrix sktarget, skmatrix;
94 from_c (target, &sktarget);
95 from_c (matrix, &skmatrix);
96 sktarget.preConcat (skmatrix);
97 from_sk (&sktarget, target);
100 void sk_matrix_post_concat (sk_matrix_t *target, sk_matrix_t *matrix)
102 SkMatrix sktarget, skmatrix;
103 from_c (target, &sktarget);
104 from_c (matrix, &skmatrix);
105 sktarget.postConcat (skmatrix);
106 from_sk (&sktarget, target);
109 void sk_matrix_map_rect (sk_matrix_t *matrix, sk_rect_t *dest, sk_rect_t *source)
112 from_c (matrix, &skmatrix);
113 skmatrix.mapRect (AsRect (dest), *AsRect(source));
114 from_sk (&skmatrix, matrix);
117 void sk_matrix_map_points (sk_matrix_t *matrix, sk_point_t *dst, sk_point_t *src, int count)
120 from_c (matrix, &skmatrix);
121 skmatrix.mapPoints (AsPoint (dst), AsPoint (src), count);
122 from_sk (&skmatrix, matrix);
125 void sk_matrix_map_vectors (sk_matrix_t *matrix, sk_point_t *dst, sk_point_t *src, int count)
128 from_c (matrix, &skmatrix);
129 skmatrix.mapVectors (AsPoint (dst), AsPoint (src), count);
130 from_sk (&skmatrix, matrix);
133 void sk_matrix_map_xy (sk_matrix_t *matrix, float x, float y, sk_point_t* cresult)
136 from_c (matrix, &skmatrix);
138 skmatrix.mapXY (x, y, &result);
139 *cresult = *ToPoint (&result);
142 void sk_matrix_map_vector (sk_matrix_t *matrix, float x, float y, sk_point_t* cresult)
145 from_c (matrix, &skmatrix);
147 skmatrix.mapVector (x, y, &result);
148 *cresult = *ToPoint (&result);
151 float sk_matrix_map_radius (sk_matrix_t *matrix, float radius)
154 from_c (matrix, &skmatrix);
155 return skmatrix.mapRadius (radius);
158 sk_3dview_t* sk_3dview_new ()
160 return To3DView (new Sk3DView ());
163 void sk_3dview_destroy (sk_3dview_t* cview)
165 delete As3DView (cview);
168 void sk_3dview_save (sk_3dview_t* cview)
170 As3DView (cview)->save ();
173 void sk_3dview_restore (sk_3dview_t* cview)
175 As3DView (cview)->restore ();
178 void sk_3dview_translate (sk_3dview_t* cview, float x, float y, float z)
180 As3DView (cview)->translate (x, y, z);
183 void sk_3dview_rotate_x_degrees (sk_3dview_t* cview, float degrees)
185 As3DView (cview)->rotateX (degrees);
188 void sk_3dview_rotate_y_degrees (sk_3dview_t* cview, float degrees)
190 As3DView (cview)->rotateY (degrees);
193 void sk_3dview_rotate_z_degrees (sk_3dview_t* cview, float degrees)
195 As3DView (cview)->rotateZ (degrees);
198 void sk_3dview_rotate_x_radians (sk_3dview_t* cview, float radians)
200 As3DView (cview)->rotateX (SkRadiansToDegrees (radians));
203 void sk_3dview_rotate_y_radians (sk_3dview_t* cview, float radians)
205 As3DView (cview)->rotateY (SkRadiansToDegrees (radians));
208 void sk_3dview_rotate_z_radians (sk_3dview_t* cview, float radians)
210 As3DView (cview)->rotateZ (SkRadiansToDegrees (radians));
213 void sk_3dview_get_matrix (sk_3dview_t* cview, sk_matrix_t* cmatrix)
216 As3DView (cview)->getMatrix (&matrix);
217 from_sk (&matrix, cmatrix);
220 void sk_3dview_apply_to_canvas (sk_3dview_t* cview, sk_canvas_t* ccanvas)
222 As3DView (cview)->applyToCanvas (AsCanvas (ccanvas));
225 float sk_3dview_dot_with_normal (sk_3dview_t* cview, float dx, float dy, float dz)
227 return As3DView (cview)->dotWithNormal (dx, dy, dz);