Added C binding for the 3DView
[platform/upstream/libSkiaSharp.git] / src / c / sk_matrix.cpp
1 /*
2  * Copyright 2016 Xamarin Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7
8 #include "SkStream.h"
9
10 #include "sk_matrix.h"
11
12 #include "sk_types_priv.h"
13
14 void sk_matrix_set_identity (sk_matrix_t* matrix)
15 {
16     SkMatrix skmatrix;
17     from_c (matrix, &skmatrix);
18     skmatrix.setIdentity ();
19     from_sk (&skmatrix, matrix);
20 }
21
22 void sk_matrix_set_translate (sk_matrix_t* matrix, float tx, float ty)
23 {
24     SkMatrix skmatrix;
25     from_c (matrix, &skmatrix);
26     skmatrix.setTranslate (tx, ty);
27     from_sk (&skmatrix, matrix);
28 }
29
30 void sk_matrix_pre_translate (sk_matrix_t* matrix, float tx, float ty)
31 {
32     SkMatrix skmatrix;
33     from_c (matrix, &skmatrix);
34     skmatrix.preTranslate (tx, ty);
35     from_sk (&skmatrix, matrix);
36 }
37
38 void sk_matrix_post_translate (sk_matrix_t* matrix, float tx, float ty)
39 {
40     SkMatrix skmatrix;
41     from_c (matrix, &skmatrix);
42     skmatrix.postTranslate (tx, ty);
43     from_sk (&skmatrix, matrix);
44 }
45
46 void sk_matrix_set_scale (sk_matrix_t* matrix, float sx, float sy)
47 {
48     SkMatrix skmatrix;
49     from_c (matrix, &skmatrix);
50     skmatrix.setScale (sx, sy);
51     from_sk (&skmatrix, matrix);
52 }
53
54 void sk_matrix_pre_scale (sk_matrix_t* matrix, float sx, float sy)
55 {
56     SkMatrix skmatrix;
57     from_c (matrix, &skmatrix);
58     skmatrix.preScale (sx, sy);
59     from_sk (&skmatrix, matrix);
60 }
61
62 void sk_matrix_post_scale (sk_matrix_t* matrix, float sx, float sy)
63 {
64     SkMatrix skmatrix;
65     from_c (matrix, &skmatrix);
66     skmatrix.postScale (sx, sy);
67     from_sk (&skmatrix, matrix);
68 }
69
70 int sk_matrix_try_invert (sk_matrix_t *matrix, sk_matrix_t *result)
71 {
72     SkMatrix copy, inverse;
73     from_c (matrix, &copy);
74     if (copy.invert (&inverse)){
75         from_sk (&inverse, result);
76         return 1;
77     }
78     return 0;
79 }
80
81 void sk_matrix_concat (sk_matrix_t *matrix, sk_matrix_t *first, sk_matrix_t *second)
82 {
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);
89 }
90
91 void sk_matrix_pre_concat (sk_matrix_t *target, sk_matrix_t *matrix)
92 {
93     SkMatrix sktarget, skmatrix;
94     from_c (target, &sktarget);
95     from_c (matrix, &skmatrix);
96     sktarget.preConcat (skmatrix);
97     from_sk (&sktarget, target);
98 }
99
100 void sk_matrix_post_concat (sk_matrix_t *target, sk_matrix_t *matrix)
101 {
102     SkMatrix sktarget, skmatrix;
103     from_c (target, &sktarget);
104     from_c (matrix, &skmatrix);
105     sktarget.postConcat (skmatrix);
106     from_sk (&sktarget, target);
107 }
108
109 void sk_matrix_map_rect (sk_matrix_t *matrix, sk_rect_t *dest, sk_rect_t *source)
110 {
111     SkMatrix skmatrix;
112     from_c (matrix, &skmatrix);
113     skmatrix.mapRect (AsRect (dest), *AsRect(source));
114     from_sk (&skmatrix, matrix);
115 }
116
117 void sk_matrix_map_points (sk_matrix_t *matrix, sk_point_t *dst, sk_point_t *src, int count)
118 {
119     SkMatrix skmatrix;
120     from_c (matrix, &skmatrix);
121     skmatrix.mapPoints (AsPoint (dst), AsPoint (src), count);
122     from_sk (&skmatrix, matrix);
123 }
124
125 void sk_matrix_map_vectors (sk_matrix_t *matrix, sk_point_t *dst, sk_point_t *src, int count)
126 {
127     SkMatrix skmatrix;
128     from_c (matrix, &skmatrix);
129     skmatrix.mapVectors (AsPoint (dst), AsPoint (src), count);
130     from_sk (&skmatrix, matrix);
131 }
132
133 void sk_matrix_map_xy (sk_matrix_t *matrix, float x, float y, sk_point_t* cresult)
134 {
135     SkMatrix skmatrix;
136     from_c (matrix, &skmatrix);
137     SkPoint result;
138     skmatrix.mapXY (x, y, &result);
139     *cresult = *ToPoint (&result);
140 }
141
142 void sk_matrix_map_vector (sk_matrix_t *matrix, float x, float y, sk_point_t* cresult)
143 {
144     SkMatrix skmatrix;
145     from_c (matrix, &skmatrix);
146     SkPoint result;
147     skmatrix.mapVector (x, y, &result);
148     *cresult = *ToPoint (&result);
149 }
150
151 float sk_matrix_map_radius (sk_matrix_t *matrix, float radius)
152 {
153     SkMatrix skmatrix;
154     from_c (matrix, &skmatrix);
155     return skmatrix.mapRadius (radius);
156 }
157
158 sk_3dview_t* sk_3dview_new ()
159 {
160     return To3DView (new Sk3DView ());
161 }
162
163 void sk_3dview_destroy (sk_3dview_t* cview)
164 {
165     delete As3DView (cview);
166 }
167
168 void sk_3dview_save (sk_3dview_t* cview)
169 {
170     As3DView (cview)->save ();
171 }
172
173 void sk_3dview_restore (sk_3dview_t* cview)
174 {
175     As3DView (cview)->restore ();
176 }
177
178 void sk_3dview_translate (sk_3dview_t* cview, float x, float y, float z)
179 {
180     As3DView (cview)->translate (x, y, z);
181 }
182
183 void sk_3dview_rotate_x_degrees (sk_3dview_t* cview, float degrees)
184 {
185     As3DView (cview)->rotateX (degrees);
186 }
187
188 void sk_3dview_rotate_y_degrees (sk_3dview_t* cview, float degrees)
189 {
190     As3DView (cview)->rotateY (degrees);
191 }
192
193 void sk_3dview_rotate_z_degrees (sk_3dview_t* cview, float degrees)
194 {
195     As3DView (cview)->rotateZ (degrees);
196 }
197
198 void sk_3dview_rotate_x_radians (sk_3dview_t* cview, float radians)
199 {
200     As3DView (cview)->rotateX (SkRadiansToDegrees (radians));
201 }
202
203 void sk_3dview_rotate_y_radians (sk_3dview_t* cview, float radians)
204 {
205     As3DView (cview)->rotateY (SkRadiansToDegrees (radians));
206 }
207
208 void sk_3dview_rotate_z_radians (sk_3dview_t* cview, float radians)
209 {
210     As3DView (cview)->rotateZ (SkRadiansToDegrees (radians));
211 }
212
213 void sk_3dview_get_matrix (sk_3dview_t* cview, sk_matrix_t* cmatrix)
214 {
215     SkMatrix matrix;
216     As3DView (cview)->getMatrix (&matrix);
217     from_sk (&matrix, cmatrix);
218 }
219
220 void sk_3dview_apply_to_canvas (sk_3dview_t* cview, sk_canvas_t* ccanvas)
221 {
222     As3DView (cview)->applyToCanvas (AsCanvas (ccanvas));
223 }
224
225 float sk_3dview_dot_with_normal (sk_3dview_t* cview, float dx, float dy, float dz)
226 {
227     return As3DView (cview)->dotWithNormal (dx, dy, dz);
228 }
229