Imported Upstream version 1.7.1
[platform/upstream/expedite.git] / src / bin / image_map_3d_flow.c
1 #undef FNAME
2 #undef NAME
3 #undef ICON
4
5 /* metadata */
6 #define FNAME image_map_3d_flow_start
7 #define NAME "Image Map 3D Flow"
8 #define ICON "3d.png"
9
10 #ifndef PROTO
11 # ifndef UI
12 #  include "main.h"
13
14 /* standard var */
15 static int done = 0;
16
17 #define CNUM 48
18
19 /* private data */
20 static Evas_Object *o_images[CNUM];
21 static Evas_Object *o_reflec[CNUM];
22
23 /* setup */
24 static void _setup(void)
25 {
26    int i;
27    Evas_Object *o;
28    for (i = 0; i < CNUM; i++)
29      {
30         char buf[256];
31         
32         o = evas_object_image_add(evas);
33         o_images[i] = o;
34         snprintf(buf, sizeof(buf), "cube%i.png", (i % 6) + 1);
35         evas_object_image_file_set(o, build_path(buf), NULL);
36         evas_object_image_fill_set(o, 0, 0, 256, 256);
37         evas_object_resize(o, 256, 256);
38         evas_object_image_smooth_scale_set(o, 0);
39         evas_object_show(o);
40         
41         o = evas_object_image_add(evas);
42         o_reflec[i] = o;
43         snprintf(buf, sizeof(buf), "cube%i.png", (i % 6) + 1);
44         evas_object_image_file_set(o, build_path(buf), NULL);
45         evas_object_image_fill_set(o, 0, 0, 256, 256);
46         evas_object_resize(o, 256, 256);
47         evas_object_image_smooth_scale_set(o, 0);
48         evas_object_show(o);
49      }
50    done = 0;
51 }
52
53 /* cleanup */
54 static void _cleanup(void)
55 {
56    int i;
57    for (i = 0; i < CNUM; i++) evas_object_del(o_images[i]);
58    for (i = 0; i < CNUM; i++) evas_object_del(o_reflec[i]);
59 }
60
61 /* loop - do things */
62 static void _loop(double t, int f)
63 {
64    int i;
65    static Evas_Map *m = NULL;
66    Evas_Coord x, y, xx, yy, w, h, c, z;
67    int center = 150;
68    double ang, n;
69    
70    if (!m) m = evas_map_new(4);
71    evas_map_smooth_set(m, 0);
72    
73    for (i = 0; i < CNUM; i++)
74      {
75         x = (win_w / 2);
76         y = (win_h / 2);
77         w = 256;
78         h = 256;
79         
80         c = (i - (CNUM / 2)) * (w / 4);
81         c += (f % (6 * (w / 4)));
82         
83         ang = (double)c / (double)center;
84         if (ang > 0.0) ang = ang * ang;
85         else           ang = -ang * ang;
86         ang *= -90.0;
87         if (ang > 90.0) ang = 90.0;
88         else if (ang < -90.0) ang = -90.0;
89
90         if ((c > (-center)) && (c <= (center)))
91           {
92              n = (double)c / (double)center;
93              if (c > 0)
94                {
95                   n = 1.0 - n;
96                   n = 1.0 - (n * n);
97                }
98              else
99                {
100                   n = -(-1.0 - n);
101                   n = -(1.0 - (n * n));
102                }
103              c = n * center * 2.0;
104           }
105         else if (c <= (-center))
106           c = (c + center) - (center * 2);
107         else if (c > (center))
108           c = (c - center) + (center * 2);
109
110         z = 0;
111         if ((c > (-center)) && (c <= (center)))
112           {
113              z = (c * (w / 2)) / center;
114              if (z < 0) z = -z;
115              z = (w / 2) - z;
116           }
117         
118         x += c;
119         
120         x -= (w / 2);
121         xx = x + w;
122
123         y -= (h / 2);
124         yy = y + h;
125         
126         if (c <= 0)
127           {
128              evas_object_raise(o_images[i]);
129              evas_object_raise(o_reflec[i]);
130           }
131         else
132           {
133              evas_object_lower(o_images[i]);
134              evas_object_lower(o_reflec[i]);
135           }
136         
137         evas_map_point_coord_set   (m, 0, x, y, -z);
138         evas_map_point_image_uv_set(m, 0, 0, 0);
139         evas_map_point_color_set   (m, 0, 255, 255, 255, 255);
140         
141         evas_map_point_coord_set   (m, 1, xx, y, -z);
142         evas_map_point_image_uv_set(m, 1, 256, 0);
143         evas_map_point_color_set   (m, 1, 255, 255, 255, 255);
144         
145         evas_map_point_coord_set   (m, 2, xx, yy, -z);
146         evas_map_point_image_uv_set(m, 2, 256, 256);
147         evas_map_point_color_set   (m, 2, 255, 255, 255, 255);
148         
149         evas_map_point_coord_set   (m, 3, x, yy, -z);
150         evas_map_point_image_uv_set(m, 3, 0, 256);
151         evas_map_point_color_set   (m, 3, 255, 255, 255, 255);
152         
153         evas_map_util_3d_rotate(m, 0, ang, 0, 
154                                 x + (w / 2), y + (h / 2), 0);
155         evas_map_util_3d_perspective(m, (win_w / 2), (win_h / 2), -256, 512);
156         
157         evas_object_map_enable_set(o_images[i], 1);
158         evas_object_map_set(o_images[i], m);
159
160         evas_map_point_coord_set   (m, 0, x, yy, -z);
161         evas_map_point_image_uv_set(m, 0, 0, 256);
162         evas_map_point_color_set   (m, 0, 128, 128, 128, 128);
163         
164         evas_map_point_coord_set   (m, 1, xx, yy, -z);
165         evas_map_point_image_uv_set(m, 1, 256, 256);
166         evas_map_point_color_set   (m, 1, 128, 128, 128, 128);
167         
168         evas_map_point_coord_set   (m, 2, xx, yy + h, -z);
169         evas_map_point_image_uv_set(m, 2, 256, 0);
170         evas_map_point_color_set   (m, 2, 0, 0, 0, 0);
171         
172         evas_map_point_coord_set   (m, 3, x, yy + h, -z);
173         evas_map_point_image_uv_set(m, 3, 0, 0);
174         evas_map_point_color_set   (m, 3, 0, 0, 0, 0);
175         
176         evas_map_util_3d_rotate(m, 0, ang, 0, 
177                                 x + (w / 2), y + (h / 2), 0);
178         evas_map_util_3d_perspective(m, (win_w / 2), (win_h / 2), -256, 512);
179         
180         evas_object_map_enable_set(o_reflec[i], 1);
181         evas_object_map_set(o_reflec[i], m);
182      }
183    
184    FPS_STD(NAME);
185 }
186
187 /* prepend special key handlers if interactive (before STD) */
188 static void _key(char *key)
189 {
190    KEY_STD;
191 }
192
193
194
195
196
197
198
199
200
201
202
203
204 /* template stuff - ignore */
205 # endif
206 #endif
207
208 #ifdef UI
209 _ui_menu_item_add(ICON, NAME, FNAME);
210 #endif
211
212 #ifdef PROTO
213 void FNAME(void);
214 #endif
215
216 #ifndef PROTO
217 # ifndef UI
218 void FNAME(void)
219 {
220    ui_func_set(_key, _loop);
221    _setup();
222 }
223 # endif
224 #endif
225 #undef FNAME
226 #undef NAME
227 #undef ICON