6 #define FNAME image_map_3d_flow_start
7 #define NAME "Image Map 3D Flow"
20 static Evas_Object *o_images[CNUM];
21 static Evas_Object *o_reflec[CNUM];
24 static void _setup(void)
28 for (i = 0; i < CNUM; i++)
32 o = evas_object_image_add(evas);
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);
41 o = evas_object_image_add(evas);
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);
54 static void _cleanup(void)
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]);
61 /* loop - do things */
62 static void _loop(double t, int f)
65 static Evas_Map *m = NULL;
66 Evas_Coord x, y, xx, yy, w, h, c, z;
70 if (!m) m = evas_map_new(4);
71 evas_map_smooth_set(m, 0);
73 for (i = 0; i < CNUM; i++)
80 c = (i - (CNUM / 2)) * (w / 4);
81 c += (f % (6 * (w / 4)));
83 ang = (double)c / (double)center;
84 if (ang > 0.0) ang = ang * ang;
85 else ang = -ang * ang;
87 if (ang > 90.0) ang = 90.0;
88 else if (ang < -90.0) ang = -90.0;
90 if ((c > (-center)) && (c <= (center)))
92 n = (double)c / (double)center;
101 n = -(1.0 - (n * n));
103 c = n * center * 2.0;
105 else if (c <= (-center))
106 c = (c + center) - (center * 2);
107 else if (c > (center))
108 c = (c - center) + (center * 2);
111 if ((c > (-center)) && (c <= (center)))
113 z = (c * (w / 2)) / center;
128 evas_object_raise(o_images[i]);
129 evas_object_raise(o_reflec[i]);
133 evas_object_lower(o_images[i]);
134 evas_object_lower(o_reflec[i]);
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);
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);
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);
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);
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);
157 evas_object_map_enable_set(o_images[i], 1);
158 evas_object_map_set(o_images[i], m);
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);
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);
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);
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);
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);
180 evas_object_map_enable_set(o_reflec[i], 1);
181 evas_object_map_set(o_reflec[i], m);
187 /* prepend special key handlers if interactive (before STD) */
188 static void _key(char *key)
204 /* template stuff - ignore */
209 _ui_menu_item_add(ICON, NAME, FNAME);
220 ui_func_set(_key, _loop);