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_fill_set(st->base, 0, 0, w, h);
62 evas_object_pass_events_set(st->base, 1);
63 evas_object_image_source_set(st->base, st->orig);
64 evas_object_show(st->base);
68 evas_map_smooth_set(m, 0);
70 evas_map_point_coord_set(m, 0, x , y , 0);
71 evas_map_point_coord_set(m, 1, x + mx, y , 0);
72 evas_map_point_coord_set(m, 2, x + mx, y + h, 0);
73 evas_map_point_coord_set(m, 3, x , y + h, 0);
75 evas_map_point_image_uv_set(m, 0, 0 , 0);
76 evas_map_point_image_uv_set(m, 1, mx, 0);
77 evas_map_point_image_uv_set(m, 2, mx, h);
78 evas_map_point_image_uv_set(m, 3, 0 , h);
80 evas_map_point_color_set(m, 0, 255, 255, 255, 255);
81 evas_map_point_color_set(m, 1, 255, 255, 255, 255);
82 evas_map_point_color_set(m, 2, 255, 255, 255, 255);
83 evas_map_point_color_set(m, 3, 255, 255, 255, 255);
86 // FIXME: lighting should be manual with pt 0 and 3 being white and
87 // 2 and 3 matching the
88 evas_map_util_3d_lighting(m,
93 evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 512);
95 evas_object_map_enable_set(st->base, 1);
96 evas_object_map_set(st->base, m);
99 EINA_LIST_FREE(st->slices, sl)
101 evas_object_del(sl->obj);
105 // cylinder radius is width / 8
107 if (rad < (w / 16)) rad = (w / 16);
108 if (rad > (w / 8)) rad = w / 8;
115 for (i = 1; i < RES; i++)
117 sl = calloc(1, sizeof(Slice));
118 st->slices = eina_list_append(st->slices, sl);
119 sl->obj = evas_object_image_add(evas_object_evas_get(st->win));
120 evas_object_image_fill_set(sl->obj, 0, 0, w, h);
121 evas_object_pass_events_set(sl->obj, 1);
122 evas_object_image_source_set(sl->obj, st->orig);
123 evas_object_show(sl->obj);
125 rx = (double)rad * sin((i * M_PI) / RES);
126 ry = (double)rad * cos((i * M_PI) / RES);
129 dst = sqrt((dx * dx) + (dy * dy));
134 rx = prx + (((rx - prx) * dst) / pdst);
135 ry = pry + (((ry - pry) * dst) / pdst);
140 evas_map_smooth_set(m, 0);
142 evas_map_point_coord_set(m, 0, x + mx + prx, y , 0 - (rad - pry));
143 evas_map_point_coord_set(m, 1, x + mx + rx , y , 0 - (rad - ry ));
144 evas_map_point_coord_set(m, 2, x + mx + rx , y + h, 0 - (rad - ry ));
145 evas_map_point_coord_set(m, 3, x + mx + prx, y + h, 0 - (rad - pry));
147 evas_map_point_image_uv_set(m, 0, px , 0);
148 evas_map_point_image_uv_set(m, 1, px + dst, 0);
149 evas_map_point_image_uv_set(m, 2, px + dst, h);
150 evas_map_point_image_uv_set(m, 3, px , h);
152 evas_map_point_color_set(m, 0, 255, 255, 255, 255);
153 evas_map_point_color_set(m, 1, 255, 255, 255, 255);
154 evas_map_point_color_set(m, 2, 255, 255, 255, 255);
155 evas_map_point_color_set(m, 3, 255, 255, 255, 255);
157 evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 512);
159 evas_object_map_enable_set(sl->obj, 1);
160 evas_object_map_set(sl->obj, m);
169 sl = calloc(1, sizeof(Slice));
170 st->slices = eina_list_append(st->slices, sl);
171 sl->obj = evas_object_image_add(evas_object_evas_get(st->win));
172 evas_object_image_fill_set(sl->obj, 0, 0, w, h);
173 evas_object_pass_events_set(sl->obj, 1);
174 evas_object_image_source_set(sl->obj, st->orig);
175 evas_object_show(sl->obj);
178 evas_map_smooth_set(m, 0);
180 evas_map_point_coord_set(m, 0, x + mx + prx, y , 0 - (rad - pry));
181 evas_map_point_coord_set(m, 1, x + mx + (px - w) , y , 0 - (rad * 2 ));
182 evas_map_point_coord_set(m, 2, x + mx + (px - w) , y + h, 0 - (rad * 2 ));
183 evas_map_point_coord_set(m, 3, x + mx + prx, y + h, 0 - (rad - pry));
185 evas_map_point_image_uv_set(m, 0, px , 0);
186 evas_map_point_image_uv_set(m, 1, w, 0);
187 evas_map_point_image_uv_set(m, 2, w, h);
188 evas_map_point_image_uv_set(m, 3, px , h);
190 evas_map_point_color_set(m, 0, 255, 255, 255, 255);
191 evas_map_point_color_set(m, 1, 255, 255, 255, 255);
192 evas_map_point_color_set(m, 2, 255, 255, 255, 255);
193 evas_map_point_color_set(m, 3, 255, 255, 255, 255);
195 evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 512);
197 evas_object_map_enable_set(sl->obj, 1);
198 evas_object_map_set(sl->obj, m);
204 _slice_end(State *st)
207 EINA_LIST_FREE(st->slices, sl)
209 evas_object_del(sl->obj);
214 evas_object_del(st->base);
220 im_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
222 Evas_Event_Mouse_Down *ev = event_info;
223 Evas_Object *win = data;
226 if (ev->button != 1) return;
227 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
231 state.x = ev->canvas.x - x;
232 state.y = ev->canvas.y - y;
233 state.down_x = state.x;
234 state.down_y = state.y;
235 evas_object_lower(obj);
236 printf("v %i %i\n", state.x, state.y);
237 _slice_update(&state);
241 im_up_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
243 Evas_Event_Mouse_Up *ev = event_info;
244 Evas_Object *win = data;
247 if (ev->button != 1) return;
248 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
250 state.x = ev->canvas.x - x;
251 state.y = ev->canvas.y - y;
252 evas_object_raise(obj);
253 printf("^ %i %i\n", state.x, state.y);
258 im_move_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
260 Evas_Event_Mouse_Move *ev = event_info;
261 Evas_Object *win = data;
264 if (!state.down) return;
265 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
266 state.x = ev->cur.canvas.x - x;
267 state.y = ev->cur.canvas.y - y;
268 printf("@ %i %i\n", state.x, state.y);
269 _slice_update(&state);
273 test_flip_page(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
275 Evas_Object *win, *bg, *im;
278 win = elm_win_add(NULL, "flip_page", ELM_WIN_BASIC);
279 elm_win_title_set(win, "Flip Page");
280 elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
281 elm_win_autodel_set(win, 1);
283 bg = elm_bg_add(win);
284 elm_win_resize_object_add(win, bg);
285 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
286 evas_object_show(bg);
289 im = elm_layout_add(win);
290 snprintf(buf, sizeof(buf), "%s/objects/test.edj", PACKAGE_DATA_DIR);
291 elm_layout_file_set(im, buf, "layout");
293 im = evas_object_image_filled_add(evas_object_evas_get(win));
294 snprintf(buf, sizeof(buf), "%s/images/%s",
295 PACKAGE_DATA_DIR, "twofish.jpg");
296 evas_object_image_file_set(im, buf, NULL);
298 evas_object_move(im, 40, 40);
299 evas_object_resize(im, 400, 400);
300 evas_object_show(im);
302 evas_object_event_callback_add(im, EVAS_CALLBACK_MOUSE_DOWN, im_down_cb, win);
303 evas_object_event_callback_add(im, EVAS_CALLBACK_MOUSE_UP, im_up_cb, win);
304 evas_object_event_callback_add(im, EVAS_CALLBACK_MOUSE_MOVE, im_move_cb, win);
306 evas_object_resize(win, 480, 480);
307 evas_object_show(win);