|
Tizen去顶级图像的图像堆栈窗口小部件 (基本框)代码
- #include "welcomeexample.h"
- typedef struct appdata {
- Evas_Object *win;
- Evas_Object *conform;
- Evas_Object *imgstack;
- Ecore_Animator *ea;
- int distance;
- Evas_Object *top;
- Evas_Object *second;
- } appdata_s;
- static void win_delete_request_cb(void *data, Evas_Object *obj, void *event_info)
- {
- ui_app_exit();
- }
- static void win_back_cb(void *data, Evas_Object *obj, void *event_info)
- {
- appdata_s *ad = data;
- /* Let window go to hide state. */
- elm_win_lower(ad->win);
- }
- typedef struct _flick_info {
- } flick_info;
- static Eina_Bool flick_anim_cb(void *user_data)
- {
- appdata_s *ad = user_data;
- int x, y, w;
- evas_object_geometry_get(ad->top, &x, &y, &w, NULL);
- if (x > -w) evas_object_move(ad->top, x - 30, y);
- else return 0;
- return 1;
- }
- static Eina_Bool flick_back_anim_cb(void *user_data)
- {
- appdata_s *ad = user_data;
- int px, py, x, y;
- evas_object_geometry_get(ad->imgstack, &px, &py, NULL, NULL);
- evas_object_geometry_get(ad->top, &x, &y, NULL, NULL);
- if (x != px) evas_object_move(ad->top, x + 30, y);
- else {
- evas_object_hide(ad->second);
- ad->ea = NULL;
- return 0;
- }
- return 1;
- }
- Evas_Event_Flags flick_start_cb(void *data, void *event_info)
- {
- LOGI("flick start");
- appdata_s *ad = data;
- Eina_List *list = evas_object_box_children_get(ad->imgstack);
- unsigned int count = eina_list_count(list);
- Evas_Object *first = eina_list_nth(list, count-1);
- Evas_Object *second = eina_list_nth(list, count-2);
- evas_object_show(second);
- ad->top = first;
- ad->second = second;
- if (ad->ea == NULL) {
- ad->ea = ecore_animator_add(flick_anim_cb, ad);
- }
- return EVAS_EVENT_FLAG_ON_HOLD;
- }
- Evas_Event_Flags flick_end_cb(void *data, void *event_info)
- {
- LOGI("flick end");
- appdata_s *ad = data;
- if (ad->ea){
- ecore_animator_del(ad->ea);
- ad->ea = NULL;
- }
- evas_object_box_remove(ad->imgstack, ad->top);
- evas_object_hide(ad->top);
- evas_object_box_prepend(ad->imgstack, ad->top);
- ad->top = NULL;
- return EVAS_EVENT_FLAG_NONE;
- }
- Evas_Event_Flags flick_abort_cb(void *data, void *event_info)
- {
- LOGI("flick abort");
- appdata_s *ad = data;
- if (ad->ea)
- ecore_animator_del(ad->ea);
- ad->ea = ecore_animator_add(flick_back_anim_cb, ad);
- return EVAS_EVENT_FLAG_NONE;
- }
- static void create_base_gui(appdata_s *ad)
- {
- /* Window */
- ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
- elm_win_autodel_set(ad->win, EINA_TRUE);
- if (elm_win_wm_rotation_supported_get(ad->win)) {
- int rots[4] = { 0, 90, 180, 270 };
- elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
- }
- evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
- eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
- /* Conformant */
- ad->conform = elm_conformant_add(ad->win);
- elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
- elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
- evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(ad->win, ad->conform);
- evas_object_show(ad->conform);
- /* image stack */
- ad->imgstack = evas_object_box_add(evas_object_evas_get(ad->conform));
- evas_object_box_layout_set(ad->imgstack, evas_object_box_layout_stack, NULL, NULL);
- elm_object_content_set(ad->conform, ad->imgstack);
- evas_object_show(ad->imgstack);
- Evas_Object *img;
- int i;
- char *res = app_get_resource_path();
- char path[256];
- for(i=1; i<=7; i++) {
- sprintf(path, "%s/img%d.%s", res, i, "png");
- img = elm_bg_add(ad->imgstack);
- elm_bg_file_set(img, path, NULL);
- elm_bg_option_set(img, ELM_BG_OPTION_STRETCH);
- evas_object_size_hint_align_set(img, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_box_append(ad->imgstack, img);
- }
- evas_object_show(img);
- Evas_Object *gesture = elm_gesture_layer_add(ad->conform);
- elm_gesture_layer_flick_time_limit_ms_set(gesture, 500);
- elm_gesture_layer_attach(gesture, ad->imgstack);
- elm_gesture_layer_cb_set(gesture, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_START, flick_start_cb, ad);
- elm_gesture_layer_cb_set(gesture, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, flick_end_cb, ad);
- elm_gesture_layer_cb_set(gesture, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_ABORT, flick_abort_cb, ad);
- /* Show window after base gui is set up */
- evas_object_show(ad->win);
- LOGI("initialized");
- }
- static bool app_create(void *data)
- {
- appdata_s *ad = data;
- create_base_gui(ad);
- return true;
- }
- int main(int argc, char *argv[])
- {
- appdata_s ad = {0,};
- ui_app_lifecycle_callback_s event_callback = {0,};
- event_callback.create = app_create;
- return ui_app_main(argc, argv, &event_callback, &ad);
- }
复制代码
|
|