exactness/src/bin/test_transit.c

591 lines
16 KiB
C

#include <Elementary.h>
#include "tsuite.h"
typedef struct _Custom_Effect Custom_Effect;
struct _Custom_Effect
{
struct _size
{
Evas_Coord w, h;
} from, to;
};
static void
_custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
{
if (!effect) return;
Evas_Coord w, h;
Evas_Object *obj;
const Eina_List *elist;
Custom_Effect *custom_effect = effect;
const Eina_List *objs = elm_transit_objects_get(transit);
if (progress < 0.5)
{
h = custom_effect->from.h + (custom_effect->to.h * progress * 2);
w = custom_effect->from.w;
}
else
{
h = custom_effect->from.h + custom_effect->to.h;
w = custom_effect->from.w + \
(custom_effect->to.w * (progress - 0.5) * 2);
}
EINA_LIST_FOREACH(objs, elist, obj)
evas_object_resize(obj, w, h);
}
static Elm_Transit_Effect *
_custom_context_new(Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h)
{
Custom_Effect *custom_effect;
custom_effect = calloc(1, sizeof(Custom_Effect));
if (!custom_effect) return NULL;
custom_effect->from.w = from_w;
custom_effect->from.h = from_h;
custom_effect->to.w = to_w - from_w;
custom_effect->to.h = to_h - from_h;
return custom_effect;
}
static void
_custom_context_free(Elm_Transit_Effect *effect, Elm_Transit *transit __UNUSED__)
{
Custom_Effect *custom_effect = effect;
free(custom_effect);
}
static void
_transit_rotation_translation_color(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_auto_reverse_set(trans, EINA_TRUE);
elm_transit_repeat_times_set(trans, 2);
/* Translation Effect */
elm_transit_effect_translation_add(trans, -70.0, -150.0, 70.0, 150.0);
/* Color Effect */
elm_transit_effect_color_add(trans, 100, 255, 100, 255, 200, 50, 200, 50);
/* Rotation Effect */
elm_transit_effect_rotation_add(trans, 0.0, 135.0);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
static void
_transit_wipe(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_auto_reverse_set(trans, EINA_TRUE);
elm_transit_effect_wipe_add(trans,
ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE,
ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
static void
_transit_del_cb(void *data, Elm_Transit *transit __UNUSED__)
{
evas_object_freeze_events_set(data, EINA_FALSE);
}
static void
_transit_image_animation(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Eina_List *images = NULL;
char buf[PATH_MAX];
Elm_Transit *trans;
Evas_Object *ic = data;
snprintf(buf, sizeof(buf), "%s/images/icon_19.png", elm_app_data_dir_get());
images = eina_list_append(images, eina_stringshare_add(buf));
snprintf(buf, sizeof(buf), "%s/images/icon_00.png", elm_app_data_dir_get());
images = eina_list_append(images, eina_stringshare_add(buf));
snprintf(buf, sizeof(buf), "%s/images/icon_11.png", elm_app_data_dir_get());
images = eina_list_append(images, eina_stringshare_add(buf));
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
images = eina_list_append(images, eina_stringshare_add(buf));
trans = elm_transit_add();
elm_transit_del_cb_set(trans, _transit_del_cb, obj);
elm_transit_object_add(trans, ic);
elm_transit_effect_image_animation_add(trans, images);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
evas_object_freeze_events_set(obj, EINA_TRUE);
}
static void
_transit_resizing(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_effect_resizing_add(trans, 100, 50, 300, 150);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
static void
_transit_flip(void *data, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Transit *trans;
Evas_Object *obj2 = data;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
static void
_transit_zoom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_effect_zoom_add(trans, 1.0, 3.0);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
static void
_transit_blend(void *data, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Transit *trans;
Evas_Object *obj2 = data;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_blend_add(trans);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
static void
_transit_fade(void *data, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Transit *trans;
Evas_Object *obj2 = data;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_fade_add(trans);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
static void
_transit_resizable_flip(void *data, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Transit *trans;
Evas_Object *obj2 = data;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_resizable_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
elm_transit_duration_set(trans, 5.0);
elm_transit_go(trans);
}
/* Translation, Rotation, Color, Wipe, ImagemAnimation Effect */
TEST_START(test_transit)
{
Evas_Object *bg, *bx, *bt, *ic;
char buf[PATH_MAX];
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bx);
evas_object_size_hint_min_set(bx, 318, 318);
evas_object_show(bx);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/icon_11.png", elm_app_data_dir_get());
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
bt = elm_button_add(win);
elm_object_text_set(bt, "ImageAnimation Effect");
elm_object_content_set(bt, ic);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_show(ic);
evas_object_smart_callback_add(bt, "clicked", _transit_image_animation, ic);
bt = elm_button_add(win);
elm_object_text_set(bt, "Color, Rotation and Translation");
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_smart_callback_add(bt, "clicked",
_transit_rotation_translation_color, NULL);
bt = elm_button_add(win);
elm_object_text_set(bt, "Wipe Effect");
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_smart_callback_add(bt, "clicked", _transit_wipe, NULL);
evas_object_show(win);
}
TEST_END
/* Resizing Effect */
TEST_START(test_transit2)
{
Evas_Object *bg, *bt;
evas_object_resize(win, 400, 400);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bt = elm_button_add(win);
elm_object_text_set(bt, "Resizing Effect");
evas_object_show(bt);
evas_object_move(bt, 50, 100);
evas_object_resize(bt, 100, 50);
evas_object_smart_callback_add(bt, "clicked", _transit_resizing, NULL);
evas_object_resize(win, 400, 400);
evas_object_show(win);
}
TEST_END
/* Flip Effect */
TEST_START(test_transit3)
{
Evas_Object *bg, *bt, *bt2;
evas_object_resize(win, 300, 300);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bt = elm_button_add(win);
elm_object_text_set(bt, "Front Button - Flip Effect");
evas_object_show(bt);
evas_object_move(bt, 50, 50);
evas_object_resize(bt, 200, 200);
bt2 = elm_button_add(win);
elm_object_text_set(bt2, "Back Button - Flip Effect");
evas_object_move(bt2, 50, 50);
evas_object_resize(bt2, 200, 200);
evas_object_resize(win, 300, 300);
evas_object_show(win);
evas_object_smart_callback_add(bt, "clicked", _transit_flip, bt2);
evas_object_smart_callback_add(bt2, "clicked", _transit_flip, bt);
}
TEST_END
/* Zoom Effect */
TEST_START(test_transit4)
{
Evas_Object *bg, *bt;
evas_object_resize(win, 300, 300);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bt = elm_button_add(win);
elm_object_text_set(bt, "Zoom Effect");
evas_object_resize(bt, 100, 50);
evas_object_move(bt, 100, 125);
evas_object_show(bt);
evas_object_smart_callback_add(bt, "clicked", _transit_zoom, NULL);
evas_object_resize(win, 300, 300);
evas_object_show(win);
}
TEST_END
/* Blend Effect */
TEST_START(test_transit5)
{
Evas_Object *bg, *bt, *bt2, *ic;
char buf[PATH_MAX];
evas_object_resize(win, 300, 300);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get());
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_max_set(ic, 50, 50);
bt = elm_button_add(win);
elm_object_content_set(bt, ic);
elm_object_text_set(bt, "Before Button - Blend Effect");
evas_object_move(bt, 25, 125);
evas_object_resize(bt, 250, 50);
evas_object_show(bt);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/rock_02.jpg", elm_app_data_dir_get());
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_max_set(ic, 50, 50);
bt2 = elm_button_add(win);
elm_object_content_set(bt2, ic);
elm_object_text_set(bt2, "After Button - Blend Effect");
evas_object_move(bt2, 25, 125);
evas_object_resize(bt2, 250, 50);
evas_object_resize(win, 300, 300);
evas_object_show(win);
evas_object_smart_callback_add(bt, "clicked", _transit_blend, bt2);
evas_object_smart_callback_add(bt2, "clicked", _transit_blend, bt);
}
TEST_END
/* Fade Effect */
TEST_START(test_transit6)
{
Evas_Object *bg, *bt, *bt2, *ic;
char buf[PATH_MAX];
evas_object_resize(win, 300, 300);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get());
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_max_set(ic, 50, 50);
bt = elm_button_add(win);
elm_object_content_set(bt, ic);
elm_object_text_set(bt, "Before Button - Fade Effect");
evas_object_move(bt, 25, 125);
evas_object_resize(bt, 250, 50);
evas_object_show(bt);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/rock_02.jpg", elm_app_data_dir_get());
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_max_set(ic, 50, 50);
bt2 = elm_button_add(win);
elm_object_content_set(bt2, ic);
elm_object_text_set(bt2, "After Button - Fade Effect");
evas_object_move(bt2, 25, 125);
evas_object_resize(bt2, 250, 50);
evas_object_resize(win, 300, 300);
evas_object_show(win);
evas_object_smart_callback_add(bt, "clicked", _transit_fade, bt2);
evas_object_smart_callback_add(bt2, "clicked", _transit_fade, bt);
}
TEST_END
/* Resizable Flip Effect */
TEST_START(test_transit7)
{
Evas_Object *bg, *bt, *bt2;
evas_object_resize(win, 400, 400);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bt = elm_button_add(win);
elm_object_text_set(bt, "Front Button - Resizable Flip Effect");
evas_object_show(bt);
evas_object_move(bt, 50, 100);
evas_object_resize(bt, 250, 30);
bt2 = elm_button_add(win);
elm_object_text_set(bt2, "Back Button - Resizable Flip Effect");
evas_object_move(bt2, 50, 100);
evas_object_resize(bt2, 300, 200);
evas_object_resize(win, 400, 400);
evas_object_show(win);
evas_object_smart_callback_add(bt, "clicked", _transit_resizable_flip, bt2);
evas_object_smart_callback_add(bt2, "clicked", _transit_resizable_flip, bt);
}
TEST_END
/* Custom Effect */
TEST_START(test_transit8)
{
Evas_Object *bg, *bt;
Elm_Transit *trans;
Elm_Transit_Effect *effect_context;
evas_object_resize(win, 400, 400);
evas_object_show(win);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bt = elm_button_add(win);
elm_object_text_set(bt, "Button - Custom Effect");
evas_object_show(bt);
evas_object_move(bt, 50, 50);
evas_object_resize(bt, 150, 150);
/* Adding Transit */
trans = elm_transit_add();
elm_transit_auto_reverse_set(trans, EINA_TRUE);
elm_transit_tween_mode_set(trans, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
effect_context = _custom_context_new(150, 150, 50, 50);
elm_transit_object_add(trans, bt);
elm_transit_effect_add(trans,
_custom_op, effect_context,
_custom_context_free);
elm_transit_duration_set(trans, 5.0);
elm_transit_repeat_times_set(trans, -1);
elm_transit_go(trans);
evas_object_resize(win, 400, 400);
evas_object_show(win);
}
TEST_END
/* Chain Transit Effect */
TEST_START(test_transit9)
{
Evas_Object *bg, *bt, *bt2, *bt3, *bt4;
Elm_Transit *trans, *trans2, *trans3, *trans4;
evas_object_resize(win, 400, 400);
evas_object_show(win);
bg = elm_bg_add(win);
elm_win_resize_object_add(win, bg);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
bt = elm_button_add(win);
elm_object_text_set(bt, "Chain 1");
evas_object_resize(bt, 100, 100);
evas_object_move(bt, 0, 0);
evas_object_show(bt);
bt2 = elm_button_add(win);
elm_object_text_set(bt2, "Chain 2");
evas_object_resize(bt2, 100, 100);
evas_object_move(bt2, 300, 0);
evas_object_show(bt2);
bt3 = elm_button_add(win);
elm_object_text_set(bt3, "Chain 3");
evas_object_resize(bt3, 100, 100);
evas_object_move(bt3, 300, 300);
evas_object_show(bt3);
bt4 = elm_button_add(win);
elm_object_text_set(bt4, "Chain 4");
evas_object_resize(bt4, 100, 100);
evas_object_move(bt4, 0, 300);
evas_object_show(bt4);
trans = elm_transit_add();
elm_transit_tween_mode_set(trans, ELM_TRANSIT_TWEEN_MODE_ACCELERATE);
elm_transit_effect_translation_add(trans, 0, 0, 300, 0);
elm_transit_object_add(trans, bt);
elm_transit_duration_set(trans, 1);
elm_transit_objects_final_state_keep_set(trans, EINA_TRUE);
elm_transit_go(trans);
trans2 = elm_transit_add();
elm_transit_tween_mode_set(trans2, ELM_TRANSIT_TWEEN_MODE_ACCELERATE);
elm_transit_effect_translation_add(trans2, 0, 0, 0, 300);
elm_transit_object_add(trans2, bt2);
elm_transit_duration_set(trans2, 1);
elm_transit_objects_final_state_keep_set(trans2, EINA_TRUE);
elm_transit_chain_transit_add(trans, trans2);
trans3 = elm_transit_add();
elm_transit_tween_mode_set(trans3, ELM_TRANSIT_TWEEN_MODE_ACCELERATE);
elm_transit_effect_translation_add(trans3, 0, 0, -300, 0);
elm_transit_object_add(trans3, bt3);
elm_transit_duration_set(trans3, 1);
elm_transit_objects_final_state_keep_set(trans3, EINA_TRUE);
elm_transit_chain_transit_add(trans2, trans3);
trans4 = elm_transit_add();
elm_transit_tween_mode_set(trans4, ELM_TRANSIT_TWEEN_MODE_ACCELERATE);
elm_transit_effect_translation_add(trans4, 0, 0, 0, -300);
elm_transit_object_add(trans4, bt4);
elm_transit_duration_set(trans4, 1);
elm_transit_objects_final_state_keep_set(trans4, EINA_TRUE);
elm_transit_chain_transit_add(trans3, trans4);
evas_object_resize(win, 400, 400);
evas_object_show(win);
}
TEST_END