1 #include <Elementary.h>
3 # include "elementary_config.h"
5 #ifndef ELM_LIB_QUICKLAUNCH
7 typedef struct _State State;
8 typedef struct _Slice Slice;
12 Evas_Object *orig, *win, *base;
13 Evas_Coord down_x, down_y;
36 _slice_update(State *st)
38 Evas_Coord x1, y1, x2, y2, mx, my, px, rx, ry, prx, pry, dst, dx, dy, pdst;
39 Evas_Coord x, y, w, h;
45 evas_object_geometry_get(st->orig, &x, &y, &w, &h);
54 else if (mx >= w) mx = w - 1;
56 else if (my >= h) my = h - 1;
60 st->base = evas_object_image_add(evas_object_evas_get(st->win));
61 evas_object_image_smooth_scale_set(st->base, 0);
62 evas_object_image_fill_set(st->base, 0, 0, w, h);
63 evas_object_pass_events_set(st->base, 1);
64 evas_object_image_source_set(st->base, st->orig);
65 evas_object_show(st->base);
69 evas_map_smooth_set(m, 0);
71 evas_map_point_coord_set(m, 0, x , y , 0);
72 evas_map_point_coord_set(m, 1, x + mx, y , 0);
73 evas_map_point_coord_set(m, 2, x + mx, y + h, 0);
74 evas_map_point_coord_set(m, 3, x , y + h, 0);
76 evas_map_point_image_uv_set(m, 0, 0 , 0);
77 evas_map_point_image_uv_set(m, 1, mx, 0);
78 evas_map_point_image_uv_set(m, 2, mx, h);
79 evas_map_point_image_uv_set(m, 3, 0 , h);
81 evas_map_point_color_set(m, 0, 255, 255, 255, 255);
82 evas_map_point_color_set(m, 1, 255, 255, 255, 255);
83 evas_map_point_color_set(m, 2, 255, 255, 255, 255);
84 evas_map_point_color_set(m, 3, 255, 255, 255, 255);
87 // FIXME: lighting should be manual with pt 0 and 3 being white and
88 // 2 and 3 matching the
89 evas_map_util_3d_lighting(m,
94 evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 512);
96 evas_object_map_enable_set(st->base, 1);
97 evas_object_map_set(st->base, m);
100 EINA_LIST_FREE(st->slices, sl)
102 evas_object_del(sl->obj);
106 // cylinder radius is width / 8
108 if (rad < (w / 16)) rad = (w / 16);
109 if (rad > (w / 8)) rad = w / 8;
116 for (i = 1; i < RES; i++)
118 sl = calloc(1, sizeof(Slice));
119 st->slices = eina_list_append(st->slices, sl);
120 sl->obj = evas_object_image_add(evas_object_evas_get(st->win));
121 evas_object_image_smooth_scale_set(sl->obj, 0);
122 evas_object_image_fill_set(sl->obj, 0, 0, w, h);
123 evas_object_pass_events_set(sl->obj, 1);
124 evas_object_image_source_set(sl->obj, st->orig);
125 evas_object_show(sl->obj);
127 rx = (double)rad * sin((i * M_PI) / RES);
128 ry = (double)rad * cos((i * M_PI) / RES);
131 dst = sqrt((dx * dx) + (dy * dy));
136 rx = prx + (((rx - prx) * dst) / pdst);
137 ry = pry + (((ry - pry) * dst) / pdst);
142 evas_map_smooth_set(m, 0);
144 evas_map_point_coord_set(m, 0, x + mx + prx, y , 0 - (rad - pry));
145 evas_map_point_coord_set(m, 1, x + mx + rx , y , 0 - (rad - ry ));
146 evas_map_point_coord_set(m, 2, x + mx + rx , y + h, 0 - (rad - ry ));
147 evas_map_point_coord_set(m, 3, x + mx + prx, y + h, 0 - (rad - pry));
149 evas_map_point_image_uv_set(m, 0, px , 0);
150 evas_map_point_image_uv_set(m, 1, px + dst, 0);
151 evas_map_point_image_uv_set(m, 2, px + dst, h);
152 evas_map_point_image_uv_set(m, 3, px , h);
154 evas_map_point_color_set(m, 0, 255, 255, 255, 255);
155 evas_map_point_color_set(m, 1, 255, 255, 255, 255);
156 evas_map_point_color_set(m, 2, 255, 255, 255, 255);
157 evas_map_point_color_set(m, 3, 255, 255, 255, 255);
159 evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 512);
161 evas_object_map_enable_set(sl->obj, 1);
162 evas_object_map_set(sl->obj, m);
171 sl = calloc(1, sizeof(Slice));
172 st->slices = eina_list_append(st->slices, sl);
173 sl->obj = evas_object_image_add(evas_object_evas_get(st->win));
174 evas_object_image_smooth_scale_set(sl->obj, 0);
175 evas_object_image_fill_set(sl->obj, 0, 0, w, h);
176 evas_object_pass_events_set(sl->obj, 1);
177 evas_object_image_source_set(sl->obj, st->orig);
178 evas_object_show(sl->obj);
181 evas_map_smooth_set(m, 0);
183 evas_map_point_coord_set(m, 0, x + mx + prx, y , 0 - (rad - pry));
184 evas_map_point_coord_set(m, 1, x + mx + (px - w) , y , 0 - (rad * 2 ));
185 evas_map_point_coord_set(m, 2, x + mx + (px - w) , y + h, 0 - (rad * 2 ));
186 evas_map_point_coord_set(m, 3, x + mx + prx, y + h, 0 - (rad - pry));
188 evas_map_point_image_uv_set(m, 0, px , 0);
189 evas_map_point_image_uv_set(m, 1, w, 0);
190 evas_map_point_image_uv_set(m, 2, w, h);
191 evas_map_point_image_uv_set(m, 3, px , h);
193 evas_map_point_color_set(m, 0, 255, 255, 255, 255);
194 evas_map_point_color_set(m, 1, 255, 255, 255, 255);
195 evas_map_point_color_set(m, 2, 255, 255, 255, 255);
196 evas_map_point_color_set(m, 3, 255, 255, 255, 255);
198 evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 512);
200 evas_object_map_enable_set(sl->obj, 1);
201 evas_object_map_set(sl->obj, m);
207 _slice_end(State *st)
210 EINA_LIST_FREE(st->slices, sl)
212 evas_object_del(sl->obj);
217 evas_object_del(st->base);
223 im_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
225 Evas_Event_Mouse_Down *ev = event_info;
226 Evas_Object *win = data;
229 if (ev->button != 1) return;
230 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
234 state.x = ev->canvas.x - x;
235 state.y = ev->canvas.y - y;
236 state.down_x = state.x;
237 state.down_y = state.y;
238 evas_object_lower(obj);
239 printf("v %i %i\n", state.x, state.y);
240 _slice_update(&state);
244 im_up_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
246 Evas_Event_Mouse_Up *ev = event_info;
247 Evas_Object *win = data;
250 if (ev->button != 1) return;
251 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
253 state.x = ev->canvas.x - x;
254 state.y = ev->canvas.y - y;
255 evas_object_raise(obj);
256 printf("^ %i %i\n", state.x, state.y);
261 im_move_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
263 Evas_Event_Mouse_Move *ev = event_info;
264 Evas_Object *win = data;
267 if (!state.down) return;
268 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
269 state.x = ev->cur.canvas.x - x;
270 state.y = ev->cur.canvas.y - y;
271 printf("@ %i %i\n", state.x, state.y);
272 _slice_update(&state);
276 test_flip_page(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
278 Evas_Object *win, *bg, *im;
281 win = elm_win_add(NULL, "flip_page", ELM_WIN_BASIC);
282 elm_win_title_set(win, "Flip Page");
283 elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
284 elm_win_autodel_set(win, 1);
286 bg = elm_bg_add(win);
287 elm_win_resize_object_add(win, bg);
288 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
289 evas_object_show(bg);
292 im = elm_layout_add(win);
293 snprintf(buf, sizeof(buf), "%s/objects/test.edj", PACKAGE_DATA_DIR);
294 elm_layout_file_set(im, buf, "layout");
296 im = evas_object_image_filled_add(evas_object_evas_get(win));
297 snprintf(buf, sizeof(buf), "%s/images/%s",
298 PACKAGE_DATA_DIR, "twofish.jpg");
299 evas_object_image_file_set(im, buf, NULL);
301 evas_object_move(im, 40, 40);
302 evas_object_resize(im, 400, 400);
303 evas_object_show(im);
305 evas_object_event_callback_add(im, EVAS_CALLBACK_MOUSE_DOWN, im_down_cb, win);
306 evas_object_event_callback_add(im, EVAS_CALLBACK_MOUSE_UP, im_up_cb, win);
307 evas_object_event_callback_add(im, EVAS_CALLBACK_MOUSE_MOVE, im_move_cb, win);
309 evas_object_resize(win, 480, 480);
310 evas_object_show(win);