Tizen Native API
6.0
|
elm_transit - Combined effects over two objects.
This example shows how to apply the transition effects:
- flip
- resizable_flip
- fade
- blend over two objects. This kind of transition effect is used to make one object disappear and another one appear on its place.
You can mix more than one effect of this type on the same objects, and the transition will apply both.
//Compile with: //gcc -o transit_example_04 transit_example_04.c `pkg-config --cflags --libs elementary` -DDATA_DIR="\"<directory>\"" //where directory is the a path where images/icon_07.png can be found. #include <Elementary.h> static void _transit_flip(Elm_Transit *trans) { elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE); } static void _transit_blend(Elm_Transit *trans) { elm_transit_effect_blend_add(trans); } static void _transit_fade(Elm_Transit *trans) { elm_transit_effect_fade_add(trans); } static void _transit_resizable_flip(Elm_Transit *trans) { elm_transit_effect_resizable_flip_add( trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE); } static struct { const char *label; void (*transition_add_cb)(Elm_Transit *); Eina_Bool checked; } _transitions[] = { { "Flip", _transit_flip, EINA_FALSE }, { "Blend", _transit_blend, EINA_FALSE }, { "Fade", _transit_fade, EINA_FALSE }, { "Resizable Flip", _transit_resizable_flip, EINA_FALSE }, { NULL, NULL, EINA_FALSE } }; static void _checkbox_transition_add(Evas_Object *box, const char *label, Eina_Bool *checked) { Evas_Object *check = elm_check_add(box); evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(check, 0.0, 0.0); elm_object_text_set(check, label); elm_check_state_pointer_set(check, checked); elm_box_pack_end(box, check); evas_object_show(check); } static void _transit_start(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED) { Elm_Transit *trans = NULL; Eina_List *objs = data, *l; Evas_Object *obj; int i; trans = elm_transit_add(); EINA_LIST_FOREACH(objs, l, obj) elm_transit_object_add(trans, obj); // FIXME: Should check if there's another transit going before starting a new // one for (i = 0; _transitions[i].label; i++) { if (_transitions[i].checked) _transitions[i].transition_add_cb(trans); } elm_transit_duration_set(trans, 2.0); elm_transit_go(trans); } EAPI_MAIN int elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED) { Evas_Object *win, *icon, *box, *hbox, *btn, *rect; Eina_List *objs = NULL; char buf[PATH_MAX]; int i; elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); elm_app_info_set(elm_main, "elementary", "images/icon_07.png"); /* add a window */ win = elm_win_util_standard_add("transit", "Transit Example"); elm_win_autodel_set(win, EINA_TRUE); box = elm_box_add(win); evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, box); evas_object_show(box); /* add an object that we are going to play with */ btn = elm_button_add(win); evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0); elm_object_text_set(btn, "Transformed object!"); icon = elm_icon_add(win); snprintf(buf, sizeof(buf), "%s/images/icon_07.png", elm_app_data_dir_get()); elm_image_file_set(icon, buf, NULL); elm_object_part_content_set(btn, "icon", icon); evas_object_move(btn, 50, 50); evas_object_resize(btn, 200, 50); evas_object_show(btn); objs = eina_list_append(objs, btn); /* add another object that we are going to play with */ btn = elm_button_add(win); evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0); elm_object_text_set(btn, "Another object!"); icon = elm_icon_add(win); snprintf(buf, sizeof(buf), "%s/images/icon_08.png", elm_app_data_dir_get()); elm_image_file_set(icon, buf, NULL); elm_object_part_content_set(btn, "icon", icon); evas_object_move(btn, 50, 50); evas_object_resize(btn, 200, 50); objs = eina_list_append(objs, btn); hbox = elm_box_add(win); elm_box_horizontal_set(hbox, EINA_TRUE); evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, 0.0); elm_box_pack_end(box, hbox); evas_object_show(hbox); for (i = 0; _transitions[i].label; i++) _checkbox_transition_add(hbox, _transitions[i].label, &_transitions[i].checked); btn = elm_button_add(win); evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_text_set(btn, "Transit!"); elm_box_pack_end(hbox, btn); evas_object_show(btn); evas_object_smart_callback_add(btn, "clicked", _transit_start, objs); rect = evas_object_rectangle_add(evas_object_evas_get(win)); evas_object_color_set(rect, 0, 0, 0, 0); evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_box_pack_end(box, rect); evas_object_show(rect); evas_object_resize(win, 300, 100); evas_object_show(win); elm_run(); return 0; } ELM_MAIN()