static Eina_Bool key_cb(void *data, int type, void *event) { Evas_Object *video = (Evas_Object *)data; Ecore_Event_Key *kev = (Ecore_Event_Key*)event; const Evas_Map *const_m = evas_object_map_get(video); Evas_Map *m = evas_map_dup(const_m); static double dx = 0; static double dy = 0; static double dz = 0; if(strcmp(kev->keyname, "Right") == 0) { dx += 0.1; } else if(strcmp(kev->keyname, "Left") == 0) { dx -= 0.1; } else if(strcmp(kev->keyname, "Up") == 0) { dy += 0.1; } else if(strcmp(kev->keyname, "Down") == 0) { dy -= 0.1; } else { printf("name:%s\n", kev->keyname); evas_map_free(m); return EINA_FALSE; } printf("dx:%f dy:%f dz:%f\n", dx, dy, dz); evas_map_util_3d_rotate(m, dx, dy, dz, 0, 0, 0); evas_object_map_set(video, m); evas_map_free(m); return EINA_TRUE; }
static int _rotate(void *data) { Smart_Data *sd = data; double t = ecore_loop_time_get() - sd->start; Evas_Coord x, y, w, h; double p, deg = 0.0; Evas_Map *map; Evas_Object *photocam; Elm_Slideshow_Item *item; item = elm_slideshow_item_current_get(sd->slideshow); if(!item) return 1; photocam = elm_slideshow_item_object_get(item); if (!sd->animator) return 0; t = t / ROTATION_DURATION; if (t > 1.0) t = 1.0; evas_object_geometry_get(photocam, &x, &y, &w, &h); map = evas_map_new(4); evas_map_smooth_set(map, 0); if (photocam) evas_map_util_points_populate_from_object_full(map, photocam, 0); x += (w / 2); y += (h / 2); p = 1.0 - t; p = 1.0 - (p * p); if (sd->mode) deg = 90.0 * p + sd->state * 90; else deg = - ((3 - sd->state) * 90.0) - (90.0 * p); evas_map_util_3d_rotate(map, 0.0, 0.0, deg, x, y, 0); evas_object_map_set(photocam, map); evas_object_map_enable_set(photocam, 1); evas_map_free(map); if (t >= 1.0) { sd->animator = NULL; return 0; } return 1; }
static void _cube_pos(Cube *c, Evas_Coord x, Evas_Coord y, Evas_Coord z, double dx, double dy, double dz, Evas_Coord cx, Evas_Coord cy, Evas_Coord foc, Evas_Coord z0) { Evas_Map *m; int i, j, order[6], sorted; Evas_Coord mz[6]; m = evas_map_new(4); evas_map_smooth_set(m, 0); for (i = 0; i < 6; i++) { Evas_Coord tz[4]; for (j = 0; j < 4; j++) { evas_map_point_coord_set(m, j, c->side[i].pt[j].x + x, c->side[i].pt[j].y + y, c->side[i].pt[j].z + z); evas_map_point_image_uv_set(m, j, c->side[i].pt[j].u, c->side[i].pt[j].v); evas_map_point_color_set(m, j, 255, 255, 255, 255); } evas_map_util_3d_rotate(m, dx, dy, dz, x, y, z); evas_map_util_3d_lighting(m, -1000, -1000, -1000, 255, 255, 255, 20, 20, 20); evas_map_util_3d_perspective(m, cx, cy, foc, z0); if (evas_map_util_clockwise_get(m)) { evas_object_map_enable_set(c->side[i].o, 1); evas_object_map_set(c->side[i].o, m); evas_object_show(c->side[i].o); } else evas_object_hide(c->side[i].o); order[i] = i; for (j = 0; j < 4; j++) evas_map_point_coord_get(m, j, NULL, NULL, &(tz[j])); mz[i] = (tz[0] + tz[1] + tz[2] + tz[3]) / 4; } sorted = 0; do { sorted = 1; for (i = 0; i < 5; i++) { if (mz[order[i]] > mz[order[i + 1]]) { j = order[i]; order[i] = order[i + 1]; order[i + 1] = j; sorted = 0; } } } while (!sorted); evas_object_raise(c->side[order[0]].o); for (i = 1; i < 6; i++) evas_object_stack_below(c->side[order[i]].o, c->side[order[i - 1]].o); evas_map_free(m); }
static Eina_Bool _anim_cb(void *data) { App_Data *ad = data; Evas_Map *m; Evas_Object *o; int r, g, b, a; int win_w, win_h, img_w, img_h; Evas_Coord x, y, w, h; evas_output_size_get(ad->canvas, &win_w, &win_h); m = evas_map_new(4); evas_map_smooth_set(m, ad->smooth); evas_map_alpha_set(m, ad->alpha); r = ad->colors[ad->colors_index].r; g = ad->colors[ad->colors_index].g; b = ad->colors[ad->colors_index].b; a = ad->colors[ad->colors_index].a; evas_map_util_points_color_set(m, r, g, b, a); o = evas_object_name_find(ad->canvas, "obj1"); evas_object_geometry_get(o, &x, &y, &w, &h); evas_map_util_points_populate_from_object(m, o); evas_map_util_rotate(m, 3 * ad->frame, x + (w / 2), y + (h / 2)); evas_object_map_set(o, m); evas_object_map_enable_set(o, EINA_TRUE); o = evas_object_name_find(ad->canvas, "obj2"); evas_object_geometry_get(o, &x, &y, &w, &h); evas_object_image_size_get(o, &img_w, &img_h); evas_map_util_points_populate_from_object_full(m, o, 100); evas_map_point_image_uv_set(m, 0, 0, 0); evas_map_point_image_uv_set(m, 1, img_w, 0); evas_map_point_image_uv_set(m, 2, img_w, img_h); evas_map_point_image_uv_set(m, 3, 0, img_h); evas_map_util_3d_rotate(m, ad->frame * 6, ad->frame * 6, ad->frame * 6, x + (w / 3), y + 10, 0); if (ad->apply_lighting) evas_map_util_3d_lighting(m, win_w / 2, win_h / 2, -100, 255, 255, 255, 0, 0, 0); evas_object_map_set(o, m); evas_object_map_enable_set(o, EINA_TRUE); o = evas_object_name_find(ad->canvas, "obj3"); evas_object_geometry_get(o, &x, &y, &w, &h); evas_object_image_size_get(o, &img_w, &img_h); evas_map_util_points_populate_from_geometry(m, x, y + (h / 2), w, h, -20); evas_map_point_image_uv_set(m, 0, 0, 0); evas_map_point_image_uv_set(m, 1, img_w, 0); evas_map_point_image_uv_set(m, 2, img_w, img_h); evas_map_point_image_uv_set(m, 3, 0, img_h); evas_map_util_3d_rotate(m, 20, ad->frame * 6, 0, x + (w / 2), y + (w / 2), w / 2); if (ad->apply_perspective) evas_map_util_3d_perspective(m, x + (w / 2), y + (h / 2), 0, 256); if (ad->apply_lighting) { Evas_Coord mx, my; evas_pointer_canvas_xy_get(ad->canvas, &mx, &my); evas_map_util_3d_lighting(m, mx, my, -256, 255, 255, 255, 0, 0, 0); } if (ad->backface_culling) { if (evas_map_util_clockwise_get(m)) evas_object_show(o); else evas_object_hide(o); } else evas_object_show(o); evas_object_map_set(o, m); evas_object_map_enable_set(o, EINA_TRUE); evas_map_free(m); o = evas_object_name_find(ad->canvas, "obj4"); evas_object_geometry_get(o, &x, &y, &w, &h); evas_object_image_size_get(o, &img_w, &img_h); m = evas_map_new(4); evas_map_point_coord_set(m, 0, x, y + h, 0); evas_map_point_coord_set(m, 1, x + w, y + h, 0); evas_map_point_coord_set(m, 2, win_w - 10, win_h - 30, 0); evas_map_point_coord_set(m, 3, (win_w / 2) + 10, win_h - 30, 0); evas_map_point_image_uv_set(m, 0, 0, img_h); evas_map_point_image_uv_set(m, 1, img_w, img_h); evas_map_point_image_uv_set(m, 2, img_w, 2 * (img_h / 3)); evas_map_point_image_uv_set(m, 3, 0, 2 * (img_h / 3)); evas_map_point_color_set(m, 0, 200, 200, 200, 150); evas_map_point_color_set(m, 1, 200, 200, 200, 150); evas_map_point_color_set(m, 2, 0, 0, 0, 0); evas_map_point_color_set(m, 3, 0, 0, 0, 0); evas_object_map_set(o, m); evas_object_map_enable_set(o, EINA_TRUE); evas_map_free(m); ad->frame = (ad->frame + 1) % 60; return EINA_TRUE; }