containing ui setup steps in the profiling again.
[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 = efl_add(EFL_CANVAS_IMAGE_CLASS, evas);
33         o_images[i] = o;
34         snprintf(buf, sizeof(buf), "cube%i.png", (i % 6) + 1);
35         efl_file_simple_load(o, build_path(buf), NULL);
36         efl_gfx_fill_set(o, EINA_RECT(0, 0, 256, 256));
37         efl_gfx_entity_size_set(o, EINA_SIZE2D(256, 256));
38         efl_gfx_image_smooth_scale_set(o, 0);
39         efl_gfx_entity_visible_set(o, EINA_TRUE);
40
41         o = efl_add(EFL_CANVAS_IMAGE_CLASS, evas);
42         o_reflec[i] = o;
43         snprintf(buf, sizeof(buf), "cube%i.png", (i % 6) + 1);
44         efl_file_simple_load(o, build_path(buf), NULL);
45         efl_gfx_fill_set(o, EINA_RECT(0, 0, 256, 256));
46         efl_gfx_entity_size_set(o, EINA_SIZE2D(256, 256));
47         efl_gfx_image_smooth_scale_set(o, 0);
48         efl_gfx_entity_visible_set(o, EINA_TRUE);
49      }
50    done = 0;
51 }
52
53 /* cleanup */
54 static void _cleanup(void)
55 {
56    int i;
57    for (i = 0; i < CNUM; i++)
58      {
59         efl_del(o_images[i]);
60         efl_del(o_reflec[i]);
61      }
62 }
63
64 /* loop - do things */
65 static void _loop(double t, int f)
66 {
67    int i;
68    static Evas_Map *m = NULL;
69    Evas_Coord x, y, xx, yy, w, h, c, z;
70    int center = 150;
71    double ang, n;
72    
73    if (!m) m = evas_map_new(4);
74    evas_map_smooth_set(m, 0);
75    
76    for (i = 0; i < CNUM; i++)
77      {
78         x = (win_w / 2);
79         y = (win_h / 2);
80         w = 256;
81         h = 256;
82         
83         c = (i - (CNUM / 2)) * (w / 4);
84         c += (f % (6 * (w / 4)));
85         
86         ang = (double)c / (double)center;
87         if (ang > 0.0) ang = ang * ang;
88         else           ang = -ang * ang;
89         ang *= -90.0;
90         if (ang > 90.0) ang = 90.0;
91         else if (ang < -90.0) ang = -90.0;
92
93         if ((c > (-center)) && (c <= (center)))
94           {
95              n = (double)c / (double)center;
96              if (c > 0)
97                {
98                   n = 1.0 - n;
99                   n = 1.0 - (n * n);
100                }
101              else
102                {
103                   n = -(-1.0 - n);
104                   n = -(1.0 - (n * n));
105                }
106              c = n * center * 2.0;
107           }
108         else if (c <= (-center))
109           c = (c + center) - (center * 2);
110         else if (c > (center))
111           c = (c - center) + (center * 2);
112
113         z = 0;
114         if ((c > (-center)) && (c <= (center)))
115           {
116              z = (c * (w / 2)) / center;
117              if (z < 0) z = -z;
118              z = (w / 2) - z;
119           }
120
121         x += c;
122
123         x -= (w / 2);
124         xx = x + w;
125
126         y -= (h / 2);
127         yy = y + h;
128
129         if (c <= 0)
130           {
131              efl_gfx_stack_raise_to_top(o_images[i]);
132              efl_gfx_stack_raise_to_top(o_reflec[i]);
133           }
134         else
135           {
136              efl_gfx_stack_lower_to_bottom(o_images[i]);
137              efl_gfx_stack_lower_to_bottom(o_reflec[i]);
138           }
139
140         evas_map_point_coord_set   (m, 0, x, y, -z);
141         evas_map_point_image_uv_set(m, 0, 0, 0);
142         evas_map_point_color_set   (m, 0, 255, 255, 255, 255);
143
144         evas_map_point_coord_set   (m, 1, xx, y, -z);
145         evas_map_point_image_uv_set(m, 1, 256, 0);
146         evas_map_point_color_set   (m, 1, 255, 255, 255, 255);
147
148         evas_map_point_coord_set   (m, 2, xx, yy, -z);
149         evas_map_point_image_uv_set(m, 2, 256, 256);
150         evas_map_point_color_set   (m, 2, 255, 255, 255, 255);
151
152         evas_map_point_coord_set   (m, 3, x, yy, -z);
153         evas_map_point_image_uv_set(m, 3, 0, 256);
154         evas_map_point_color_set   (m, 3, 255, 255, 255, 255);
155
156         evas_map_util_3d_rotate(m, 0, ang, 0,
157                                 x + (w / 2), y + (h / 2), 0);
158         evas_map_util_3d_perspective(m, (win_w / 2), (win_h / 2), -256, 512);
159
160         evas_object_map_enable_set(o_images[i], 1);
161         evas_object_map_set(o_images[i], m);
162
163         evas_map_point_coord_set   (m, 0, x, yy, -z);
164         evas_map_point_image_uv_set(m, 0, 0, 256);
165         evas_map_point_color_set   (m, 0, 128, 128, 128, 128);
166
167         evas_map_point_coord_set   (m, 1, xx, yy, -z);
168         evas_map_point_image_uv_set(m, 1, 256, 256);
169         evas_map_point_color_set   (m, 1, 128, 128, 128, 128);
170
171         evas_map_point_coord_set   (m, 2, xx, yy + h, -z);
172         evas_map_point_image_uv_set(m, 2, 256, 0);
173         evas_map_point_color_set   (m, 2, 0, 0, 0, 0);
174
175         evas_map_point_coord_set   (m, 3, x, yy + h, -z);
176         evas_map_point_image_uv_set(m, 3, 0, 0);
177         evas_map_point_color_set   (m, 3, 0, 0, 0, 0);
178
179         evas_map_util_3d_rotate(m, 0, ang, 0,
180                                 x + (w / 2), y + (h / 2), 0);
181         evas_map_util_3d_perspective(m, (win_w / 2), (win_h / 2), -256, 512);
182
183         evas_object_map_enable_set(o_reflec[i], 1);
184         evas_object_map_set(o_reflec[i], m);
185      }
186
187    FPS_STD(NAME);
188 }
189
190 /* prepend special key handlers if interactive (before STD) */
191 static void _key(const char *key)
192 {
193    KEY_STD;
194 }
195
196
197
198
199
200
201
202
203
204
205
206
207 /* template stuff - ignore */
208 # endif
209 #endif
210
211 #ifdef UI
212 _ui_menu_item_add(ICON, NAME, FNAME);
213 #endif
214
215 #ifdef PROTO
216 void FNAME(void);
217 #endif
218
219 #ifndef PROTO
220 # ifndef UI
221 void FNAME(void)
222 {
223    ui_func_set(_key, _loop, _setup);
224 }
225 # endif
226 #endif
227 #undef FNAME
228 #undef NAME
229 #undef ICON