Eina_Bool animator_rotate_dashes(animator_callback_gui_shared_info_s *common_data) { int i; static int curr_step = 1; if (common_data->rotation.direction == LEFT){ curr_step--; } else { curr_step++; } double angle = curr_step * common_data->game.rotation_degree * common_data->game.turning_speed * REFRESH_SPEED; Evas_Coord x,y,w,h; Evas_Object **dashes = common_data->gui.dashes; /* array! */ Evas_Map *dashes_maps[DASHES_COUNT]; for (i=0;i<DASHES_COUNT;i++) { dashes_maps[i] = evas_map_new(4); evas_object_geometry_get(dashes[i], &x, &y, &w, &h); evas_map_util_points_populate_from_object(dashes_maps[i], dashes[i]); evas_map_util_rotate(dashes_maps[i], DASHES_INIT[i].rotation, x + DASH_LEN/2, y + DASH_LEN/2); evas_map_util_rotate(dashes_maps[i], angle, CENTER_X, CENTER_Y); evas_object_map_set(dashes[i], dashes_maps[i]); evas_object_map_enable_set(dashes[i], EINA_TRUE); evas_map_free(dashes_maps[i]); } #ifdef does_not_want_inertion if (--common_data->steps == 0) #endif ecore_animator_freeze(common_data->dash_animator); return ECORE_CALLBACK_RENEW; }
void efx_rotate_helper(EFX *e, Evas_Object *obj, Evas_Map *map, double degrees) { if (e->map_data.rotate_center) evas_map_util_rotate(map, degrees, e->map_data.rotate_center->x, e->map_data.rotate_center->y); else { Evas_Coord x, y, w, h; evas_object_geometry_get(obj, &x, &y, &w, &h); evas_map_util_rotate(map, degrees, x + (w / 2), y + (h / 2)); } //DBG("rotation: %g", degrees); // _size_debug(e->obj); }
/* loop - do things */ static void _loop(double t, int f) { int i; static Evas_Map *m = NULL; Evas_Coord x, y, w, h; if (!m) m = evas_map_new(4); evas_map_smooth_set(m, 0); for (i = 0; i < (OBNUM / 2); i++) { w = 120; h = 160; x = (win_w / 2) - (w / 2); x += sin((double)(f + (i * 13)) / (36.7 * SLOW)) * (w / 2); y = (win_h / 2) - (h / 2); y += cos((double)(f + (i * 28)) / (43.8 * SLOW)) * (h / 2); evas_map_util_points_populate_from_geometry(m, x, y, w, h, 0); evas_map_util_rotate(m, f, x + (w / 2), y + (h / 2)); evas_object_map_enable_set(o_images[i], 1); evas_object_map_set(o_images[i], m); } FPS_STD(NAME); }
int main(void) { id_keeper = id_keeper_init(1000); //хеш хранения всех объектов по id struct ui_object wconf; wconf.h = 800; wconf.w = 1600; int64_t main_id = ui_frame_create_window(&wconf); //printf("id is %d\n", main_id); //struct ui_frame *main = (struct ui_frame*) id_keeper->id_array[main_id]; // printf("Hello %d\n", main->canvas); //Evas_Object *bg, *r1, *r2, *r3; //bg = evas_object_rectangle_add(main->canvas); //evas_object_color_set(bg, 255, 255, 255,150); // white bg //evas_object_move(bg, 100, 100); // at origin //evas_object_resize(bg, main->ui.w, main->ui.h); // covers full canvas //evas_object_show(bg); // Evas_Object *grid = evas_object_grid_add(main->canvas); //evas_object_grid_size_set(grid, 400, 400); //evas_object_show(grid); struct ui_object frame_ui; frame_ui.h = 600; frame_ui.w = 1000; int64_t main_f = ui_evas_frame_create(main_id, &frame_ui); //Evas_Object *main_f = evas_smart_frame_add(main->canvas); //evas_object_move(main_f, 20, 20); // evas_object_resize(main_f, 100, 100); //evas_object_show(main_f); //rotate Evas_Map *m = evas_map_new(4); evas_map_util_points_populate_from_object(m, main_f); int cx, cy, cw, ch; evas_object_geometry_get(main_f, &cx, &cy, &cw, &ch); evas_map_util_rotate(m, 30, cx + cw, cy + ch); evas_object_map_enable_set(main_f, EINA_TRUE); evas_object_map_set(main_f, m); puts("initial scene, with just background:"); /* // Evas_Object *cube = evas_object_rectangle_add(canvas_win); Evas_Object *cube = evas_object_image_filled_add(main->canvas); evas_object_image_file_set(cube, "./balalaika.svg", NULL); evas_object_color_set(cube, 0, 255, 255, 200); // white bg evas_object_move(cube, 700, 400); // at origin int csize[2]; csize[0] = 30; csize[1] = 20; int cpos[2]; cpos[0] = 700; cpos[1] = 400; // evas_object_resize(cube, csize[0], csize[1]); // covers full canvas evas_object_resize(cube, 400, 300); // covers full canvas evas_object_show(cube); // evas_object_anti_alias_set(cube, 1); // evas_object_render_op_set(cube, EVAS_RENDER_BLEND); // evas_object_image_smooth_scale_set(cube, EINA_TRUE); int deg = 1; int cx, cy, cw, ch; Evas_Map *m = evas_map_new(4); // evas_map_point_image_uv_set(m, 0, 0, 0); // evas_map_point_image_uv_set(m, 1, 150, 0); //evas_map_point_image_uv_set(m, 2, 150, 200); //evas_map_point_image_uv_set(m, 3, 0, 200); Ecore_Task_Cb _cube_anim(void *data){ evas_map_util_points_populate_from_object(m, cube); evas_object_geometry_get(cube, &cx, &cy, &cw, &ch); evas_map_util_rotate(m, ++deg, cx + cw, cy + ch); evas_object_map_enable_set(cube, EINA_TRUE); evas_object_map_set(cube, m); evas_object_move(cube, (cpos[0] = cpos[0] - 5) >=0 ? cpos[0] : 0, (cpos[1] = cpos[1] - 5) >=0 ? cpos[1] : 0); evas_object_resize(cube, csize[0] = csize[0] + 1, csize[1] = csize[1] + 1); //evas_object_image_filled_set(cube, EINA_TRUE); //evas_render(canvas_win); return ECORE_CALLBACK_DONE; // Ecore_Timer *timer1 = ecore_timer_loop_add(0.4, timer_func, NULL); } ecore_animator_frametime_set(1./30); Ecore_Animator *anim = ecore_animator_add(_cube_anim,cube); // ecore_animator_timeline_add(20,_cube_anim, cube); ecore_animator_thaw(anim); */ ecore_main_loop_begin(); //ecore_animator_del(anim); //evas_map_free(m); //*/ // destroy_canvas(main->datacanvas); evas_shutdown(); return 0; }
/* This function applies the information from the Photo_Object to the actual * evas objects. Zoom/rotate factors and etc. */ static void apply_changes(Photo_Object *po) { Evas_Map *map; map = evas_map_new(4); evas_map_point_coord_set(map, 0, po->bx, po->by, 0); evas_map_point_coord_set(map, 1, po->bx + po->bw, po->by, 0); evas_map_point_coord_set(map, 2, po->bx + po->bw, po->by + po->bh, 0); evas_map_point_coord_set(map, 3, po->bx, po->by + po->bh, 0); evas_map_point_image_uv_set(map, 0, 0, 0); evas_map_point_image_uv_set(map, 1, po->bw, 0); evas_map_point_image_uv_set(map, 2, po->bw, po->bh); evas_map_point_image_uv_set(map, 3, 0, po->bh); evas_map_util_rotate(map, po->rotate, po->bx + po->bw / 2, po->by + po->bh /2); evas_map_util_zoom(map, po->zoom, po->zoom, po->bx + po->bw / 2, po->by + po->bh /2); evas_object_map_enable_set(po->ic, EINA_TRUE); evas_object_map_set(po->ic, map); { Evas_Map *shadow_map = evas_map_new(4); evas_map_point_coord_set(shadow_map, 0, po->bx, po->by, 0); evas_map_point_coord_set(shadow_map, 1, po->bx + po->bw, po->by, 0); evas_map_point_coord_set(shadow_map, 2, po->bx + po->bw, po->by + po->bh, 0); evas_map_point_coord_set(shadow_map, 3, po->bx, po->by + po->bh, 0); evas_map_point_image_uv_set(shadow_map, 0, 0, 0); evas_map_point_image_uv_set(shadow_map, 1, SHADOW_W, 0); evas_map_point_image_uv_set(shadow_map, 2, SHADOW_W, SHADOW_H); evas_map_point_image_uv_set(shadow_map, 3, 0, SHADOW_H); evas_map_util_rotate(shadow_map, po->rotate, po->bx + po->bw / 2, po->by + po->bh /2); evas_map_util_zoom(shadow_map, po->zoom * po->shadow_zoom, po->zoom * po->shadow_zoom, po->bx + (po->bw / 2), po->by + (po->bh / 2)); evas_object_map_enable_set(po->shadow, EINA_TRUE); evas_object_map_set(po->shadow, shadow_map); evas_map_free(shadow_map); } /* Update the position of the hit box */ { Evas_Coord minx, miny, maxx, maxy; int i; evas_object_polygon_points_clear(po->hit); evas_map_point_coord_get(map, 0, &minx, &miny, NULL); maxx = minx; maxy = miny; evas_object_polygon_point_add(po->hit, minx, miny); for (i = 1 ; i <= 3 ; i++) { Evas_Coord x, y; evas_map_point_coord_get(map, i, &x, &y, NULL); evas_object_polygon_point_add(po->hit, x, y); if (x < minx) minx = x; else if (x > maxx) maxx = x; if (y < miny) miny = y; else if (y > maxy) maxy = y; } } evas_object_raise(po->shadow); evas_object_raise(po->ic); evas_object_raise(po->hit); evas_map_free(map); }
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; }