bindings/capi: fix c compatibility warnings.
[platform/core/graphics/tizenvg.git] / test / testCapi.c
1 #include <Elementary.h>\r
2 #include <thorvg_capi.h>\r
3 \r
4 #define WIDTH 800\r
5 #define HEIGHT 800\r
6 \r
7 \r
8 /************************************************************************/\r
9 /* Capi Test Code                                                       */\r
10 /************************************************************************/\r
11 \r
12 static uint32_t buffer[WIDTH * HEIGHT];\r
13 \r
14 void testCapi()\r
15 {\r
16     tvg_engine_init(TVG_ENGINE_SW | TVG_ENGINE_GL, 0);\r
17 \r
18     Tvg_Canvas* canvas = tvg_swcanvas_create();\r
19     tvg_swcanvas_set_target(canvas, buffer, WIDTH, WIDTH, HEIGHT, TVG_COLORSPACE_ARGB8888);\r
20 \r
21     Tvg_Paint* shape = tvg_shape_new();\r
22     tvg_shape_append_rect(shape, 0, 0, 200, 200, 0, 0);\r
23     tvg_shape_append_circle(shape, 200, 200, 100, 100);\r
24     tvg_shape_append_rect(shape, 100, 100, 300, 300, 100, 100);\r
25     Tvg_Gradient* grad = tvg_linear_gradient_new();\r
26     tvg_linear_gradient_set(grad, 0, 0, 300, 300);\r
27     Tvg_Color_Stop color_stops[4] =\r
28     {\r
29         {.offset=0.0, .r=0, .g=0, .b=0, .a=255},\r
30         {.offset=0.25, .r=255, .g=0, .b=0, .a=255},\r
31         {.offset=0.5, .r=0, .g=255, .b=0, .a=255},\r
32         {.offset=1.0, .r=0, .g=0, .b=255, .a=255}\r
33     };\r
34 \r
35     Tvg_Paint *shape1 = tvg_shape_new();\r
36     tvg_shape_append_rect(shape1, 500, 500, 100, 100, 30, 30);\r
37     Tvg_Gradient* grad1 = tvg_radial_gradient_new();\r
38     tvg_radial_gradient_set(grad1, 550, 550, 50);\r
39     Tvg_Color_Stop color_stops1[3] =\r
40     {\r
41         {.offset=0.0, .r=0, .g=0, .b=0, .a=255},\r
42         {.offset=0.6, .r=255, .g=0, .b=0, .a=255},\r
43         {.offset=1.0, .r=0, .g=255, .b=255, .a=255}\r
44     };\r
45 \r
46     Tvg_Paint *shape2 = tvg_shape_new();\r
47     tvg_shape_append_rect(shape2, 400, 0, 800, 400, 20, 20);\r
48     Tvg_Gradient* grad2 = tvg_linear_gradient_new();\r
49     tvg_linear_gradient_set(grad2, 400, 0, 450, 50);\r
50     Tvg_Color_Stop color_stops2[2] =\r
51     {\r
52         {.offset=0.0, .r=0, .g=0, .b=0, .a=255},\r
53         {.offset=1, .r=255, .g=0, .b=0, .a=255},\r
54     };\r
55 \r
56     tvg_gradient_set_spread(grad2, TVG_STROKE_FILL_REPEAT);\r
57 \r
58     Tvg_Paint* shape3 = tvg_shape_new();\r
59     tvg_shape_append_rect(shape3, 0, 400, 400, 800, 20, 20);\r
60     Tvg_Gradient* grad3 = tvg_linear_gradient_new();\r
61     tvg_linear_gradient_set(grad3, 0, 400, 50, 450);\r
62     Tvg_Color_Stop color_stops3[2] =\r
63     {\r
64         {.offset=0.0, .r=0, .g=0, .b=0, .a=255},\r
65         {.offset=1, .r=0, .g=255, .b=0, .a=255},\r
66     };\r
67 \r
68     tvg_gradient_set_spread(grad3, TVG_STROKE_FILL_REFLECT);\r
69 \r
70     tvg_gradient_set_color_stops(grad, color_stops, 4);\r
71     tvg_gradient_set_color_stops(grad1, color_stops1, 3);\r
72     tvg_gradient_set_color_stops(grad2, color_stops2, 2);\r
73     tvg_gradient_set_color_stops(grad3, color_stops3, 2);\r
74     tvg_shape_set_linear_gradient(shape, grad);\r
75     tvg_shape_set_radial_gradient(shape1, grad1);\r
76     tvg_shape_set_linear_gradient(shape2, grad2);\r
77     tvg_shape_set_linear_gradient(shape3, grad3);\r
78 \r
79     tvg_canvas_push(canvas, shape);\r
80     tvg_canvas_push(canvas, shape1);\r
81     tvg_canvas_push(canvas, shape2);\r
82     tvg_canvas_push(canvas, shape3);\r
83 \r
84     Tvg_Paint* shape4 = tvg_shape_new();\r
85     tvg_shape_append_rect(shape4, 700, 700, 100, 100, 20, 20);\r
86     Tvg_Gradient* grad4 = tvg_linear_gradient_new();\r
87     tvg_linear_gradient_set(grad4, 700, 700, 800, 800);\r
88     Tvg_Color_Stop color_stops4[2] =\r
89     {\r
90         {.offset=0.0, .r=0, .g=0, .b=0, .a=255},\r
91         {.offset=1, .r=0, .g=255, .b=0, .a=255},\r
92     };\r
93     tvg_gradient_set_color_stops(grad4, color_stops4, 2);\r
94     tvg_shape_set_linear_gradient(shape4, grad4);\r
95 \r
96     Tvg_Gradient* grad5 = tvg_linear_gradient_new();\r
97     tvg_linear_gradient_set(grad5, 700, 700, 800, 800);\r
98     Tvg_Color_Stop color_stops5[2] =\r
99     {\r
100         {.offset=0.0, .r=0, .g=0, .b=255, .a=255},\r
101         {.offset=1, .r=0, .g=255, .b=255, .a=255},\r
102     };\r
103     tvg_gradient_set_color_stops(grad5, color_stops5, 2);\r
104     tvg_shape_set_linear_gradient(shape4, grad5);\r
105     tvg_canvas_push(canvas, shape4);\r
106 \r
107     Tvg_Gradient* grad6 = tvg_radial_gradient_new();\r
108     tvg_radial_gradient_set(grad6, 550, 550, 50);\r
109     Tvg_Color_Stop color_stops6[2] =\r
110     {\r
111         {.offset=0.0, .r=0, .g=125, .b=0, .a=255},\r
112         {.offset=1, .r=125, .g=0, .b=125, .a=255},\r
113     };\r
114     tvg_gradient_set_color_stops(grad6, color_stops6, 2);\r
115     tvg_shape_set_radial_gradient(shape1, grad6);\r
116     tvg_canvas_update(canvas);\r
117 \r
118     tvg_shape_set_stroke_width(shape,3);\r
119     tvg_shape_set_stroke_color(shape, 125, 0, 125, 255);\r
120     tvg_canvas_update_paint(canvas, shape);\r
121 \r
122     const Tvg_Path_Command* cmds;\r
123     uint32_t cmdCnt;\r
124     const Tvg_Point* pts;\r
125     uint32_t ptsCnt;\r
126 \r
127     tvg_shape_get_path_commands(shape, &cmds, &cmdCnt);\r
128     printf("---- First Shape Commands(%u) ----\n", cmdCnt);\r
129     for(int i=0; i < cmdCnt; ++i) {\r
130         printf("%d\n", cmds[i]);\r
131     }\r
132 \r
133     tvg_shape_get_path_coords(shape, &pts, &ptsCnt);\r
134     printf("---- First Shape Points(%u) ----\n", ptsCnt);\r
135     for(int i=0; i < ptsCnt; ++i) {\r
136         printf("(%.2lf, %.2lf)\n", pts[i].x, pts[i].y);\r
137     }\r
138     \r
139     //Origin paint for duplicated\r
140     Tvg_Paint* org = tvg_shape_new();\r
141     tvg_shape_append_rect(org, 550, 10, 100, 100, 0, 0);\r
142     tvg_shape_set_stroke_width(org, 3);\r
143     tvg_shape_set_stroke_color(org, 255, 0, 0, 255);\r
144     tvg_shape_set_fill_color(org, 0, 255, 0, 255);\r
145 \r
146     //Duplicated paint test - should copy rectangle parameters from origin\r
147     Tvg_Paint* dup = tvg_paint_duplicate(org);\r
148     tvg_canvas_push(canvas, dup);\r
149 \r
150     tvg_canvas_draw(canvas);\r
151     tvg_canvas_sync(canvas);\r
152 \r
153     tvg_canvas_destroy(canvas);\r
154 \r
155     tvg_engine_term(TVG_ENGINE_SW | TVG_ENGINE_GL);\r
156 }\r
157 \r
158 \r
159 /************************************************************************/\r
160 /* Main Code                                                            */\r
161 /************************************************************************/\r
162 \r
163 void win_del(void *data, Evas_Object *o, void *ev)\r
164 {\r
165    elm_exit();\r
166 }\r
167 \r
168 \r
169 int main(int argc, char **argv)\r
170 {\r
171     elm_init(argc, argv);\r
172 \r
173     Eo* win = elm_win_util_standard_add(NULL, "ThorVG Test");\r
174     evas_object_smart_callback_add(win, "delete,request", win_del, 0);\r
175 \r
176     Eo* view = evas_object_image_filled_add(evas_object_evas_get(win));\r
177     evas_object_image_size_set(view, WIDTH, HEIGHT);\r
178     evas_object_image_data_set(view, buffer);\r
179     evas_object_image_pixels_dirty_set(view, EINA_TRUE);\r
180     evas_object_image_data_update_add(view, 0, 0, WIDTH, HEIGHT);\r
181     evas_object_size_hint_weight_set(view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
182     evas_object_show(view);\r
183 \r
184     elm_win_resize_object_add(win, view);\r
185     evas_object_geometry_set(win, 0, 0, WIDTH, HEIGHT);\r
186     evas_object_show(win);\r
187 \r
188     testCapi();\r
189 \r
190     elm_run();\r
191     elm_shutdown();\r
192 \r
193     return 0;\r
194 }\r