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 = efl_add(EFL_CANVAS_IMAGE_CLASS, evas);
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);
41 o = efl_add(EFL_CANVAS_IMAGE_CLASS, evas);
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);
54 static void _cleanup(void)
57 for (i = 0; i < CNUM; i++)
64 /* loop - do things */
65 static void _loop(double t, int f)
68 static Evas_Map *m = NULL;
69 Evas_Coord x, y, xx, yy, w, h, c, z;
73 if (!m) m = evas_map_new(4);
74 evas_map_smooth_set(m, 0);
76 for (i = 0; i < CNUM; i++)
83 c = (i - (CNUM / 2)) * (w / 4);
84 c += (f % (6 * (w / 4)));
86 ang = (double)c / (double)center;
87 if (ang > 0.0) ang = ang * ang;
88 else ang = -ang * ang;
90 if (ang > 90.0) ang = 90.0;
91 else if (ang < -90.0) ang = -90.0;
93 if ((c > (-center)) && (c <= (center)))
95 n = (double)c / (double)center;
104 n = -(1.0 - (n * n));
106 c = n * center * 2.0;
108 else if (c <= (-center))
109 c = (c + center) - (center * 2);
110 else if (c > (center))
111 c = (c - center) + (center * 2);
114 if ((c > (-center)) && (c <= (center)))
116 z = (c * (w / 2)) / center;
131 efl_gfx_stack_raise_to_top(o_images[i]);
132 efl_gfx_stack_raise_to_top(o_reflec[i]);
136 efl_gfx_stack_lower_to_bottom(o_images[i]);
137 efl_gfx_stack_lower_to_bottom(o_reflec[i]);
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);
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);
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);
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);
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);
160 evas_object_map_enable_set(o_images[i], 1);
161 evas_object_map_set(o_images[i], m);
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);
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);
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);
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);
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);
183 evas_object_map_enable_set(o_reflec[i], 1);
184 evas_object_map_set(o_reflec[i], m);
190 /* prepend special key handlers if interactive (before STD) */
191 static void _key(const char *key)
207 /* template stuff - ignore */
212 _ui_menu_item_add(ICON, NAME, FNAME);
223 ui_func_set(_key, _loop, _setup);